"Öppna" ingångar fångar upp störningar "ur luften", speciellt 50/100 Hz
brum från nätspänningen. Det blir betydligts värre om de dessutom
är kopplade till ledningar på krtetskortet som fungerar som antenner.
Absolut enklast är att sätta alla oanvända pinnar som *utgångar* via
TRISx registrena, bara ändringar i koden och ingen extra hårdvara.
Alternativet är att fysiskt koppla alla öppna ingångar till 5V eller jord.
Koden (för att clear'a TRISB) är inte helt bra. Något bättre är att skriva :
Kod: Markera allt
bsf STATUS, RP0 ;Switch to Bank 1
movlw 00h ;Set the Port B pins
movwf TRISB ;to output.
bcf STATUS, RPO ;Switch back to Bank 0
Ändå lite bättre är :
Kod: Markera allt
banksel TRISB ;Switch to the right bank (whitch ever it is...)
movlw 00h ;Set the Port B pins
movwf TRISB ;to output.
banksel PORTB ;Switch back to Bank 0 (PORTx regs are always in bank 0...)
Bäst (sparar en instruktion) är att skriva:
Kod: Markera allt
banksel TRISB ;Switch to the right bank
clrf TRISB ;Set all of PORTB to outputs.
banksel PORTB ;Switch back to Bank 0 (PORTx regs are always in bank 0...)
Generellt, för STATUS och alla andra register som innehåller olika "bitar"
med olika funktioner, använd *ALDRIG* siffror för bitarna, utan enbart de
fördefinierade symbolerna (namnen) för bitarna.
Och för bankhanteringen, använd BANKSEL så finns det ingen risk att
du läser fel vilken bank ett visst register ligger i.
Dessutom, "bsf STATUS,5 ;Switch to Bank 1" stämmer inte.
Det ska ska stå "Switch to Bank 1 or 3", för det beror på hur RP1 är ställd !!