Está en la página 1de 3

''RELOJ CON AVR Y BASACOM ATMEGA 16

$regfile = "m16adef.dat" 'llama al


microcontrolador o la directiva del microcontrolador
$crystal = 8000000

Config Portd = Output


Ddrd.2 = 0 : Portd.2 = 1 ' EN LOS PUERTOS 16 Y
17 DEL PUERTO D
Config Porta = Output
Config Portc = Output
Config Portb = Input
Ddrc.4 = 1
Portb.0 = 1
Portb.1 = 1
Portb.3 = 1
Portb.4 = 1

'PUERTO B COMO SALIDA


Config Clock = Soft ' CONFIGURA EL RELOJ
INTERNO INTERRUPCION VIA SOFTWARE
Enable Int0
Config Int0 = Falling
On Int0 Incrementa_m 'SUBRRUTINA PARA
INCREMENTAR MIN
Enable Int2 'HABLITA LAINTERUPCION
MENCIONANDA
Config Int2 = Falling
On Int2 Incrementa_h 'SUBRRUTINA INCREMENTA
HRS
'Configuramos Las Salidas Del Reloj

Dis_dec_hrs Alias Porta.4 'MANEJO DE LOS DIGITOS


DEL DISPLAY
Dis_uni_hrs Alias Porta.5
Dis_dec_min Alias Porta.6
Dis_uni_min Alias Porta.7
'Am Alias Portb.4
'Pm Alias Portb.5
Puntos Alias Portd.7

Dim Hora As Byte


Dim Min_dec As Byte
Dim Min_uni As Byte
Dim Hrs_dec As Byte
Dim Hrs_uni As Byte
Dim Digito As Byte
Dim Bandera As Bit
Dim Ajuste As Bit
' INICIO DE LAS HORAS
Enable Interrupts 'HABILITA
INTERRUPCIONES
Time$ = "00:00:00"
Hora = _hour

Do
Min_dec = _min / 10 '
Min_uni = _min Mod 10
Hrs_dec = Hora / 10
Hrs_uni = Hora Mod 10
Bandera = 0

If Hora < 10 Then Bandera = 1


Dis_dec_hrs = 1
Dis_uni_hrs = 1
Dis_dec_min = 1
Digito = Lookup(min_uni , Patrones)
'MANEJO DE LOS BITS A,B,C,D,E,F,G 'DEJA HABILITADO
PARA CONECTAR EL OCISLADOR DE 32768KHZ
Portc = Digito And &B00111111 'MANEJO DE LOS BITS
A,B,C,D,E,F,G 'DEJA HABILITADO PARA CONECTAR EL OCISLADOR DE 32768KHZ
Portd = Digito And &B01000000

'MANEJO DE LOS BITS A,B,C,D,E,F,G 'DEJA HABILITADO


PARA CONECTAR EL OCISLADOR DE 32768KHZ
'HABILITA EL BIT 20
Puntos = 0
Dis_uni_min = 0 'LOS PUNTOS DE
SEPARACION
Waitus 400
Dis_uni_min = 1
Dis_dec_hrs = 1
Dis_uni_hrs = 1
Digito = Lookup(min_dec , Patrones)
Portc = Digito And &B00111111 'MANEJO DE LOS BITS
A,B,C,D,E,F,G 'DEJA HABILITADO PARA CONECTAR EL OCISLADOR DE 32768KHZ
Portd = Digito And &B01000000

Puntos = 0
Dis_dec_min = 0
Waitus 400
Dis_dec_min = 1
Dis_uni_min = 1
Dis_dec_hrs = 1
Digito = Lookup(hrs_uni , Patrones)
Portc = Digito And &B00111111 'MANEJO DE LOS BITS
A,B,C,D,E,F,G 'DEJA HABILITADO PARA CONECTAR EL OCISLADOR DE 32768KHZ
Portd = Digito And &B01000000
Puntos = 1
Dis_uni_hrs = 0
Waitus 400
Dis_uni_hrs = 1
Dis_dec_hrs = 1
Dis_uni_min = 1
Digito = Lookup(hrs_dec , Patrones)
Portc = Digito And &B00111111 'MANEJO DE LOS BITS
A,B,C,D,E,F,G 'DEJA HABILITADO PARA CONECTAR EL OCISLADOR DE 32768KHZ
Portd = Digito And &B01000000

Puntos = 0
Dis_dec_hrs = Bandera
Waitus 400
Dis_uni_hrs = 1
Dis_dec_hrs = 1
Dis_uni_min = 1
Digito = Lookup(hrs_dec , Patrones)
Portc = Digito And &B00111111 'MANEJO DE LOS BITS
A,B,C,D,E,F,G 'DEJA HABILITADO PARA CONECTAR EL OCISLADOR DE 32768KHZ
Portd = Digito And &B01000000

Puntos = 0
Dis_dec_hrs = Bandera
Waitus 400
Dis_dec_hrs = 1
Dis_uni_hrs = 1
Dis_dec_min = 1
Dis_uni_min = 1
If _hour = 23 And _sec = 30 And _min = 50 And Ajuste = 0 Then
_sec = _sec - 4
Ajuste = 1
End If
If _sec = 35 Then Ajuste = 0
'If _hour > 12 Then
'Hora = _hour - 12
'Pm = 1
'Am = 0
'Else
'Am = 1
'Pm = 0

If _hour = 0 Then
Hora = 0
Else
Hora = _hour
End If

Loop
End

Incrementa_m:
Incr _min
If _min > 59 Then _min = 0
Waitms 5
Return

Incrementa_h:
Incr _hour
If _hour > 23 Then _hour = 0
Waitms 5
Return
'TABLA PARA HEXADECIMALES
Patrones:
Data &H3F , &H06 , &H5B , &H4F , &H66 , &H6D , &H7D , &H07 , &H7F , &H67