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 ).

 

Tilbake