|
Este
ejemplo es donado por Atilio, un usuario de Bascom-8051.
Este programa
lo estoy usando y anda muy bien si quieren mejorarlo no hay problemas.
Con respecto a la trampita el DS3102 es mañoso lo que pasa que
el shiftout no queda con el flanco negativo cuando termina, lo que hace
es que se va a positivo, entonces lo que ago chequeo cuando llega a ser
cero y realizo una rotación, y un left 1 y listo.
Autor:
flaviooscar@hotmail.com
Codigo:
'ESTA
PROBADO CON UN AT89C52
'LAS CONECCIONES AL DS1302 (IO=P2.0) (RST=P2.1) (SCLK=P2.2)
$large
$baud = 9600
$crystal = 11059200
Dim B3 As
Bit
Dim U1 As Byte , U2 As Byte , U3 As Byte , U4 As Byte , U5 As Byte , Gps(41)
As Byte
Dim D1 As String * 1 , D2 As String * 5
Io Alias
P2.0
Rst Alias P2.1
Sclk Alias P2.2
'segungos
' Const Rsec = &H81
' Const Wsec = &H80
'minutos
' Const Rmin = &H83
' Const Wmin = &H82
'horas
' Const Rhr = &H85
' Const Whr = &H84
'dia
' Const Rdate = &H87
' Const Wdate = &H86
'mes
' Const Rmonth = &H89
' Const Wmonth = &H88
'
Const Rday = &H8B
' Const Wday = &H8A
'año
' Const Ryear = &H8D
' Const Wyear = &H8C
'
Const Rcontrol = &H8F
' Const Wcontrol = &H8E
'
Const Rtc = &H91
' Const Wtc = &H90
'
Const Rcb = &HBF
' Const Wcb = &HBE
' Const Rram0 = &HC1
' Const Wram0 = &HC0
' Const Rramb = &HFF
' Const Wramb = &HFE
D2 = "" : U5 = 0
Largada:
Print "1=VER
RELOJ"
Print "2=GRABAR DATOS AL RELOJ"
Do
U2 = Inkey()
Select Case
U2
Case 49
:
Gosub Time
Goto Largada
Case 50
:
Gosub Seteo
Goto Largada
Return
End Select
Loop
End
'INGRESO
LOS DATOS PARA SETEAR EL DS1302
Seteo:
Print "hhmmssddmmaaaa"
U5 = 0
Do
U1 = Inkey()
If U1 >= 48 And U1 <= 57 Then Gosub Lola1
If U1 = 27 Then Goto Seteo1
Loop Until U1 = 13
If U5 < 14 Then Goto Salgo
Goto Save
Lola1:
INC u5
If U5 > 14 Then Goto Salgo
Gps(u5) = U1
Print Chr(u1);
Return
Save:
Print
Call Invierto
'
ESTO ES EL CONTROL DE ERRORES POR SI PONES LETRAS EN LUGAR DE NUMEROS
For U1 = 1 To 14 Step 2
U5 = U1 + 1
D2 = Chr(gps(u1)) + Chr(gps(u5))
U2 = Val(d2)
Select Case U1
'ss
Case
1:
If
U2 > 59 Then Goto Salgo
'mm
Case
3:
If
U2 > 59 Then Goto Salgo
'hh
Case
5:
If
U2 > 23 Then Goto Salgo
'dd
Case
7:
If
U2 > 31 Or U2 = 0 Then Goto Salgo
'mm
Case
9:
If
U2 > 12 Or U2 = 0 Then Goto Salgo
'año
20
Case
11:
If
U2 <> 20 Then Goto Salgo
'año
02
Case
13:
If
U2 > 99 Or U2 < 0 Then Goto Salgo
End Select
Next U1
Goto Hj
Salgo:
Print : Print "ERROR INTENTE NUEVAMENTE"
Goto Largada
'NO
OLVIDAR QUE EL DS1302 LOS DATOS SE SETEAN CON BCD COMPACTADO
'CONVIERTO A BCD COMPACTADO
Hj:
For U5 =
1 To 13 Step 2
U1 = Gps(u5) - 48
Rotate U1 , Left , 4
U3 = U5 + 1
U2 = Gps(u3) - 48
Gps(u5) = U1 Or U2
Next U5
'PROGRAMAR AL DS1302
'SETEO SS MM HH DD MM
U1 = 1
Restore Dta1
For U5 = 1 To 6
Read U2
Sclk = 0 : Rst = 0 : Rst = 1
Shiftout Io , Sclk , U2 , 3
Shiftout Io , Sclk , Gps(u1) , 3
Rst = 0 : Sclk = 0
U1 = U1 + 2
If U5 = 5 Then U1 = U1 + 2
Next U5
'GPS(1)=HH
'GPS(3)=MM
'GPS(5)=SS
'GPS(7)=DD
'GPS(9)=MM
'GPS(11)=AA
'GPS(13)=AA
'leer
a ds1302
Print "OK"
'LEO
SEGUNDO MINUTO HORA DIA MES AÑO
'NO OLVIDAR QUE EL DS1302 ENTREGA BCD COMPACTADO
Time:
U4 = 1
Restore Dta2
For U5 = 1 To 6
Read U2
Sclk = 0 : Rst = 0 : Rst = 1
Shiftout Io , Sclk , U2 , 3
B3 = Io
Shiftin Io , Sclk , U1 , 2
Rst = 0 : Sclk = 0
Rotate U1 , Left , 1
If B3 = 1 Then
U1 = U1 Or 1
Else
U1 = U1 And &HFE
End If
'CONVIERTO
EL BCD COMPACTADO PARA PODER PASARLO A LOS DATOS ORIGINALES
U3 = U1 And &H0F
U3 = U3 + 48
Rotate U1 , Right , 4
U2 = U1 And &H0F
U2 = U2 + 48
Gps(u4) = U2
U4 = U4 + 1
Gps(u4) = U3
inc u4
Next U5
Call Invierto
'COLOCO EN PANTALLA LOS DATOS CARGADOR
For U1 = 1 To 12 Step 2
U3 = U1 + 1
D2 = Chr(gps(u1)) + Chr(gps(u3))
If U1 = 11 Then D2 = "20" + Chr(gps(u1)) +
Chr(gps(u3))
Print D2 ;
If U1 = 1 Or U1 = 3 Then Print ":";
If U1 = 5 Then Print " ";
If U1 = 7 Or U1 = 9 Then Print "/";
Next U1
Seteo1:
Print
Print "FIN"
Return
'INVERTIR
hhmmssddmmaaaa A ssmmhhddmmaaaa
Sub Invierto
D2
= Chr(gps(1)) + Chr(gps(2)) + Chr(gps(5)) + Chr(gps(6))
D1 = Mid(d2 , 1 , 1)
Gps(5) = Asc(d1)
D1 = Mid(d2 , 2 , 1)
Gps(6) = Asc(d1)
D1 = Mid(d2 , 3 , 1)
Gps(1) = Asc(d1)
D1 = Mid(d2 , 4 , 1)
Gps(2) = Asc(d1)
End Sub
'DIRECCIONES PARA LA GRABACION DEL DATO
Dta1:
Data &H80 , &H82 , &H84 , &H86 , &H88 , &H8C
'DIRECCIONES
PARA LA LECTURA DEL DATO
Dta2:
Data &H81 , &H83 , &H85 , &H87 , &H89 , &H8D
Bajar
Archivo DS1302.ZIP
Consultas
al autor: flaviooscar@hotmail.com
|