1 | 'Controllerkonfiguration für E/A
|
2 | ADCON1 = 14 'PortA.1 bis PortA.3 digitale Ein- und Ausgänge
|
3 | TrisB = %11111100 'B.0 Ausgang für serielle Anzeige
|
4 | 'B.1 Taktausgang
|
5 | 'B.2 Ein- oder Ausgang durch I2CREAD/I2CWRITE festgelegt
|
6 |
|
7 | 'Definitionen
|
8 | include "modedefs.bas"
|
9 |
|
10 | 'Variablendeklarationen
|
11 | 'Pindeklarationen
|
12 | SCL VAR PortB.1 'PortB.1 Taktausgang I2C
|
13 | SDA VAR PortB.2 'PortB.2 Datenausgang I2C
|
14 | 'Registeradressen für Uhr
|
15 | reg_kontroll_status_1 con $00
|
16 | reg_kontroll_status_2 con $01
|
17 | reg_sekunde CON $02
|
18 | reg_minute CON $03
|
19 | reg_stunde CON $04
|
20 | reg_tag CON $05
|
21 | reg_wochentag con $06
|
22 | reg_monat CON $07
|
23 | reg_jahr con $08
|
24 | reg_minuten_alarm con $09
|
25 | reg_stunden_alarm con $0A
|
26 | reg_tag_alarm con $0B
|
27 | reg_wochentag_alarm con $0C
|
28 | reg_takt con $0d
|
29 | 'Slaveadressen
|
30 | rtc_schreiben CON $a2
|
31 | rtc_lesen CON $a2
|
32 | 'Zeitvariablen
|
33 | sekunde_bcd var byte
|
34 | minute_bcd var byte
|
35 | stunde_bcd var byte
|
36 | tag_bcd var byte
|
37 | wochentag_bcd var byte
|
38 | monat_bcd var byte
|
39 | jahr_bcd var byte
|
40 | sekunde var byte
|
41 | minute var byte
|
42 | stunde var byte
|
43 | tag var byte
|
44 | wochentag var byte
|
45 | monat var byte
|
46 | jahr var byte
|
47 | 'Steuervariablen
|
48 | kontroll_status_1 var byte
|
49 |
|
50 | 'Initialisierungen
|
51 | 'Uhrzeitinitialisierung
|
52 | 'stunde_bcd = %00001001
|
53 | 'minute_bcd = %00011000
|
54 | 'sekunde_bcd = %00000000
|
55 | 'tag_bcd = %00011001
|
56 | 'monat_bcd = %00000101
|
57 | 'jahr_bcd = %00001010
|
58 | 'kontroll_status_1 = %00000000
|
59 |
|
60 | stunde = 9
|
61 | minute = 26
|
62 | sekunde = 0
|
63 | tag = 19
|
64 | monat = 5
|
65 | jahr = 10
|
66 | kontroll_status_1 = %00000000
|
67 |
|
68 | 'Hauptprogramm
|
69 | Haupt:
|
70 | gosub Dezimal_zu_BCD
|
71 | 'i2cwrite SDA, SCL, rtc_schreiben, reg_takt, %10000000
|
72 | 'pause 10
|
73 | 'Schreiben des Datums und der Uhrzeit sowie Starten der Uhr über I2C
|
74 | gosub Schreibe_Datum
|
75 | 'Zyklisches Lesen des Datums und der Uhrzeit über I2C
|
76 | marke:
|
77 | gosub Lese_Datum
|
78 | gosub BCD_zu_Dezimal
|
79 |
|
80 | include "LCD\lcd.bas"
|
81 | pause 10
|
82 | goto marke
|
83 | GOTO Haupt
|
84 |
|
85 | '----Unterprogramme-------------------------------------------------------------
|
86 | '----Schreiben des Datums und der Uhrzeit über I2C------------------------------
|
87 | Schreibe_Datum:
|
88 | 'Einstellung Stunden
|
89 | i2cwrite SDA, SCL, rtc_schreiben, reg_stunde, [stunde_bcd]
|
90 | pause 10
|
91 | 'Einstellung Minuten
|
92 | i2cwrite SDA, SCL, rtc_schreiben, reg_minute, [minute_bcd]
|
93 | pause 10
|
94 | 'Einstellung Sekunden
|
95 | i2cwrite SDA, SCL, rtc_schreiben, reg_sekunde, [sekunde_bcd]
|
96 | pause 10
|
97 | 'Einstellung Tag
|
98 | i2cwrite SDA, SCL, rtc_schreiben, reg_tag, [tag_bcd]
|
99 | pause 10
|
100 | 'Einstellung Monat
|
101 | i2cwrite SDA, SCL, rtc_schreiben, reg_monat, [monat_bcd]
|
102 | pause 10
|
103 | 'Einstellung Jahr
|
104 | i2cwrite SDA, SCL, rtc_schreiben, reg_jahr, [jahr_bcd]
|
105 | pause 10
|
106 | 'Uhr starten
|
107 | i2cwrite SDA, SCL, rtc_schreiben, reg_kontroll_status_1, [kontroll_status_1]
|
108 | pause 10
|
109 | return
|
110 |
|
111 | '----Lesen des Datums und der Uhrzeit über I2C----------------------------------
|
112 | Lese_Datum:
|
113 | 'Stunden lesen
|
114 | i2cread SDA, SCL, rtc_lesen, reg_stunde, [stunde_bcd]
|
115 | pause 10
|
116 | 'Minuten lesen
|
117 | i2cread SDA, SCL, rtc_lesen, reg_minute, [minute_bcd]
|
118 | pause 10
|
119 | 'Sekunden lesen
|
120 | i2cread SDA, SCL, rtc_lesen, reg_sekunde, [sekunde_bcd]
|
121 | pause 10
|
122 | 'Tag lesen
|
123 | i2cread SDA, SCL, rtc_lesen, reg_tag, [tag_bcd]
|
124 | pause 10
|
125 | 'Monat lesen
|
126 | i2cread SDA, SCL, rtc_lesen, reg_monat, [monat_bcd]
|
127 | pause 10
|
128 | 'Jahr lesen
|
129 | i2cread SDA, SCL, rtc_lesen, reg_jahr, [jahr_bcd]
|
130 | pause 10
|
131 | return
|
132 |
|
133 | '----Umwandlung von Dezimal zu BCD----------------------------------------------
|
134 | Dezimal_zu_BCD:
|
135 | stunde_bcd = (stunde Dig 1) * $10 + (stunde dig 0)
|
136 | minute_bcd = (minute Dig 1) * $10 + (minute dig 0)
|
137 | sekunde_bcd = (sekunde Dig 1) * $10 + (sekunde dig 0)
|
138 | tag_bcd = (tag Dig 1) * $10 + (tag dig 0)
|
139 | monat_bcd = (monat Dig 1) * $10 + (monat dig 0)
|
140 | jahr_bcd = (jahr Dig 1) * $10 + (jahr dig 0)
|
141 | return
|
142 |
|
143 | '----Umwandlung von BCD zu Dezimal----------------------------------------------
|
144 | BCD_zu_Dezimal:
|
145 | stunde = ((stunde_bcd >> 4) * 10) + (stunde_bcd & $f)
|
146 | minute = ((minute_bcd >> 4) * 10) + (minute_bcd & $f)
|
147 | sekunde = ((sekunde_bcd >> 4) * 10) + (sekunde_bcd & $f)
|
148 | tag = ((tag_bcd >> 4) * 10) + (tag_bcd & $f)
|
149 | monat = ((monat_bcd >> 4) * 10) + (monat_bcd & $f)
|
150 | jahr = ((jahr_bcd >> 4) * 10) + (jahr_bcd & $f)
|
151 | return
|