Tar med hela koden för säkerhets skull:
Raden mellan mellanrumen som ska flasha pinne 2 på PortA fungerar som om det stod bsf istället för btg.
Har mätt med oscilloskopet och pinnen blir hög men aldrig låg trots tusentals passager som verifieras med räknare som exporteras via seriekabeln till datorn.
Så frågan är, hur kan detta komma sig?
Byter jag ut PortA mot PortB så fungerar koden som den ska men inte som PortA
LowPriorityInterupt
Global LowPriorityInterupt
MOVWF W_TEMP ; W_TEMP is in virtual bank
MOVFF STATUS, STATUS_TEMP ; STATUS_TEMP located anywhere
MOVFF BSR, BSR_TEMP ; BSR located anywhere
Call IncPassingPointCounter4
btg PortA, 2
btfsc INTCON, TMR0IF
Call Timer0Overflowed
btfsc PIR1, RCIF
Call PutRecievedByteOnReceptionStack
Call IncPassingPointCounter4
MOVFF BSR_TEMP, BSR ; Restore BSR
MOVF W_TEMP, W ; Restore WREG
MOVFF STATUS_TEMP,STATUS ; Restore STATUS
Return
goto $
Programmeringsmysterium PIC18F442
Analoga funktionen låter som en rimlig förklaring.
En utgång är det, allt utom RC7 är utgång och eftersom den dessutom blir hög så mäste det väl vara en utgång?
Står:
bcf ADCON, 0.
Enligt databladet betyder det att A/D convertern inte ens konsumerar ström i det läget.
Men antagligen är väl då inte det allt antar jag eftersom något blir fel?
En utgång är det, allt utom RC7 är utgång och eftersom den dessutom blir hög så mäste det väl vara en utgång?
Står:
bcf ADCON, 0.
Enligt databladet betyder det att A/D convertern inte ens konsumerar ström i det läget.
Men antagligen är väl då inte det allt antar jag eftersom något blir fel?