Vous êtes sur la page 1sur 34

Escuela Politcnica Nacional

CIRCUITO IMPLEMENTADO
LCD1

9
10
11
12
13
14
15
16
29
27
4

PB0/XCK0/T0/PCINT8
PB1/T1/CLKO/PCINT9
PB2/AIN0/INT2/PCINT10
PB3/AIN1/OC0A/PCINT11
PB4/SS/OC0B/PCINT12
PB5/MOSI/PCINT13
PB6/MISO/PCINT14
PB7/SCK/PCINT15
PD0/RXD0/PCINT24
PD1/TXD0/PCINT25
PD2/INT0/RXD1/PCINT26
PD3/INT1/TXD1/PCINT27
PD4/OC1B/XCK1/PCINT28
PD5/OC1A/PCINT29
PD6/ICP/OC2B/PCINT30
PD7/OC2A/PCINT31
AREF
AVCC
RESET

PA0/ADC0/PCINT0
PA1/ADC1/PCINT1
PA2/ADC2/PCINT2
PA3/ADC3/PCINT3
PA4/ADC4/PCINT4
PA5/ADC5/PCINT5
PA6/ADC6/PCINT6
PA7/ADC7/PCINT7
PC0/SCL/PCINT16
PC1/SDA/PCINT17
PC2/TCK/PCINT18
PC3/TMS/PCINT19
PC4/TDO/PCINT20
PC5/TDI/PCINT21
PC6/TOSC1/PCINT22
PC7/TOSC2/PCINT23
XTAL1
XTAL2

D0
D1
D2
D3
D4
D5
D6
D7

RS
RW
E

7
8
9
10
11
12
13
14

1
2
3

U1
40
41
42
43
44
1
2
3

4
5
6

VSS
VDD
VEE

LM016L

37
36
35
34
33
32
31
30
19
20
21
22
23
24
25
26

R1

R2

10k

10k

8
7

U2
6
5

ATMEGA164P
7
3

SCL
SDA

X1

X1
CRYSTAL

SOUT
VBAT X2

DS1307

PROGRAMA IMPLEMENTADO EN BASCOM AVR


$regfile = "m164pdef.dat"
$crystal = 8000000
$baud = 9600
$lib "mcsbyte.lbx"
' uso las librerias del ds1307 y la
libreria para
$lib "ds1307clock.lib"
' transformacion de variables
Config Porta = Output
Dim Tempo As Byte
Config Sda = Portc.1
'puertos para comunicacion i2c
Config Scl = Portc.0
Config Porta = Output
Const Dir_esc = &B11010000
'declaro direccion para
lectura y escritura
Const Dir_lec = &B11010001
Dim
Dim
Dim
Dim
Dim
Dim
Dim

Hora As Byte
Minuto As Byte
Segundo As Byte
Weekday As Byte
Dia As Byte
Meses As Byte
Annos As Byte

Dim Puerto As Byte


Dim Aux As Integer
Jonathan Tirado

'

Escuela Politcnica Nacional


Config Lcd = 16 * 2
Config Lcdbus = 4

'inicializo mi lcd

Config Lcdpin = Pin , Db4 = Porta.4 , Db5 = Porta.5 ,


Config Lcdpin = Pin , Db6 = Porta.6 , Db7 = Porta.7 , E = Porta.1 ,
Config Lcdpin = Pin , Rs = Porta.0
Pcmsk1 = 7
cambio de pin
Enable Pcint1
On Pcint1 Cambio
Ddrb = 0 : Portb = 7
Enable Interrupts
'inicio mi reloj
Config Clock = User
Time$ = "00:00:00"
'Date$ = "11:13:02"
Do
'imprimo mis variables de tiempo
Locate 2 , 1
If Hora < 10 Then
Lcd "0"
End If
Lcd Hora
Lcd "h"
If Minuto < 10 Then
Lcd "0"
End If
Lcd Minuto
Lcd "m"
If Segundo < 10 Then
Lcd "0"
End If
Lcd Segundo
Lcd "s"
Locate 1 , 1
If Dia < 10 Then
Lcd "0"
End If
Lcd Dia
Lcd "/"

Jonathan Tirado

'configuro interrupciones por

Escuela Politcnica Nacional


If Meses < 10 Then
Lcd "0"
End If
Lcd Meses
Lcd "/"
If Annos < 10 Then
Lcd "0"
End If
Lcd Annos
Lcd "
"
'Lcd "Reloj digital
Lcd Date$
Waitms 100
Loop
End
Cambio:
Puerto = Portb
Waitms 5
If Puerto = Portb Then
If Pinb.0 = 0 Then
Aux = Aux + 1
If Aux = 5 Then
Aux = 0
End If
End If
If Pinb.1 = 0 Then
Select Case Aux
Case 0:
If Minuto < 59 Then
Minuto = Minuto + 1
Else
Minuto = 0
End If
Gosub Settime
Case 1:
If Hora < 23 Then
Hora = Hora + 1
Else
Hora = 0
End If
Jonathan Tirado

Escuela Politcnica Nacional


Gosub Settime
Case 2:
If Dia < 30 Then
Dia = Dia + 1
Else
Dia = 0
End If
Gosub Setdate
Case 3:
If Meses < 12 Then
Meses = Meses + 1
Else
Meses = 0
End If
Gosub Setdate
Case 4:
If Annos < 99 Then
Annos = Annos + 1
Else
Annos = 0
End If
Gosub Setdate
End Select
End If
If Pinb.2 = 0 Then
Select Case Aux
Case 0:
If Minuto > 0 Then
Minuto = Minuto - 1
Else
Minuto = 59
End If
Gosub Settime
Case 1:
If Hora > 0 Then
Hora = Hora - 1
Else
Jonathan Tirado

Escuela Politcnica Nacional


Hora = 23
End If
Gosub Settime
Case 2:
If Dia > 0 Then
Dia = Dia - 1
Else
Dia = 30
End If
Gosub Setdate
Case 3:
If Meses > 0 Then
Meses = Meses - 1
Else
Meses = 12
End If
Gosub Setdate
Case 4:
If Annos > 0 Then
Annos = Annos - 1
Else
Annos = 99
End If
Gosub Setdate
End Select
End If
End If
Return
'subrutinas de obtencion de datos para el reloj
Getdatetime:
I2cstart
I2cwbyte Dir_esc
Jonathan Tirado

Escuela Politcnica Nacional


I2cwbyte 0
I2cstart
I2cwbyte Dir_lec
I2crbyte _sec , Ack
I2crbyte _min , Ack
I2crbyte _hour , Ack
I2crbyte Weekday , Ack
I2crbyte _day , Ack
I2crbyte _month , Ack
I2crbyte _year , Nack
I2cstop
Segundo = Makedec(_sec)
Minuto = Makedec(_min)
Hora = Makedec(_hour)
_sec = Makedec(_sec)
_min = Makedec(_min)
_hour = Makedec(_hour)
Dia = Makedec(_day)
Meses = Makedec(_month)
Annos = Makedec(_year)
_day = Makedec(_day)
_month = Makedec(_month)
_year = Makedec(_year)
Return
'subrutina de seteo de datos del reloj
Settime:
_sec = Makebcd(segundo)
_min = Makebcd(minuto)
_hour = Makebcd(hora)
I2cstart
I2cwbyte
I2cwbyte
I2cwbyte
I2cwbyte
I2cwbyte
I2cstop
Return

Dir_esc
0
_sec
_min
_hour

Setdate:
_day = Makebcd(dia)
_month = Makebcd(meses)
_year = Makebcd(annos)
I2cstart
I2cwbyte Dir_esc
I2cwbyte 4
Jonathan Tirado

Escuela Politcnica Nacional


I2cwbyte _day
I2cwbyte _month
I2cwbyte _year
I2cstop
Return
PROGRAMA EN LENGUAJE ENSAMBLADOR
.NOLIST
.include "m164pdef.inc"
.LIST
.def
.def
.def
.def
.def
.def

tempo=r16
aux=r17
cont=r18
flag=r19
conta=r20
flag_t=r21

.equ SLA_w=0b11010000
.equ SLA_r=0b11010001
.DSEG
Digito_h_w: .BYTE 3
de configuracion escritura
Digito_m_w: .BYTE 3
bits de configuracion escritura
Digito_s_w: .BYTE 3
los bits de configuracion escritura
Digito_h_r: .BYTE 3
configuracion lectura
Digito_m_r: .BYTE 3
bits de configuracion lectura
Digito_s_r: .BYTE 3
bits de configuracion lectura
Hora_w: .BYTE 1
Minuto_w: .BYTE 1
Segundo_w: .BYTE 1
Hora_r: .BYTE 1
Minuto_r: .BYTE 1
Segundo_r: .BYTE 1
Digito_d_w: .BYTE 3
configuracion escritura
Digito_ds_w: .BYTE 3
con los bits de configuracion escritura
Digito_me_w: .BYTE 3
bits de configuracion escritura
Digito_a_w: .BYTE 3
de configuracion escritura
Digito_d_r: .BYTE 3
de configuracion lectura
Digito_ds_r: .BYTE 3
y con los bits de configuracion lectura
Digito_me_r: .BYTE 3
bits de configuracion lectura

Jonathan Tirado

;registro de uso general


;registro auxiliar
;contador de uso general
;bandera de uso general
;contador de menu
;bandera para la espera en milisegundos
;Direccion de escritura del DS1307
;Direccion de lectura del DS1307
;Digitos de la hora transformada y con los bits
;Digitos de los minutos trasnformados y con los
;Digitos de los segundos trasnformados y con
;Digitos de la hora transformada y con los bits de
;Digitos de los minutos trasnformados y con los
;Digitos de los segundos trasnformados y con los
;valor de la hora a ser enviado
;valor de los minutos a ser enviados
;valor de los segundos a ser enviados
;valor de la hora a ser recibida
;valor de los minutos a ser recibidos
;valor de los segundos a ser recibidos
;Digitos del dia transformado y con los bits de
;Digitos del dia de la semana transformado y
;Digitos de los meses trasnformados y con los
;Digitos de los aos trasnformados y con los bits
;Digitos de los dias transformados y con los bits
;Digitos de los dias de la semana transformados
;Digitos de los meses trasnformados y con los

Escuela Politcnica Nacional


Digito_a_r: .BYTE 3
de configuracion lectura
Dia_w: .BYTE 1
Dias_w: .BYTE 1
Mes_w: .BYTE 1
Ano_w: .BYTE 1
Dia_r: .BYTE 1
Dias_r: .BYTE 1
Mes_r: .BYTE 1
Ano_r: .BYTE 1
M_send: .BYTE 1
S_send: .BYTE 1
A_Reloj: .BYTE 1
DS1307
N_Datos: .BYTE 1

;Digitos de los aos trasnformados y con los bits


;valor del dia a ser enviado
;valor del dia a ser enviado
;valor de los meses a ser enviados
;valor de los aos a ser enviados
;valor de los dias a ser recibidos
;valor de los dias a ser recibidos
;valor de los meses a ser recibidos
;valor de los aos a ser recibidos
;Datos que envia el Master
;Datos que envia el Slave
;Dirrecion de memoria a escribir o leer en el
;Numero de datos a ser enviados o recibidos

.CSEG
.ORG 0x00

jmp Inicio

.ORG 0x02

jmp Menu_I

.ORG 0x04

jmp Up_I

.ORG 0x06

jmp Down_I

;inicializcion del Programa


;INT0 para el menu de igualacion
;INT1 para subir el valor
;INT2 par bajar el valor

.ORG 0x1A

jmp Casi_1
;interrupcion para espera de 0.9 [s]
.ORG 0x20
jmp Tiempo_Espera
;Interrupcion cuando ha pasado el tiempo de
espera
Inicio:
ldi tempo,0b11110000
;A como salida de Datos
out ddra,tempo
ldi tempo,0b00000011
;B como salida de control
out ddrb,tempo
clr tempo
out ddrd,tempo
ldi tempo,0b00000001
;SDA sin configurar y SCL
como salida
out ddrc,tempo
ldi tempo,0b00001000
out porta,tempo
ldi tempo,0b11111100
out portb,tempo
ser tempo
out portd,tempo
ldi tempo,0b11111110
out portc,tempo
in tempo,mcucr
interno

andi tempo,0b11101111
out mcucr,tempo
ldi tempo,HIGH(RAMEND)

Jonathan Tirado

;2 condicion para el Pull up

;inicializando el Stack

Escuela Politcnica Nacional


out SPH,tempo
ldi tempo,LOW(RAMEND)
out SPL,tempo
ldi tempo,8
a modo regular, 100 [kHZ]
sts TWBR,tempo
clr tempo
sts TWSR,tempo
ldi tempo,0b00000010
out tccr0a,tempo
clr tempo
out tccr0b,tempo
ldi tempo,2
sts timsk0,tempo
ldi tempo,0b00000000
sts tccr1a,tempo
ldi tempo,0b00001000
sts tccr1b,tempo
ldi tempo,HIGH(28124)
0.9 [s]

cuando llegue al valor

sts ocr1ah,tempo
ldi tempo,LOW(28124)
sts ocr1al,tempo
ldi tempo,0b00000010

;Configurando I2C para que trabaje


;preescalador 1:1

;inicializando el Timer0

;Configurando el Timer1
;aun no corre y modo CTC
;para que tenga un retardo de

;habilitando la interrupcion

sts timsk1,tempo

inicio

ldi tempo,0b00111111
sts eicra,tempo
ldi tempo,0b00000111
out eimsk,tempo
SEI
call I_LCD_4
ldi tempo,0b10000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b00000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi zh,HIGH(T_vacio<<1)
ldi zl,LOW(T_vacio<<1)
ldi cont,16
call Escribir

;Habilitando INT0, INT1 e INT2

;habilitando las interrupciones globales


;subrutina de inicalizacion del LCD
;Linea 1, 0x00

;apuntando al mensaje de
;numero de elementos del mensaje

clr conta
clr flag_t
/*Inicializacion del DS1307*/
ldi tempo,0x02
integrado

Jonathan Tirado

;direccion de las horas en el

Escuela Politcnica Nacional


sts A_reloj,tempo
ldi tempo,19
sts Hora_w,tempo
ldi xh,HIGH(Hora_w)
BIN-BCD

ldi xl,LOW(Hora_w)
ldi yh,HIGH(Digito_h_w)
ldi yl,LOW(Digito_h_w)
call BIN_BCD
lds tempo,Digito_h_w+1
andi tempo,0b11110011
sts Digito_h_w+1,tempo

Codificar

ldi xh,HIGH(Digito_h_w+1)
ldi xl,LOW(Digito_h_w+1)
call Codificar_I

;hora a ser cargada


;guardo la hora a ser escrita
;argumentos de entrada para
;digitos de la hora

;modo 24H

;argumentos de entrada para


;para preparar el dato a enviar

M_send
al integrado

call Write_I2C
ldi tempo,0x01

integrado

sts A_reloj,tempo
ldi tempo,6
sts Minuto_w,tempo

;subrutina de envio de informacion


;direccion de los minutos en el
;minutos a ser cargados
;guardo los minutos a ser

escritos
BIN-BCD

ldi xh,HIGH(Minuto_w)
ldi xl,LOW(Minuto_w)
ldi yh,HIGH(Digito_m_w)
ldi yl,LOW(Digito_m_w)
call BIN_BCD

;argumentos de entrada para


;digitos de los minutos

lds tempo,Digito_m_w+1
andi tempo,0b11110111
sts Digito_m_w+1,tempo
ldi xh,HIGH(Digito_m_w+1)
para Codificar
M_send

ldi xl,LOW(Digito_m_w+1)
call Codificar_I
call Write_I2C

;argumentos de entrada
;para preparar el dato a enviar
;subrutina de envio de informacion

al integrado
integrado

escritos

Jonathan Tirado

ldi tempo,0x00
sts A_reloj,tempo
ldi tempo,9
sts Segundo_w,tempo

;direccion de los segundos en el


;minutos a ser cargados
;guardo los minutos a ser

Escuela Politcnica Nacional


ldi xh,HIGH(Segundo_w)
BIN-BCD

ldi xl,LOW(Segundo_w)
ldi yh,HIGH(Digito_s_w)
ldi yl,LOW(Digito_s_w)
call BIN_BCD
lds tempo,Digito_s_w+1
ori tempo,0b00000000
sts Digito_s_w+1,tempo

para Codificar

ldi xh,HIGH(Digito_s_w+1)
ldi xl,LOW(Digito_s_w+1)
call Codificar_I

;argumentos de entrada para


;digitos de los minutos

;para activar el oscilador


;argumentos de entrada
;para preparar el dato a enviar

M_send
al integrado

call Write_I2C

/*Inicializando la Fecha*/
ldi tempo,0x03
el integrado
sts A_reloj,tempo
ldi tempo,1
sts Dias_w,tempo
ser escrito
sts M_send,tempo
call Write_I2C
al integrado
integrado

BCD

;subrutina de envio de informacion

;direccion del dia de la semana del integrado en

ldi tempo,0x04

;subrutina de envio de informacion


;direccion de los dias en el

sts A_reloj,tempo
ldi tempo,16
sts Dia_w,tempo

;dias a ser cargados


;guardo los dias a ser escritos

ldi xh,HIGH(Dia_w)

;argumentos de entrada para BIN-

ldi xl,LOW(Dia_w)
ldi yh,HIGH(Digito_d_w)
ldi yl,LOW(Digito_d_w)
call BIN_BCD
lds tempo,Digito_d_w+1
andi tempo,0b11110011
decenas no mas de 31
sts Digito_d_w+1,tempo
para Codificar

;dia a ser cargada


;guardo el dia de la semana a

ldi xh,HIGH(Digito_d_w+1)
ldi xl,LOW(Digito_d_w+1)
call Codificar_I

;digitos de los dias

;asegurando los byte de las

;argumentos de entrada
;para preparar el dato a enviar

M_send
al integrado

Jonathan Tirado

call Write_I2C

;subrutina de envio de informacion

Escuela Politcnica Nacional


ldi tempo,0x05
integrado

;direccion de los meses en el

sts A_reloj,tempo
ldi tempo,6
sts Mes_w,tempo

;meses a ser cargados


;guardo los meses a ser escritos

ldi xh,HIGH(Mes_w)
BCD

;argumentos de entrada para BIN-

ldi xl,LOW(Mes_w)
ldi yh,HIGH(Digito_me_w)
ldi yl,LOW(Digito_me_w)
call BIN_BCD

;digitos de los meses

lds tempo,Digito_me_w+1
andi tempo,0b11110001
decenas no mas de 12
sts Digito_me_w+1,tempo

;asegurando los byte de las

ldi xh,HIGH(Digito_me_w+1)
para Codificar
M_send

ldi xl,LOW(Digito_me_w+1)
call Codificar_I
call Write_I2C

;argumentos de entrada
;para preparar el dato a enviar
;subrutina de envio de informacion

al integrado
integrado

BCD

ldi tempo,0x06

;direccion de los aos en el

sts A_reloj,tempo
ldi tempo,13
sts Ano_w,tempo

;aos a ser cargados


;guardo los aos a ser escritos

ldi xh,HIGH(Ano_w)

;argumentos de entrada para BIN-

ldi xl,LOW(Ano_w)
ldi yh,HIGH(Digito_a_w)
ldi yl,LOW(Digito_a_w)
call BIN_BCD

;digitos de los aos

ldi xh,HIGH(Digito_a_w+1)
para Codificar
M_send

ldi xl,LOW(Digito_a_w+1)
call Codificar_I
call Write_I2C

;argumentos de entrada
;para preparar el dato a enviar
;subrutina de envio de informacion

al integrado
Prog_Principal:

;Programa Principal
clr flag_t
ldi tempo,0x02
sts A_reloj,tempo
call Read_I2C
ldi xh,HIGH(Hora_r)

decodificar

Jonathan Tirado

;leemos primero las horas

;argumento de entrada para

Escuela Politcnica Nacional


ldi xl,LOW(Hora_r)
call Decodificar_I
BIN-BCD

ldi xh,HIGH(Hora_r)
ldi xl,LOW(Hora_r)
ldi yh,HIGH(Digito_h_r)
ldi yl,LOW(Digito_h_r)
call BIN_BCD

cbi portb,1

;argumentos de entrada para


;digitos de las horas

;Redireccionando el puntero del LCD


ldi tempo,0b10000000
;Linea 1, 0x03
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b00110000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi xh,HIGH(Digito_h_r+1)

presentar en el LCD

;apuntando a los valores a

ldi xl,LOW(Digito_h_r+1)
ldi cont,2

;numero de elementos del mensaje

call Escribir_Numero

inicio

cbi portb,1
ldi tempo,0b10000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b01010000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi zh,HIGH(T_separa<<1)
ldi zl,LOW(T_separa<<1)
ldi cont,1
call Escribir
cbi portb,1
ldi tempo,0b10000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b10000000
out porta,tempo
sbi portb,0

Jonathan Tirado

;Redireccionando el puntero del LCD


;Linea 1, 0x05

;apuntando al mensaje de
;numero de elementos del mensaje

;Redireccionando el puntero del LCD


;Linea 1, 0x08

Escuela Politcnica Nacional


call Espera
cbi portb,0
ldi zh,HIGH(T_separa<<1)
inicio

ldi zl,LOW(T_separa<<1)
ldi cont,1
call Escribir
ldi tempo,0x01
sts A_reloj,tempo
call Read_I2C
ldi xh,HIGH(Minuto_r)

decodificar

BIN-BCD

;apuntando al mensaje de
;numero de elementos del mensaje

;leemos los minutos

;argumento de entrada para

ldi xl,LOW(Minuto_r)
call Decodificar_I
ldi xh,HIGH(Minuto_r)
ldi xl,LOW(Minuto_r)
ldi yh,HIGH(Digito_m_r)
ldi yl,LOW(Digito_m_r)
call BIN_BCD
cbi portb,1
ldi tempo,0b10000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

;argumentos de entrada para


;digitos de los minutos

;Redireccionando el puntero del LCD


;Linea 1, 0x06

ldi tempo,0b01100000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi xh,HIGH(Digito_m_r+1)
presentar en el LCD

;apuntando a los valores a

ldi xl,LOW(Digito_m_r+1)
ldi cont,2

;numero de elementos del mensaje

call Escribir_Numero
ldi tempo,0x00
sts A_reloj,tempo
call Read_I2C

decodificar

ldi xh,HIGH(Segundo_r)

;leemos los segundos

;argumento de entrada para

ldi xl,LOW(Segundo_r)
call Decodificar_I
ldi xh,HIGH(Segundo_r)
para BIN-BCD

Jonathan Tirado

ldi xl,LOW(Segundo_r)
ldi yh,HIGH(Digito_s_r)

;argumentos de entrada
;digitos de los segundos

Escuela Politcnica Nacional


ldi yl,LOW(Digito_s_r)
call BIN_BCD
cbi portb,1
ldi tempo,0b10000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

;Redireccionando el puntero del LCD


;Linea 1, 0x49

ldi tempo,0b10010000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

presentar en el LCD

ldi xh,HIGH(Digito_s_r+1)

;apuntando a los valores a

ldi xl,LOW(Digito_s_r+1)
ldi cont,2

;numero de elementos del mensaje

call Escribir_Numero

decodificar

ldi tempo,0x04
sts A_reloj,tempo
call Read_I2C

;leemos primero las dias

ldi xh,HIGH(Dia_r)

;argumento de entrada para

ldi xl,LOW(Dia_r)
call Decodificar_I
ldi xh,HIGH(Dia_r)
BCD

ldi xl,LOW(Dia_r)
ldi yh,HIGH(Digito_d_r)
ldi yl,LOW(Digito_d_r)
call BIN_BCD
cbi portb,1

;argumentos de entrada para BIN;digitos de los dias

;Redireccionando el puntero del LCD


ldi tempo,0b11000000
;Linea 2, 0x43
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b00110000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi xh,HIGH(Digito_d_r+1)

presentar en el LCD

Jonathan Tirado

ldi xl,LOW(Digito_d_r+1)

;apuntando a los valores a

Escuela Politcnica Nacional


ldi cont,2

;numero de elementos del mensaje

call Escribir_Numero

separacion

cbi portb,1
ldi tempo,0b11000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b01010000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi zh,HIGH(T_separa_1<<1)
ldi zl,LOW(T_separa_1<<1)
ldi cont,1
call Escribir

separador

cbi portb,1
ldi tempo,0b11000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b10000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi zh,HIGH(T_separa_1<<1)
ldi zl,LOW(T_separa_1<<1)
ldi cont,1
call Escribir

decodificar

;Redireccionando el puntero del LCD


;Linea 2, 0x45

;apuntando al mensaje de
;numero de elementos del mensaje

;Redireccionando el puntero del LCD


;Linea 2, 0x48

;apuntando al mensaje del


;numero de elementos del mensaje

ldi tempo,0x05
sts A_reloj,tempo
call Read_I2C

;leemos los meses

ldi xh,HIGH(Mes_r)

;argumento de entrada para

ldi xl,LOW(Mes_r)
call Decodificar_I
ldi xh,HIGH(Mes_r)
BIN-BCD

ldi xl,LOW(Mes_r)
ldi yh,HIGH(Digito_me_r)
ldi yl,LOW(Digito_me_r)
call BIN_BCD
cbi portb,1
ldi tempo,0b11000000
out porta,tempo
sbi portb,0

Jonathan Tirado

;argumentos de entrada para


;digitos de los minutos

;Redireccionando el puntero del LCD


;Linea 2, 0x46

Escuela Politcnica Nacional


call Espera
cbi portb,0
ldi tempo,0b01100000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi xh,HIGH(Digito_me_r+1)
presentar en el LCD

;apuntando a los valores a

ldi xl,LOW(Digito_me_r+1)
ldi cont,2

;numero de elementos del mensaje

call Escribir_Numero

decodificar

ldi tempo,0x06
sts A_reloj,tempo
call Read_I2C

;leemos los aos

ldi xh,HIGH(Ano_r)

;argumento de entrada para

ldi xl,LOW(Ano_r)
call Decodificar_I
ldi xh,HIGH(Ano_r)
BCD

;argumentos de entrada para BIN-

ldi xl,LOW(Ano_r)
ldi yh,HIGH(Digito_a_r)
ldi yl,LOW(Digito_a_r)
call BIN_BCD
cbi portb,1
ldi tempo,0b11000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

;digitos de los segundos

;Redireccionando el puntero del LCD


;Linea 2, 0x49

ldi tempo,0b10010000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

presentar en el LCD

ldi xh,HIGH(Digito_a_r+1)

;apuntando a los valores a

ldi xl,LOW(Digito_a_r+1)
ldi cont,2

;numero de elementos del mensaje

call Escribir_Numero
call Esperar_1
No_pasa:

;espera para actulizar


sbrs flag_t,0

Jonathan Tirado

;subrutina para dejar que el corra

Escuela Politcnica Nacional


rjmp No_pasa
ldi tempo,0b00001000
sts tccr1b,tempo
rjmp Prog_Principal

;aun no corre y modo CTC

/*Subrutinas de Envio y Recepcion en I2C*/


Write_I2C:
;Subrutina de Envio de Informacion
ldi tempo,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
;Bajamos la
bandera para habilitar el envio de la condicion de inicio y habilitamos la comunicacion
sts TWCR,tempo
Wait1_w:
;Tiempo de espera hasta que la Start condition ha
sido enviada
lds tempo,TWCR
sbrs tempo,TWINT
;esperamos hasta que
nuevamente se levante la bandera
rjmp Wait1_w
escritura del Slave

ldi tempo,SLA_w

;cargamos la direccion de

sts TWDR,tempo
ldi tempo,(1<<TWINT)|(1<<TWEN)
habilitamos el envio

;bajamos la bandera y

sts TWCR,tempo

Wait2_w:
informacion

;Tiempo de espera hasta que se haya enviado la

lds tempo,TWCR
sbrs tempo,TWINT
nuevamente se levante la bandera
rjmp Wait2_w

;esperamos hasta que

lds tempo,A_reloj
;cargamos la direccion de
escitura a ser enviado desde el Master
sts TWDR,tempo
ldi tempo,(1<<TWINT)|(1<<TWEN)
;bajamos la bandera y
habilitamos el envio
sts TWCR,tempo
Wait3_w:
;Tiempo de espera hasta que se haya enviado la
informacion
lds tempo,TWCR
sbrs tempo,TWINT
;esperamos hasta que
nuevamente se levante la bandera
rjmp Wait3_w
desde el Master

lds tempo,M_send

;cargamos el dato a ser enviado

sts TWDR,tempo
ldi tempo,(1<<TWINT)|(1<<TWEN)
habilitamos el envio

sts TWCR,tempo

Wait4_w:
informacion
lds tempo,TWCR
sbrs tempo,TWINT
nuevamente se levante la bandera
rjmp Wait4_w

Jonathan Tirado

;bajamos la bandera y

;Tiempo de espera hasta que se haya enviado la


;esperamos hasta que

Escuela Politcnica Nacional


ldi tempo,(1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
envio de la Stop Condition
sts TWCR,tempo
ret

;habilitando el

Read_I2C:

;Subrutina de Recepcion de Informacion


ldi tempo,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
;Bajamos la
bandera para habilitar el envio de la condicion de inicio y habilitamos la comunicacion
sts TWCR,tempo
Wait1_r:
;Tiempo de espera hasta que la Start condition ha
sido enviada
lds tempo,TWCR
sbrs tempo,TWINT
;esperamos hasta que
nuevamente se levante la bandera
rjmp Wait1_r
ldi tempo,SLA_w
;cargamos la direccion de
escritura del Slave para mover el puntero
sts TWDR,tempo
ldi tempo,(1<<TWINT)|(1<<TWEN)
;bajamos la bandera y
habilitamos el envio
sts TWCR,tempo
Wait2_r:
;Tiempo de espera hasta que se haya enviado la
informacion
lds tempo,TWCR
sbrs tempo,TWINT
;esperamos hasta que
nuevamente se levante la bandera
rjmp Wait2_r
lds tempo,A_reloj
;cargamos la direccion de lectura
a ser enviado desde el Master
sts TWDR,tempo
ldi tempo,(1<<TWINT)|(1<<TWEN)
;bajamos la bandera y
habilitamos el envio
sts TWCR,tempo
Wait3_r:
;Tiempo de espera hasta que se haya enviado la
informacion
lds tempo,TWCR
sbrs tempo,TWINT
;esperamos hasta que
nuevamente se levante la bandera
rjmp Wait3_r
ldi tempo,(1<<TWINT)|(1<<TWSTA)|(1<<TWEN)
;Mandamos un repeated Start
para comenzar la lectura
sts TWCR,tempo
Wait4_r:
;Tiempo de espera hasta que la Start condition ha
sido enviada nuevamente
lds tempo,TWCR
sbrs tempo,TWINT
;esperamos hasta que
nuevamente se levante la bandera
rjmp Wait4_r
ldi tempo,SLA_r
;cargamos la direccion de lectura del Slave
sts TWDR,tempo
ldi tempo,(1<<TWINT)|(1<<TWEN)
;bajamos la bandera y
habilitamos el envio
sts TWCR,tempo

Jonathan Tirado

Escuela Politcnica Nacional


Wait5_r:
informacion

;Tiempo de espera hasta que se haya enviado la

lds tempo,TWCR
sbrs tempo,TWINT
nuevamente se levante la bandera
rjmp Wait5_r

;esperamos hasta que

ldi tempo,(1<<TWINT)|(1<<TWEN)
;bajamos la bandera y
habilitamos el envio una ves ms para que lleguen los datos desde el integrado
sts TWCR,tempo
Wait7_r:
;Tiempo de espera hasta que se haya enviado la
informacion
lds tempo,TWCR
sbrs tempo,TWINT
;esperamos hasta que
nuevamente se levante la bandera
rjmp Wait7_r
Slave

lds tempo,TWDR

recibido

;cargamos el dato enviado desde el

sts S_send,tempo

;guardo en SRAM el dato

ldi tempo,(1<<TWINT)|(1<<TWEN)
habilitamos el envio para devolver un NOT ACKNOWLEDGE
sts TWCR,tempo
Wait6_r:
informacion

;bajamos la bandera y

;Tiempo de espera hasta que se haya enviado la

lds tempo,TWCR
sbrs tempo,TWINT
nuevamente se levante la bandera
rjmp Wait6_r

;esperamos hasta que

ldi tempo,(1<<TWINT)|(1<<TWEN)|(1<<TWSTO)
envio de la Stop Condition
sts TWCR,tempo
ret

;habilitando el

/*Subrutinas para Procesamiento de la informacion a ser envida y de la que es recibida*/


Esperar_1:
clr tempo
sts tcnt1h,tempo
;encerando el timer
sts tcnt1l,tempo
ldi tempo,0b00001100
;preescalador 1:256 y modo
CTC
sts tccr1b,tempo
ret
Kill_Rebote:

;retardo de aproximadamente 10[ms]


push tempo
push cont
in tempo,SREG
push tempo
ldi cont,105

Saltox_k:
Saltoy_k:

Jonathan Tirado

ldi tempo,255
dec tempo

Escuela Politcnica Nacional


brne Saltoy_k
dec cont
brne Saltox_k

ret

pop tempo
out SREG,tempo
pop cont
pop tempo

BIN_BCD:

;recuperando estado

;paso de Binario a BCD para 8 bits


push cont
push tempo
clr cont
ld tempo,x

Centenas:

Decenas:

Decenas1:

Unidades:

;obtengo el argumento de entrada

subi tempo,100
brcs Decenas
inc cont
rjmp Centenas
st y+,cont
clr cont
subi tempo,-100

;guardar las centenas


;recupero el ultimo valor positivo

subi tempo,10
brcs Unidades
inc cont
rjmp Decenas1

;resta de 8 bits
;cuando ya es menor

st y+,cont
subi tempo,-10
st y,tempo
pop tempo
pop cont

;guardo las decenas


;recupero las unidades
;guardo las unidades

ret
Codificar_I:
;Subrutina ubicar la informacion de horas, minutos
y segundos en el formato de envio M_send
push tempo
push aux
push cont
ld aux,x+
referencia, ya sea los digitos de Hora, Minuto, Segundo
swap aux
para armar el byte de envio M_send
andi aux,0b11110000
ld tempo,x
argumento de entrada
andi tempo,0b00001111
or tempo,aux
sts M_send,tempo
DS1307
pop cont
pop aux
pop tempo
ret

Jonathan Tirado

;recibir el argumento de entrada por


en BCD
;mover los 4 bits mas significativos
;cargo el segundo digito del

;guardar el byte que se envia al

Escuela Politcnica Nacional


Decodificar_I:
;Subrutina que recibe el dato del Slave, S_send y
guardar los digitos en BDC correspondientes en en SRAM digitos y reconstruye el numero
total y guarda en su correspondiente en Hora/Minuto/Segundo_r
push tempo
push aux
push cont
lds aux,S_send
Slave
Binario

andi aux,0b01110000

;cargo el byte enviado por el


;recupero el numero en

swap aux
ldi tempo,10
mul aux,tempo
mov aux,r0
lds tempo,S_send
andi tempo,0b00001111
add tempo,aux
st x,tempo
pop cont
pop aux
pop tempo

ret
/*Limpiar la Pantalla*/
Limpiar:
push tempo
cbi portb,1
ldi tempo,0b00000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

;Mandando 0x01 se limpia la Pantalla

ldi tempo,0b00010000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
pop tempo
ret
/*Subrutina para Escribir un Mensaje en el LCD*/
Escribir:
push tempo
push aux
sbi portb,1
Lazo_Pasar:
lpm tempo,z
andi tempo,0b11110000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

Jonathan Tirado

;RS en 1L

;habilitar
;subrutina para esperar la escritura

Escuela Politcnica Nacional


lpm tempo,z+
andi tempo,0b00001111
swap tempo
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

ret

dec cont
brne Lazo_Pasar
pop aux
pop tempo

/*Subrutina para Escribir el Contador en el LCD*/


Escribir_Numero:
push tempo
push aux
sbi portb,1
Pasar_Numero:
ldi tempo,0b00110000
que es un numero en codigo ASCII
out porta,tempo
sbi portb,0
call Espera
escritura
cbi portb,0
ld tempo,x+
andi tempo,0b00001111
swap tempo
out porta,tempo
sbi portb,0
call Espera
escritura

;habilitar
;subrutina para esperar la escritura

;RS en 1L
;los 4 primeros bits implican
;habilitar
;subrutina para esperar la

;habilitar
;subrutina para esperar la

cbi portb,0
dec cont
brne Pasar_Numero
pop aux
pop tempo

ret
/*Subrutina de Inicializacin de LCD 16x2 a 4 bits*/
I_LCD_4:
push tempo
in tempo,SREG
push tempo
cbi portb,1
/*Espera de mas de 15 [ms] para que alcance los 4.5 [V]*/
ldi tempo,124
out ocr0a,tempo
ldi tempo,5
;preescalador 1:1024
out tccr0b,tempo
Wait1:
sbrs flag,0
rjmp Wait1

Jonathan Tirado

Escuela Politcnica Nacional

encerandolo

clr flag
out tccr0b,flag

;parando el timer 0 y

out ocr0a,flag
/*Function Set*/
ldi tempo,0x30
out porta,tempo
sbi portb,0
/*Espera de mas de 4,1 [ms]*/
ldi tempo,124
out ocr0a,tempo
ldi tempo,5
out tccr0b,tempo
Wait2:
sbrs flag,0
rjmp Wait2
clr flag
out tccr0b,flag

;preescalador 1:1024

;parando el timer 0 y

encerandolo

out ocr0a,flag
cbi portb,0
/*Function Set segunda vez*/
ldi tempo,0x30
out porta,tempo
sbi portb,0
/*Espera de mas de 100 [us]*/
ldi tempo,14
out ocr0a,tempo
ldi tempo,3
out tccr0b,tempo
Wait3:
sbrs flag,0
rjmp Wait3
clr flag
out tccr0b,flag
encerandolo
out ocr0a,flag
cbi portb,0
/*Function Set tres vez*/
ldi tempo,0x30
out porta,tempo
sbi portb,0
call Espera
call Espera
cbi portb,0
/*Function Set cuarta vez*/
ldi tempo,0b00100000
out porta,tempo
sbi portb,0
call Espera
call Espera
cbi portb,0
ldi tempo,0b00100000
display
out porta,tempo
sbi portb,0

Jonathan Tirado

;preescalador 1:64

;parando el timer 0 y

;4 bits

;numero de lineas del

Escuela Politcnica Nacional


call Espera
call Espera
cbi portb,0
ldi tempo,0b10000000
out porta,tempo
sbi portb,0
call Espera
call Espera
cbi portb,0
/*Encender Display*/

;fuente

ldi tempo,0b00000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b11110000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

/*Modo de Ingreso*/

ldi tempo,0b00000000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,0b01100000
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

/*Limpiar Display*/

ldi tempo,0
out porta,tempo
sbi portb,0
call Espera
cbi portb,0
ldi tempo,1
out porta,tempo
sbi portb,0
call Espera
cbi portb,0

ret
Espera:

Lazo_ret:

Jonathan Tirado

pop tempo
out SREG,tempo
pop tempo
;aproximadamente 96 [us] a 8 [MHz]
push aux
in aux,SREG
push aux
ldi aux,255

;retardo

Escuela Politcnica Nacional


dec aux
brne Lazo_ret
pop aux
out SREG,aux
pop aux

ret
/*Subrutina de Interrupcion del Timer0*/
Tiempo_Espera:
push tempo
in tempo,SREG
push tempo
com flag

reti

pop tempo
out SREG,tempo
pop tempo

/*Subrutina de Interrupcion del Timer1*/


Casi_1:
push tempo
in tempo,SREG
push tempo
ser flag_t
pop tempo
out SREG,tempo
pop tempo
reti
/*Subrutinas de Interrupcion*/
Menu_I:
debe igualar
call Kill_Rebote
software
push tempo
out SREG,tempo
push tempo
push aux
push cont

;aumentar el contador para cambiar lo que se

inc conta
correspondiente a las opciones del menu
cpi conta,6
Normal, Horas, Minutos, Das, Meses y Aos
brcs Salir_Menu
clr conta
Salir_Menu:
pop cont
pop aux
pop tempo
out SREG,tempo
pop tempo
reti

Jonathan Tirado

;eliminacion de rebotes por


;salvar estado

;incremento el valor
;solo hay 6 opciones en el Menu:

Escuela Politcnica Nacional


Up_I:
software

call Kill_Rebote

;aumentando el valor seleccionado


;eliminacion de rebotes por

push tempo
out SREG,tempo
push tempo
push aux
push cont

minutos

;salvar estado

cpi conta,0
breq Normal_U

;cuando no se debe igualar el Reloj

cpi conta,1
breq Up_H

;cuando se quiere igualar las horas

cpi conta,2

;cuando se quiere igualar los

breq Up_M
cpi conta,3
breq Up_D

;cuando se quiere igualar los dias

cpi conta,4
breq Up_Me

;cuando se quiere igualar los meses

cpi conta,5
breq Up_A

;cuando se quiere igualar los aos

Normal_U:
Up_H:
Up_M:
Up_D:
Up_Me:
Up_A:
Up_H_1:
integrado

rjmp Salir_Up
rjmp Up_H_1
rjmp Up_M_1
rjmp Up_D_1
rjmp Up_Me_1
rjmp Up_A_1
ldi tempo,0x02

;incrementar el valor de la hora


;direccion de las horas en el

sts A_reloj,tempo
lds tempo,Hora_r
que mando el Slave

Hora_Ok:

BIN-BCD

inc tempo
cpi tempo,24
brcs Hora_Ok
clr tempo

;hora a ser cargada


;que la hora no sea mayor a 24

sts Hora_w,tempo

;guardo la hora a ser escrita

ldi xh,HIGH(Hora_w)

;argumentos de entrada para

ldi xl,LOW(Hora_w)
ldi yh,HIGH(Digito_h_w)

Jonathan Tirado

;cargo el ultimo valor de hora

;digitos de la hora

Escuela Politcnica Nacional


ldi yl,LOW(Digito_h_w)
call BIN_BCD

Codificar
M_send

lds tempo,Digito_h_w+1
andi tempo,0b11110011
sts Digito_h_w+1,tempo

;modo 24H

ldi xh,HIGH(Digito_h_w+1)

;argumentos de entrada para

ldi xl,LOW(Digito_h_w+1)
call Codificar_I
call Write_I2C

al integrado
Up_M_1:
integrado
enviado por el Slave

;para preparar el dato a enviar


;subrutina de envio de informacion

jmp Salir_Up
ldi tempo,0x01
sts A_reloj,tempo
lds tempo,Minuto_r

;direccion de los minutos en el


;el ultimo valor de minuto

inc tempo

Minuto_Ok:
escritos
BIN-BCD

cpi tempo,60
brcs Minuto_Ok
clr tempo
sts Minuto_w,tempo

;guardo los minutos a ser

ldi xh,HIGH(Minuto_w)

;argumentos de entrada para

ldi xl,LOW(Minuto_w)
ldi yh,HIGH(Digito_m_w)
ldi yl,LOW(Digito_m_w)
call BIN_BCD

;digitos de los minutos

lds tempo,Digito_m_w+1
andi tempo,0b11110111
sts Digito_m_w+1,tempo
para Codificar

ldi xh,HIGH(Digito_m_w+1)
ldi xl,LOW(Digito_m_w+1)
call Codificar_I

;argumentos de entrada
;para preparar el dato a enviar

M_send
al integrado
Up_D_1:
integrado
por el Slave

Jonathan Tirado

call Write_I2C

;subrutina de envio de informacion

jmp Salir_Up
ldi tempo,0x04

;direccion de los dias en el

sts A_reloj,tempo
lds tempo,Dia_r

;el ultimo valor de dias enviado

inc tempo

Escuela Politcnica Nacional

Dia_Ok:

BIN-BCD

cpi tempo,32
brcs Dia_Ok
ldi tempo,1
sts Dia_w,tempo

;guardo los dias a ser escritos

ldi xh,HIGH(Dia_w)

;argumentos de entrada para

ldi xl,LOW(Dia_w)
ldi yh,HIGH(Digito_d_w)
ldi yl,LOW(Digito_d_w)
call BIN_BCD

;digitos de los dias

lds tempo,Digito_d_w+1
andi tempo,0b11110011
sts Digito_d_w+1,tempo
ldi xh,HIGH(Digito_d_w+1)
para Codificar
M_send

ldi xl,LOW(Digito_d_w+1)
call Codificar_I
call Write_I2C

al integrado
Up_Me_1:
integrado
enviado por el Slave

;argumentos de entrada
;para preparar el dato a enviar
;subrutina de envio de informacion

jmp Salir_Up
ldi tempo,0x05
sts A_reloj,tempo
lds tempo,Mes_r

;direccion de los meses en el


;el ultimo valor de meses

inc tempo

Mes_Ok:

BIN-BCD

cpi tempo,13
brcs Mes_Ok
ldi tempo,1
sts Mes_w,tempo

;guardo los meses a ser escritos

ldi xh,HIGH(Mes_w)

;argumentos de entrada para

ldi xl,LOW(Mes_w)
ldi yh,HIGH(Digito_me_w)
ldi yl,LOW(Digito_me_w)
call BIN_BCD

;digitos de los meses

lds tempo,Digito_me_w+1
andi tempo,0b11110001
sts Digito_me_w+1,tempo
ldi xh,HIGH(Digito_me_w+1)
para Codificar
M_send

Jonathan Tirado

ldi xl,LOW(Digito_me_w+1)
call Codificar_I

;argumentos de entrada
;para preparar el dato a enviar

Escuela Politcnica Nacional


call Write_I2C
al integrado
Up_A_1:
integrado
por el Slave

;subrutina de envio de informacion

jmp Salir_Up
ldi tempo,0x06

;direccion de los aos en el

sts A_reloj,tempo
lds tempo,Ano_r

;el ultimo valor de aos enviado

inc tempo

Ano_Ok:

BIN-BCD

cpi tempo,100
brcs Ano_Ok
clr tempo
sts Ano_w,tempo

;guardo los aos a ser escritos

ldi xh,HIGH(Ano_w)

;argumentos de entrada para

ldi xl,LOW(Ano_w)
ldi yh,HIGH(Digito_a_w)
ldi yl,LOW(Digito_a_w)
call BIN_BCD
ldi xh,HIGH(Digito_a_w+1)
para Codificar
M_send

ldi xl,LOW(Digito_a_w+1)
call Codificar_I
call Write_I2C

;digitos de los aos

;argumentos de entrada
;para preparar el dato a enviar
;subrutina de envio de informacion

al integrado
Salir_Up:

reti

pop cont
pop aux
pop tempo
out SREG,tempo
pop tempo

Down_I:
software

call Kill_Rebote
push tempo
out SREG,tempo
push tempo
push aux
push cont

minutos

Jonathan Tirado

;eliminacion de rebotes por


;salvar estado

cpi conta,0
breq Normal_D

;cuando no se debe igualar el Reloj

cpi conta,1
breq D_H

;cuando se quiere igualar las horas

cpi conta,2

;cuando se quiere igualar los

breq D_M

Escuela Politcnica Nacional


cpi conta,3
breq D_D

;cuando se quiere igualar los dias

cpi conta,4
breq D_Me

;cuando se quiere igualar los meses

cpi conta,5
breq D_A

;cuando se quiere igualar los aos

Normal_D:
D_H:
D_M:
D_D:
D_Me:
D_A:
D_H_1:
integrado

rjmp Salir_D
rjmp D_H_1
rjmp D_M_1
rjmp D_D_1
rjmp D_Me_1
rjmp D_A_1
ldi tempo,0x02

;decrementar el valor de la hora


;direccion de las horas en el

sts A_reloj,tempo
lds tempo,Hora_r

;cargo el ultimo valor de hora

que mando el Slave

Hora_1:
H_Ok:

BIN-BCD

cpi tempo,0
breq Hora_1
dec tempo
rjmp H_Ok

;hora a ser cargada


;para que cuando sea cero regreso a 23

ldi tempo,23
sts Hora_w,tempo

;guardo la hora a ser escrita

ldi xh,HIGH(Hora_w)

;argumentos de entrada para

ldi xl,LOW(Hora_w)
ldi yh,HIGH(Digito_h_w)
ldi yl,LOW(Digito_h_w)
call BIN_BCD

Codificar

;digitos de la hora

lds tempo,Digito_h_w+1
andi tempo,0b11110011
sts Digito_h_w+1,tempo

;modo 24H

ldi xh,HIGH(Digito_h_w+1)

;argumentos de entrada para

ldi xl,LOW(Digito_h_w+1)
call Codificar_I

;para preparar el dato a enviar

M_send
al integrado

call Write_I2C
jmp Salir_D

Jonathan Tirado

;subrutina de envio de informacion

Escuela Politcnica Nacional


D_M_1:
integrado

ldi tempo,0x01

;direccion de los minutos en el

sts A_reloj,tempo
lds tempo,Minuto_r

;el ultimo valor de minuto

enviado por el Slave

Minuto_1:
M_Ok:
escritos
BIN-BCD

cpi tempo,0
breq Minuto_1
dec tempo
rjmp M_Ok

;minutos a ser cargada


;para que cuando sea cero regrese a 59

ldi tempo,59
sts Minuto_w,tempo

;guardo los minutos a ser

ldi xh,HIGH(Minuto_w)

;argumentos de entrada para

ldi xl,LOW(Minuto_w)
ldi yh,HIGH(Digito_m_w)
ldi yl,LOW(Digito_m_w)
call BIN_BCD

;digitos de los minutos

lds tempo,Digito_m_w+1
andi tempo,0b11110111
sts Digito_m_w+1,tempo
para Codificar

ldi xh,HIGH(Digito_m_w+1)
ldi xl,LOW(Digito_m_w+1)
call Codificar_I

;argumentos de entrada
;para preparar el dato a enviar

M_send
al integrado
D_D_1:
integrado

call Write_I2C

;subrutina de envio de informacion

jmp Salir_D

;decrementar el valor de los dias


;direccion de los dias en el

ldi tempo,0x04
sts A_reloj,tempo
lds tempo,Dia_r

;cargo el ultimo valor de los dias

que mando el Slave

Dia_1:
D_Ok:

BIN-BCD

cpi tempo,1
breq Dia_1
dec tempo
rjmp D_Ok

;dia a ser cargada


;para que cuando sea 1 regreso a 31

ldi tempo,31
sts Dia_w,tempo

;guardo el dia a ser escrito

ldi xh,HIGH(Dia_w)

;argumentos de entrada para

ldi xl,LOW(Dia_w)
ldi yh,HIGH(Digito_d_w)
ldi yl,LOW(Digito_d_w)

Jonathan Tirado

;digitos de los dias

Escuela Politcnica Nacional


call BIN_BCD
lds tempo,Digito_d_w+1
andi tempo,0b11110011
sts Digito_d_w+1,tempo

Codificar

ldi xh,HIGH(Digito_d_w+1)
ldi xl,LOW(Digito_d_w+1)
call Codificar_I

;argumentos de entrada para


;para preparar el dato a enviar

M_send
al integrado
D_Me_1:
integrado

call Write_I2C
jmp Salir_D
ldi tempo,0x05

;subrutina de envio de informacion


;decrementar el valor de los dias
;direccion de las meses en el

sts A_reloj,tempo
lds tempo,Mes_r

;cargo el ultimo valor de los dias

que mando el Slave

Mes_1:
Me_Ok:

BIN-BCD

cpi tempo,1
breq Mes_1
dec tempo
rjmp Me_Ok

;mes a ser cargada


;para que cuando sea 1 regreso a 12

ldi tempo,12
sts Mes_w,tempo

;guardo el mes a ser escrito

ldi xh,HIGH(Mes_w)

;argumentos de entrada para

ldi xl,LOW(Mes_w)
ldi yh,HIGH(Digito_me_w)
ldi yl,LOW(Digito_me_w)
call BIN_BCD

;digitos de los meses

lds tempo,Digito_me_w+1
andi tempo,0b11110001
sts Digito_me_w+1,tempo

para Codificar

ldi xh,HIGH(Digito_me_w+1)
ldi xl,LOW(Digito_me_w+1)
call Codificar_I

;argumentos de entrada
;para preparar el dato a enviar

M_send
al integrado

call Write_I2C

;subrutina de envio de informacion

jmp Salir_D
D_A_1:
integrado
que mando el Slave

Jonathan Tirado

ldi tempo,0x06
sts A_reloj,tempo
lds tempo,Ano_r

;decrementar el valor de los aos


;direccion de las aos en el
;cargo el ultimo valor de los aos

Escuela Politcnica Nacional


cpi tempo,0
breq A_1
dec tempo
rjmp A_Ok

A_1:

;ao a ser cargada


;para que cuando sea 0 regreso a 99

ldi tempo,99

A_Ok:

BIN-BCD

sts Ano_w,tempo

;guardo el ao a ser escrito

ldi xh,HIGH(Ano_w)

;argumentos de entrada para

ldi xl,LOW(Ano_w)
ldi yh,HIGH(Digito_a_w)
ldi yl,LOW(Digito_a_w)
call BIN_BCD
ldi xh,HIGH(Digito_a_w+1)

Codificar

ldi xl,LOW(Digito_a_w+1)
call Codificar_I

;digitos de los aos

;argumentos de entrada para


;para preparar el dato a enviar

M_send
call Write_I2C

al integrado
Salir_D:

;subrutina de envio de informacion

pop cont
pop aux
pop tempo
out SREG,tempo
pop tempo

reti
T_separa:
.db ":"

;cadena de 1 caracter

T_separa_1:
.db "/"
T_vacio:
.db "

"

Jonathan Tirado

Vous aimerez peut-être aussi