Hi, ich habe eine Frage zu den folgenden zwei einfachen Programmen:
1 | STATUS equ 03
|
2 | TRISA equ 85
|
3 | PORTA equ 05
|
4 | COUNT1 equ 20
|
5 | COUNT2 equ 21
|
6 |
|
7 | bsf STATUS,5
|
8 | clrf TRISA
|
9 | bcf STATUS,5
|
10 | movlw 02
|
11 | movwf PORTA
|
12 | clrf COUNT1
|
13 | clrf COUNT2
|
Hier unterscheiden sich die beiden Programme jetzt:
Programm 1:
1 | Start
|
2 | bsf PORTA,1
|
3 | call Delay
|
4 | bcf PORTA,1
|
5 | bsf PORTA,2
|
6 | call Delay
|
7 | bcf PORTA,2
|
Programm 2:
1 | movlw 06
|
2 |
|
3 | Start
|
4 | call Delay
|
5 | xorwf PORTA
|
Ab hier sind beide Programme wieder gleich:
1 | goto Start
|
2 |
|
3 | Delay
|
4 | decfsz COUNT1
|
5 | goto Delay
|
6 | decfsz COUNT2
|
7 | goto Delay
|
8 | return
|
9 |
|
10 | end
|
RA1 und RA2 sollten meiner Meinung nach in beiden Fällen abwechselnd
blinken. Beim zweiten Programm ist das Ergebnis auf meinem PIC16F627
aber, dass erst RA1 dann RA2 angeht und danach nichts mehr passiert.
Woran kann das liegen? Wenn ich das XORWF durch ein ANDWF austausche,
geht RB1 nach dem ersten Delay aus. Bei IORWF tritt der gleiche Zustand
wie bei XORF ein und bei COMF gehen alle RA an. Es ist, als würde der
PIC beim Lesen von PORTA nur 0 lesen. Ist dem so? Und, wenn ja, warum?
teh-JaR