Hallo liebe Com,
bin seit einigen Wochen daran einen Rückwärszähler zu programmieren,
doch leider bleibt er nicht bei 0 stehen wie er dies soll. Hier vorab
mal die gestellte Aufgabe.
,,Nach Programmstart: Anzeige von S (Start) in der 7-Segmentanzeige
Nach Tastendruck wird im Sekundentakt von 10 (Anzeige Start) bis 0
gezählt,
dann bleibt die Anzeige bei 0 stehen.
Erneuter Start bei 10 nach Tastendruck.,,
Und nun wie weit ich gekommen bin ich finde leider meinen Fehler nicht.
Auch der Debugger verrät mich nicht wo ich falsch liege.
1 |
|
2 | code at 0 ; Programm beginnt bei Adresse 0000h
|
3 | include 5131.inc ; Datei mit Adressen einbinden
|
4 |
|
5 | start: mov dptr,#tabelle
|
6 | mov p2,#11100110b
|
7 | jnb p3.3, start
|
8 | loop: mov a,#0
|
9 | movc a,@a+dptr
|
10 | mov p2,a
|
11 | inc dptr
|
12 | lcall time
|
13 | jnz loop
|
14 | mov p2,#01111110b
|
15 | ljmp endless
|
16 |
|
17 | endless: jnb p3.3,endless
|
18 | ljmp start
|
19 |
|
20 | time: mov r3,#255;
|
21 | mov r2,#255;
|
22 | Zeit2: mov r1,#255;
|
23 | Zeit1: djnz r1, Zeit1
|
24 | djnz r2, Zeit2
|
25 | Zeit3: djnz r3, Zeit3
|
26 | ljmp loop ;return Stat longjump
|
27 |
|
28 |
|
29 |
|
30 |
|
31 | tabelle: db 11110110b ; Zahl9
|
32 | db 11111110b ; Zahl8
|
33 | db 00110010b ; Zahl7
|
34 | db 11101110b ; Zahl6
|
35 | db 11100110b ; Zahl5
|
36 | db 11010010b ; Zahl4
|
37 | db 10110110b ; Zahl3
|
38 | db 10111100b ; Zahl2
|
39 | db 00010010b ; Zahl1
|
40 | db 01111110b ; Zahl0
|
41 | db 0 ; Kennung Tabellenende
|
42 | end
|
Bitte um schnellst mögliche Rückantwort. Schon einmal vielen Dank im
Vorraus.
Gruß Jonas