Hallo zusammen, ich hab das Problem, dass beim hin und her Kopieren eines Bytes nach einem rotier Befehl auf einmal alle Bits gelöscht sind. Konkret geht es um die Stelle an der auskommentiert "weiterer Code" steht. Wenn ich die mov Befehle davor und danach (mov nb0,a & mov a,nb0) entferne funktioniert es auf einmal. Ich komm einfach nicht drauf woran das liegen könnte. Eigentlich wird doch nur der Akku auf nb0 geschrieben und danach wieder nb0 auf den Akku. Komischerweise werden die Bits nicht gelöscht wenn ich den Rotierbefehl weglasse. Aber ohne macht das Programm halt keinen Sinn.
1 | #include <REG8253.H> |
2 | |
3 | ;Stack-Bereich im indirekt adressierbaren internen RAM |
4 | stackbereich segment idata |
5 | rseg stackbereich |
6 | ds 10h ;16 Byte |
7 | |
8 | ;Bytes im int. direkt adressierbaren RAM |
9 | dir_daten segment data |
10 | rseg dir_daten |
11 | nb0: ds 1 |
12 | |
13 | ;LJMP von Adresse 0 im Code-Speicher zum Programmanfang |
14 | cseg at 0 |
15 | ljmp start |
16 | |
17 | ;Programmcode (Code-Beginn über Linker festgelegt) |
18 | programmcode segment code |
19 | rseg programmcode |
20 | using 0 ;Registerbank 0 für Programmcode (rseg -> verschiebbar) |
21 | |
22 | ;Initialisierung Stack |
23 | start: |
24 | mov sp,#stackbereich-1 ;STACK-Definition |
25 | |
26 | ;-------------------------------------------------------------------------- |
27 | |
28 | |
29 | mov nb0,#0a6h |
30 | main: |
31 | |
32 | clr c |
33 | mov a,nb0 ;Nennerbyte 0 durch Carry nach links |
34 | rlc a |
35 | mov nb0,a |
36 | |
37 | ;!!!weiterer Code!!! |
38 | |
39 | mov a,nb0 ;Nennerbyte 0 auf Port 0 ausgeben |
40 | cpl a |
41 | mov p0,a |
42 | |
43 | ljmp main |
44 | |
45 | |
46 | end |
Gruß Michael