Styre utganger og lese innganger
For å ha noe nytte av PIC prosessoren, så må man kunne styre utgangene og lese inngangene.
Det er ofte lurt å definere portene i begynnelsen av programmet, da slipper man å huske hvilken adresse de har.
porta |
equ |
05 |
;definerer porta ( pinne 17, 18, 1, 2 og 3 ) |
portb |
equ |
06 |
;definerer portb ( pinne 6, 7, 8, 9, 10, 11, 12 og 13 ) |
I dette eksemplet velger jeg porta som inngang og portb som utgang, dette gjøres på følgende måte:
Portene er i utgangspunktet innganger så man trenger bare å sette portb til utgang.
bsf |
3,5 |
;går over i bank 1 i minnet |
|
clrf |
portb |
;setter portb til utgang |
|
bcf |
3,5 |
;går tilbake til bank 0 i minet |
Sette / resette et bit på en port
Skal man sette bit 0 på portb ( pinne 6 ) til 1 så gjøres dette med BSF kommandoen.
Skal man sette flere bit så gjør man det samme med de andre bitne.
bsf |
portb,0 |
;setter portb,0 til 1 |
Skal man sette bit 0 på portb til 0 så gjøres det med BCF kommandoen.
Skal man sette flere bit så gjør man det samme med de andre bitne.
bcf |
portb,0 |
;setter portb,0 til 0 |
Sette / resette flere bit på en port samtidig
Ofte så må man kunne forandre flere bit samtidig på en port, dette kan gjøres ved å legge en tall verdi ut på porten.
Sette alle bitene til 1
movlw |
0xff |
;legger tallet ff inn i w ( alle 8 bit er 1 ) |
|
movwf |
portb |
;legger tallet ut på portb |
Sette noen bit og resette noen andre bit.
movlw |
b'00101110' |
||
movwf |
portb |
Sette alle bitene til 0
clrf |
portb |
Lese enkle bit på en port
For å lese en inngang så kan man bruke interupt eller polle på inngangen, det enkleste er å polle på inngangen.
Dette kan gjøres med kommandoene BTFSC og BTFSS .
BTFSC hopper over neste instruksjon i programmet hvis inngangen er 0
BTFSS hopper over neste instruksjon i programmet hvis inngangen er 1
I eksemplet under så vil prosessoren gå til start hvis porta,0 er 1, hvis porta,0 er 0 så går den videre i programmet.
btfsc |
porta,0 |
;hopper over neste instruksjon hvis porta,0 er 0 |
|
goto |
start |
;utfører denne instruksjonen hvis porta,0 er 1 |
I eksemplet under så vil prosessoren gå til start hvis porta,0 er 0, hvis porta,0 er 1 så går den videre i programmet.
btfss |
porta,0 |
;hopper over neste instruksjon hvis porta,0 er 1 |
|
goto |
start |
;utfører denne instruksjonen hvis porta,0 er 0 |
Lese hele porten
Man kan lese hele porten og behandle den som et tall.
movfw |
porta |
;legger tallverdien på porta inn i w register |
|
addlw |
.25 |
;adderer w register med 25 |
Man bruker de samme metodene når man skal lese og skrive til andre registre ( ikke w registeret ).