Hallo zusammen ich muss für meine abschlussarbeit mit assambler eine digitaluhr mir wecker programmieren leider hab ich ein paar probleme mit dieser aufgabe 1. mit dem 24 stunden zeitformat ich hab statt 24 stunden 29 stunden 2. ich weiß leider nicht wie ich den wecker in mein programm einbinde bzw. in zu programmieren zur programmierung nehm ich keil u vision 2 der verwende microcontroller ist ein dalles ds87c520 der 8051 familie http://sund.de/miles dieses teil muss ich zur programmierung nehmen
Ich kenne den µC nicht, hier aber ein paar Grundlagen: http://www.mikrocontroller.net/articles/AVR-Tutorial:_Uhr Volker
David Ebert schrieb: > http://sund.de/miles dieses teil muss ich zur programmierung nehmen Aus welchem Museum wurde das wohl nur entwendet? Ein moderner µC, wie ein AVR, MSP430 oder was auch immer beinhaltet alles von diesem Kuchenblech.
erstma danke für die schnellen antworten ich geb euch mal meinen quellcode vielleicht seht ihr da ja meine fehler der wecker ist noch nich dabei:
1 | |
2 | org 0000h |
3 | |
4 | cts equ P3.5 |
5 | setb cts |
6 | |
7 | ; Initialisierung serielle Schnittstelle----------------------------------------------------------------- |
8 | mov scon, #40h |
9 | mov pcon, #80h ;Doppelte Geschwindigkeit |
10 | mov th1, #0f4h ;Nachladewert Timer1 |
11 | mov tmod, #20h ;Timer Modus 2 (Reload) |
12 | setb tr1 ;Timer Run |
13 | clr ti |
14 | setb ren ;Reception enable |
15 | clr ri ;Receive Interrupt |
16 | |
17 | ; Initialisierung Register-------------------------------------------------------------------------------- |
18 | mov r0, #'0' ; Stunde |
19 | mov r1, #'0' ; |
20 | mov r2, #'0' ; Minuten |
21 | mov r3, #'0' ; |
22 | mov r4, #'0' ; Sekunde |
23 | mov r5, #'0' ; |
24 | mov r6, #'0' |
25 | mov r7, #'0' |
26 | mov 11, #'0' |
27 | |
28 | ; Hauptprogramm------------------------------------------------------------------------------------------ |
29 | start: |
30 | mov dptr, #inver |
31 | call sout |
32 | mov dptr, #delete |
33 | call sout |
34 | |
35 | mov dptr, #starttaste |
36 | call sout |
37 | mov dptr, #weckertaste |
38 | call sout |
39 | mov dptr, #plustaste |
40 | call sout |
41 | mov dptr, #plustaste1 |
42 | call sout |
43 | mov dptr, #plustaste2 |
44 | call sout |
45 | mov dptr, #plustaste3 |
46 | call sout |
47 | mov dptr, #plustaste4 |
48 | call sout |
49 | mov dptr, #plustaste5 |
50 | call sout |
51 | mov dptr, #minustaste |
52 | call sout |
53 | mov dptr, #minustaste1 |
54 | call sout |
55 | mov dptr, #minustaste2 |
56 | call sout |
57 | mov dptr, #minustaste3 |
58 | call sout |
59 | mov dptr, #minustaste4 |
60 | call sout |
61 | mov dptr, #minustaste5 |
62 | call sout |
63 | call uhranz |
64 | startloob: |
65 | |
66 | jnb ri, startloob |
67 | clr ri |
68 | mov a, sbuf |
69 | |
70 | |
71 | cjne a, #13, startloob |
72 | ;----------------------------------------------------------------------------------------------------------------------- |
73 | ausgabe: |
74 | call uhranz |
75 | jnb ri, xyz ; wenn kein interrpt kriegt -> ausgabe INTERUPT |
76 | clr ri |
77 | mov a, SBUF |
78 | cjne a, #2, schleife1 |
79 | return1: |
80 | cjne a, #3, schleife2 |
81 | return2: |
82 | cjne a, #4, schleife3 |
83 | return3: |
84 | cjne a, #5, schleife4 |
85 | return4: |
86 | cjne a, #6, schleife5 |
87 | return5: |
88 | cjne a, #7, schleife6 |
89 | return6: |
90 | cjne a, #8, schleife7 |
91 | return7: |
92 | cjne a, #9, abf |
93 | return8: |
94 | cjne a, #10, abc |
95 | return9: |
96 | cjne a, #11, abd |
97 | return10: |
98 | cjne a, #12, abe |
99 | return11: |
100 | cjne a, #13, aa |
101 | return12: |
102 | jmp neueuhrzeit |
103 | ;-------------------------------------------------------------------------------------------- |
104 | schleife1: |
105 | jc plus |
106 | jmp return1 |
107 | plus: inc r0 |
108 | CJNE r0, #33h , ausgabe |
109 | mov r0, #'0' |
110 | mov r1, #'0' |
111 | mov r2, #'0' |
112 | mov r3, #'0' |
113 | mov r4, #'0' |
114 | mov r5, #'0' |
115 | jmp ausgabe |
116 | ;-------------------------------------------------------------------------------------------- |
117 | schleife2: |
118 | jc plus1 |
119 | jmp return2 |
120 | plus1: inc r1 |
121 | inc 11 |
122 | CJNE r1, #34h , ausgabe |
123 | |
124 | mov r1, #'0' |
125 | jmp ausgabe |
126 | ;--------------------------------------------------------------------------------------------- |
127 | schleife3: |
128 | jc plus2 |
129 | jmp return3 |
130 | plus2: inc r2 |
131 | CJNE r2, #36h , ausgabe |
132 | mov r2, #'0' |
133 | jmp ausgabe |
134 | ;-------------------------------------------------------------------------------------------- |
135 | schleife4: |
136 | jc plus3 |
137 | jmp return4 |
138 | plus3: inc r3 |
139 | CJNE r3, #3Ah , ausgabe |
140 | mov r3, #'0' |
141 | jmp ausgabe |
142 | |
143 | xyz: jmp neueuhrzeit |
144 | abf: jmp schleife8 |
145 | ;--------------------------------------------------------------------------------------------- |
146 | schleife5: |
147 | jc plus4 |
148 | jmp return5 |
149 | plus4: inc r4 |
150 | CJNE r4, #36h , ausgabe |
151 | mov r4, #'0' |
152 | jmp ausgabe |
153 | abc: jmp schleife9 |
154 | abd: jmp schleife10 |
155 | abe: jmp schleife11 |
156 | ;----------------------------------------------------------------------------------------------- |
157 | schleife6: |
158 | jc plus5 |
159 | jmp return6 |
160 | plus5: inc r5 |
161 | CJNE r5, #3Ah , aaa |
162 | mov r5, #'0' |
163 | jmp ausgabe |
164 | ;----------------------------------------------------------------------------------------------- |
165 | schleife7: |
166 | jc minus |
167 | jmp return7 |
168 | minus: dec r0 |
169 | CJNE r0, #30h , aaa |
170 | mov r0, #'0' |
171 | mov r1, #'0' |
172 | mov r2, #'0' |
173 | mov r3, #'0' |
174 | mov r4, #'0' |
175 | mov r5, #'0' |
176 | jmp ausgabe |
177 | aa: jmp schleife12 |
178 | ;--------------------------------------------------------------------------------------------- |
179 | schleife8: |
180 | jc minus1 |
181 | jmp return8 |
182 | minus1: dec r1 |
183 | |
184 | CJNE r1, #30h , aaa |
185 | mov r1, #'0' |
186 | jmp ausgabe |
187 | |
188 | |
189 | ;---------------------------------------------------------------------------------------------- |
190 | schleife9: |
191 | jc minus2 |
192 | jmp return9 |
193 | minus2: dec r2 |
194 | CJNE r2, #30h , aaa |
195 | mov r2, #'0' |
196 | jmp ausgabe |
197 | |
198 | schleife10: |
199 | jc minus3 |
200 | jmp return10 |
201 | minus3: dec r3 |
202 | CJNE r3, #30h , aaa |
203 | mov r3, #'0' |
204 | jmp ausgabe |
205 | schleife11: |
206 | jc minus4 |
207 | jmp return11 |
208 | minus4: dec r4 |
209 | CJNE r4, #30h , aaa |
210 | mov r4, #'0' |
211 | jmp ausgabe |
212 | schleife12: |
213 | jc minus5 |
214 | jmp return12 |
215 | minus5: dec r5 |
216 | CJNE r5, #30h , aaa |
217 | mov r5, #'0' |
218 | jmp ausgabe |
219 | |
220 | ;--------------------------------------------------------------------------------------------- |
221 | aaa: jmp ausgabe |
222 | neueuhrzeit: call delay |
223 | |
224 | |
225 | inc r5 |
226 | CJNE r5, #3Ah , zurueck |
227 | mov r5, #'0' |
228 | |
229 | inc r4 |
230 | CJNE r4, #36h , zurueck |
231 | mov r4, #'0' |
232 | |
233 | inc r3 |
234 | CJNE r3, #3Ah , zurueck |
235 | mov r3, #'0' |
236 | |
237 | inc r2 |
238 | CJNE r2, #36h , zurueck |
239 | mov r2, #'0' |
240 | |
241 | inc r1 |
242 | CJNE r1, #3h , zurueck |
243 | mov r1, #'0' |
244 | |
245 | |
246 | inc r0 |
247 | CJNE r0, #33h , zurueck |
248 | mov r0, #'0' |
249 | mov r1, #'0' |
250 | mov r2, #'0' |
251 | mov r3, #'0' |
252 | mov r4, #'0' |
253 | mov r5, #'0' |
254 | jmp ausgabe |
255 | |
256 | |
257 | ;----------------------------------------------------------------------------------------------------------- |
258 | zurueck: jmp ausgabe |
259 | |
260 | sout: mov a, #0 |
261 | MOVC A, @A+DPTR ; 1 Byte aus Datenspeicher |
262 | ; laden |
263 | cjne a, #0ffh, weiter ; Vergleich Endezeichen (FF) |
264 | ret ; Ende gefunden |
265 | weiter: jb cts, weiter ; auf Display warten |
266 | mov SBUF, a ; Zeichen senden |
267 | waits: jnb ti, waits ; Warten, bis gesendet |
268 | clr ti |
269 | inc dptr ; Nächstes Zeichen |
270 | jmp sout |
271 | warten: jnb ti, warten ; Warten, bis gesendet |
272 | clr ti |
273 | inc dptr ; Nächstes Zeichen |
274 | ret |
275 | |
276 | |
277 | |
278 | ; Anzeige---------------------------------------------------------------- |
279 | uhranz: |
280 | mov dptr, #cursor |
281 | call sout |
282 | mov dptr, #aus |
283 | call sout |
284 | mov SBUF, r0 ; Stunden |
285 | call warten |
286 | mov SBUF, r1 |
287 | call warten |
288 | mov dptr, #punkt |
289 | call sout |
290 | mov SBUF, r2 ; Minuten |
291 | call warten |
292 | mov SBUF, r3 |
293 | call warten |
294 | mov dptr, #punkt |
295 | call sout |
296 | mov SBUF, r4 ; Sekunde |
297 | call warten |
298 | mov SBUF, r5 |
299 | call warten |
300 | ret |
301 | ;----------------------------------------------------------------------- |
302 | delete: db 12, 0ffh |
303 | db 27, "TR", 0ffh ; Touch- Ton |
304 | |
305 | inver: db 27, "TI", 0ffh ;Invertieren |
306 | |
307 | cursor: db 27, "O", 10, 5, 0ffh |
308 | aus: db 27, "QC",0,0ffh |
309 | punkt: db ":", 0ffh |
310 | |
311 | plustaste: |
312 | db 27, "TH",1 ,1 ,1,2, "+",0, 0ffh |
313 | plustaste1: |
314 | db 27, "TH",3 ,3 ,2,2, "+",0, 0ffh |
315 | plustaste2: |
316 | db 27, "TH",4 ,4 ,3,2, "+",0, 0ffh |
317 | plustaste3: |
318 | db 27, "TH",5 ,5 ,4,2, "+",0, 0ffh |
319 | plustaste4: |
320 | db 27, "TH",6 ,6 ,5,2, "+",0, 0ffh |
321 | plustaste5: |
322 | db 27, "TH",8 ,8 ,6,2, "+",0, 0ffh |
323 | |
324 | minustaste: |
325 | db 27, "TH",25,25,7,2, "-",0, 0ffh |
326 | minustaste1: |
327 | db 27, "TH",27,27,8,2, "-",0, 0ffh |
328 | minustaste2: |
329 | db 27, "TH",28,28,9,2, "-",0, 0ffh |
330 | minustaste3: |
331 | db 27, "TH",29,29,10,2, "-",0, 0ffh |
332 | minustaste4: |
333 | db 27, "TH",30,30,11,2, "-",0, 0ffh |
334 | minustaste5: |
335 | db 27, "TH",32,32,12,2, "-",0, 0ffh |
336 | |
337 | |
338 | starttaste: |
339 | db 27, "TH",9,18,13,2, "Start",0, 0ffh |
340 | weckertaste: |
341 | db 27, "TH",15,24,14,2, "Wecker",0,0ffh |
342 | |
343 | |
344 | ;----------------------------------------------------------------------- |
345 | delay: mov r6, #255 |
346 | x00: mov r7, #255 |
347 | x01: mov 10, #19 |
348 | x02: djnz 10, x02 |
349 | djnz r7, x01 |
350 | djnz r6, x00 |
351 | ret |
352 | ;---------------------------------------------------------------------- |
353 | Ende: jmp Ende |
354 | end. |
> Aus welchem Museum wurde das wohl nur entwendet? Was bitteschön ist gegen einem DS87C520 einzuwenden ? Bloss weil du dir den nicht leisten kannst ? Das Board ist solide, der Prozessor Industriestandard und schnell (entspricht einem 100MHz 8052) und flashbar, und es gibt weit mehr RAM als bei deinen Billig-CPUs. Allerdings haben sicher schon Generationen vor David genau dieselbe Aufgabe mit schlechteren Arbeitsmittels problemlos umsetzen können, also wird der David mal selber lernen müssen wie das geht, dazu ist die Ausbildung da, da macht nicht mehr immer Mami das Essen und die Wäsche.
MaWin schrieb: > Was bitteschön ist gegen einem DS87C520 einzuwenden ? Man braucht nen haufen Peripherie (Kuchenblech!) um das zu erreichen, was nen MSP430/xmega/kleiner ARM auf ~2cm² kann. > Bloss weil du dir den nicht leisten kannst ? Wenn man denn wüsste, was er kostet? Bei Digikey heißt's anrufen. > Das Board ist solide, der Prozessor Industriestandard > und schnell (entspricht einem 100MHz 8052) =33MIPS >und flashbar, was daran so besonders? Dass man keine EPROMS mehr löschen und brennen zu braucht? > und es gibt weit mehr RAM als bei deinen Billig-CPUs. XMEGA kann bis zu 16MB an externem RAM, wenn man denn soviel braucht.
Ey versteht ihr das nicht ich muss dieses teil verwenden. Ich hab keine ander möglichkeit entweder mit dem teil oder durchgefallen
David E. schrieb: > Ey versteht ihr das nicht ich muss dieses teil verwenden. > Ich hab keine ander möglichkeit entweder mit dem teil oder durchgefallen Von >vielleicht seht ihr da ja meine fehler der wecker ist noch nich dabei: und Quellcode hinklatschen kommt nichts. S. Netiquette
> Man braucht nen haufen Peripherie (Kuchenblech!) um das zu erreichen, > was nen MSP430/xmega/kleiner ARM auf ~2cm² kann. Humbug. Der 87C520 ist genau so ein Microcontroller wie ein AVR oder XMega, er hat ein kleines Gehäuse, Pins die nur 5V vertragen. Wenn man den berufsschulenrobust bekommen will mit 4mm Bananensteckern, baut man genau so ein Board wie es der David vor sich liegen hat, da ist kein Unterschied. > Wenn man denn wüsste, was er kostet? Bei Digikey heißt's anrufen. Du wirst aufjaulen weil du nur Kinderspielzeug kennst: http://at.rs-online.com/web/p/products/0138089/ > > und flashbar, > was daran so besonders? Dass man keine EPROMS mehr > löschen und brennen zu braucht? Nichts, aber er ist damit genau so aktuell wie AVRs oder sonstige uC, keinen Deut schlechter. > und es gibt weit mehr RAM als bei deinen Billig-CPUs. > XMEGA kann bis zu 16MB an externem RAM, wenn man denn soviel braucht. EXTERN, klar, aber dein obiger grosskotziger Beitrag behauptete, das alles beinhaltete ein billiger AVR. Nein, eben nicht, der braucht dafür auch ein Board. Du hast einfach keine Ahnung aber ein grosses Maul gehabt, unangebracht, da musst du dich nicht wundern, wenn du mit mir kollidierst. Und wie man 2 Digits auf 2 4 und nicht auf 2 9 vergleicht, wird David auch noch rausfinden, das geht beim 8052 nicht anderes als beim AVR.
David Ebert schrieb: > Hallo zusammen ich muss für meine abschlussarbeit mit assambler eine > digitaluhr mir wecker programmieren leider hab ich ein paar probleme mit > dieser aufgabe 1. mit dem 24 stunden zeitformat ich hab statt 24 stunden > 29 stunden Tja. Dann wirst du dir wohl hiefür
1 | inc r1 |
2 | CJNE r1, #3h , zurueck |
3 | mov r1, #'0' |
4 | |
5 | |
6 | inc r0 |
7 | CJNE r0, #33h , zurueck |
was anderes einfallen lassen müssen. Bei Sekunden und Minuten ist die Sache leicht. Die Einerstelle zählt jeweils von 0 bis 9. Und wenn es über 9 drüber geht wird die zehnerstelle um 1 erhöht. Bei den Stunden ist das aber anders. In der Einerstelle bis 9 zählen geht nur, wenn die Zehner 0 oder 1 sind. Ist die Zehnerstelle bereits auf 2, dann ist bereits beim Übergang von 4 auf 5 Schluss. Und diese Logik musst du programmieren. > 2. ich weiß leider nicht wie ich den wecker in mein programm > einbinde So schwer ist das auch wieder nicht. Wenn nach dem Erhöhen der Zeit die Stunden und Minuten identisch sind zur Weckzeit schaltest du eine Tröte ein.
es tut mir leid wenn mein obriger beitrag großkotzig klingt (so ist er echt nich gemeint) Ich jaule auch nich für irgend einen microkontroller auf. Lass ihn besser sein ABER ich darf ihn nich verwenden ich möchte nur die uhr endlich fertig bekommen.
David E. schrieb: > es tut mir leid wenn mein obriger beitrag großkotzig klingt (so ist er > echt nich gemeint) > Ich jaule auch nich für irgend einen microkontroller auf. Lass ihn > besser sein ABER ich darf ihn nich verwenden ich möchte nur die uhr > endlich fertig bekommen. Das bezog sich wohl auf mich. Es hat sich aber jemand deines Problems angenommen: Beitrag "Re: Digitaluhr mit wecker"
> es tut mir leid wenn mein obriger beitrag großkotzig
Du bist die ganze Zeit nicht gemeint, es geht um Lukas
"Aus welchem Museum wurde das wohl nur entwendet?"
MaWin schrieb: >> es tut mir leid wenn mein obriger beitrag großkotzig > > Du bist die ganze Zeit nicht gemeint, es geht um Lukas > "Aus welchem Museum wurde das wohl nur entwendet?" Was ich persönlich witzig fand: Denn als der Typ hier ankam, der sich seine CPU aus Transistoren aufbaut, haben sich alle überschlagen wie toll das nicht wäre.
Ah cool. könntet ihr mir wenigstens ne liste mit allen befehlen für meinen microkontroller geben oder'n lösungsansatz denn ich bin mit meinen latein am ende. mehr als das was in dem link steht hab ich net
Man findet auf den Webseiten des Herstellers alle Informationen über den Microcontroller, auch sämtliche Befehle des Prozessors. Wenn Du nicht in der Lage bist, all diese Informationen selbst zu recherchieren UND zu verstehen, hast Du es ganz klar auch nicht verdient, die Prüfung zu bestehen. Chancengleichheit in der Ausbildung ist nicht gleichbedeutend damit, dass jeder Depp durchgeschleust werden soll.
David E. schrieb: > Ah cool. > könntet ihr mir wenigstens ne liste mit allen befehlen für meinen > microkontroller geben oder'n lösungsansatz denn ich bin mit meinen > latein am ende. mehr als das was in dem link steht hab ich net Mit den Befehlen, die du bereits verwendet hast, ist zumindest das 24 Stunden Problem zu lösen. Du musst nur der Versuchung widerstehen, gleich alles in deinen Editor reinzuhacken, sondern dir die Zeit nehmen, das durchzudenken. Was ist wenn? Das kannst du dir dann aufmalen, zb in Form eines Flussdiagramms (aber verbrate nicht deine Zeit mit Lineal und Farben und das es schön aussieht. Das soll nur eine Skizze sein, mit der du dein 'Verfahren' in schriftlicher Form niederschreibst)
1 | | |
2 | v |
3 | Stunden Einer um 1 erhöhen |
4 | | |
5 | | |
6 | v Ja |
7 | Stunden Zehner gleich '2' ? ---------+ |
8 | | Nein | |
9 | | | |
10 | v Nein v Nein |
11 | Einer gleich '9'+1 ? --> zurueck Einer gleich '4' ? ---> zurueck |
12 | | Ja | Ja |
13 | | | |
14 | |<------------------------------+ |
15 | | |
16 | v |
17 | Stunden Einer auf '0' setzen |
18 | Stunden Zehner um 1 erhöhen |
19 | | |
20 | v Nein |
21 | Stunden Zehner gleich '3' ? -----> zurueck |
22 | | |
23 | v |
24 | Stunden Zehner auf '0' setzen |
25 | | |
26 | v |
27 | zurueck: ->ausgabe |
wenn du dir jetzt ein paar Uhrzeiten ausdenkst und annimmst dass soeben die Minuten von 59 auf 00 umgeschlagen haben und daher die Stunden um 1 hochgezählt werden müssen und du fährst mit deinem Finger dieses Diagramm ab und machst genau das was dort steht, dann muss in allen Fällen die Erhöhung der Stunden richtig ablaufen. Wenn nicht: dann korrigier das im Diagramm und probiers wieder durch. (Daher ist es eine ziemlich gute Idee, wenn man solche Diagramme mit Bleistift zeichnet). Ist bei deinen 'Finger-Langfahrtests' alles in Ordnung und du denkst, dass das Verfahren jetzt stimmt, dann setzt du es in Code um. Alle Befehle die du dazu brauchst, hast du im restlichen Code schon verwendet, daher geh ich davon aus, dass du sie kennst. Und mehr Hilfe geb ich jetzt nicht mehr. Denn das Behandeln der Überträge bei getrennten Einer und Zehnerstellen um von 0 bis n (egal welches n) ist selbst für eine normale Hausaufgabe eine lächerlich simple Übung. Bei einer Abschlussarbeit, mit der man gelerntes dokumentieren soll gilt das dann noch viel mehr.
Es ist einfacher, wenn Du nicht Zehner und Einer getrennt hältst, sondern in einem Byte. Dann kann man bequem auf 60 oder 24 vergleichen. Und erst zur Ausgabe berechnet man die beiden Stellen ("DIV AB"-Befehl). Die Befehlsreferenz des 8051 mußt Du schon selber googlen. Da der 8051 sehr populär ist, gibts die oft sogar auf deutsch. Für die Meckerer: Es ist doch egal, wie das Entwicklungsboard aufgebaut ist, Hauptsache der CPU-Kern ist der gewünschte. Für die Produktion nimmt man dann natürlich einen Flash-Typ, z.B. DS89C450 Dann braucht man nichtmal mehr ein Programmiergerät (eingebauter Bootloader über UART). Peter
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.