Programování mikrokontrolerů PIC 16F84A

Download Report

Transcript Programování mikrokontrolerů PIC 16F84A

Programování mikrokontrolerů
PIC 16F84A
3-ŘSVS
Program - cíl
•
•
•
•
Zapojení tlačítek
Po zmáčknutí pravého tlačítka - LED 0-7
Po zmáčknutí levého tlačítka - LED 7-0
Jinak neprovádět na výstupech žádné změny
Program - princip
• Stále dokola testovat, zda nebylo zmáčknuto tlačítko
• Pokud ano, odskok programu na projetí LED příslušným směrem
• Využití RRF a RLF jako u minulého programu
Vlastnosti PIC 16F84A
13 vstupně výstupních pinů 5 + 8 (dva porty)
 PORT A RA0 – RA4
PORT B RB0 – RB7
RA2
RA3
RA4/T0CKI
MCLR
Vss
RB0/INT
RB1
RB2
RB3
• MCLR – vstup resetovacího
signálu
• Vss (+), Vdd (-) – Napájecí piny
• OSC1/CLKIN – pin pro vstup
taktovacího oscilátoru
• OSC2/CLKOUT – výstup taktovacího
signálu (synchronizace)
RA1
RA0
OSC1/CLKIN
OSC2/CLKOUT
Vdd
RB7
RB6
RB5
RB4
Popis programu - Konfig. slovo
INCLUDE
LIST
__CONFIG
"P16F84A.INC"
P=16F84A, R=DEC
_CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
• INCLUDE, která do kódu vkládá obsah souboru P16F84A.INC.
Tento soubor v sobě obsahuje deklarace konstant.
PCL
STATUS
FSR
PORTA
EQU
EQU
EQU
EQU
H'0002‚
H'0003‚
H'0004‚
H'0005'
…
PCL
– název konstanty
EQU – direktiva pro přiřazení ekviv. názvu
H'0005‚ - adresa registru (HEX)
Popis programu - Konfig. slovo
INCLUDE
LIST
__CONFIG
"P16F84A.INC"
P=16F84A, R=DEC
_CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
• LIST- obsahuje informace pro překladač
- pro jaký uP překládá (P)
- jakou má použít výchozí číselnou soustavu (R)
DEC dekadická
HEX šestnáctková
OCT osmičková.
Popis programu - Konfig. slovo
INCLUDE
LIST
__CONFIG
"P16F84A.INC"
P=16F84A, R=DEC
_CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC
• Konfigurační slovo
– _CP_OFF - ochrana proti vyčtení programu (vypnutá) code
protection
– _WDT_OFF - Watchdog timer - ochrana proti "zacyklení" (vypnutá)
– _PWRTE_ON - ochrana proti přepsání programu (protection write)
– _XT_OSC - definice oscilátoru (XT - 4MHz)
Popis programu - Deklarace konst.
vystup
i1
i2
i3
EQU
EQU
EQU
EQU
h'06'
h'20'
h'21'
h'22'
• EQU - direktiva pro přiřazení ekvivalentního názvu
H'06' - adresa registru (HEX)
06 - PORTB - vstupně výstupní registr (stav je shodný se
stavem na pinech pouzdra)
od 20+ prostor pro vlastní konstanty
Popis programu - hlavička
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
STATUS,RP0
b'00001010'
TRISA
b'00000000'
TRISB
STATUS,RP0
• BSF STATUS,RP0 - Přesun do BANK 1 (pro nastavování uP)
– BSF - Bit Set F - nastavení bitu v paměti (F) do stavu 1
– STATUS - označení bajtu (viz konfig. Slovo)
– RPO - označení bitu v bajtu
(stejně by šlo napsat i BSF H'0003'.3)
Popis programu - hlavička
BSF
STATUS,RP0
MOVLW
b'00001010'
MOVWF
TRISA
MOVLW
b'00000000'
MOVWF
TRISB
BCF
STATUS,RP0
• MOVLW b'00001010' - MOVe Literal to W - Přesun zapsaného čísla do
registru W (něco jako RAM)
– V tomto případě binární číslo, 8 bitů, hodnota 0 (výstupy)
•
MOVWF TRISA - MOVe W to F - Přesun čísla z registru W do paměti (F)
– TRISA - adresa kam zapsat hodnotu z W (střadač)
• TRISA - konfigutační HW registr pro nastavení vstupů a
výstupů portu A (RA)
• Bit 0 - RA0 .....bit 7 - RA7
• 0 - výstup, 1 - Vstup
Popis programu - hlavička
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
STATUS,RP0
b'00001010'
TRISA
b'00000000'
TRISB
STATUS,RP0
• MOVLW b'00000000' - MOVe Literal to W - Přesun zapsaného
čísla do registru W (něco jako RAM)
– V tomto případě binární číslo, 8 bitů, hodnota 0 (výstupy)
• MOVWF TRISB - MOVe W to F - Přesun čísla z registru W do
paměti (F)
– TRISB - adresa kam zapsat hodnotu z W (střadač)
• TRISB - konfigutační HW registr pro nastavení vstupů a
výstupů portu B (RB)
• Bit 0 - RB0 .....bit 7 - RB7
• 0 - výstup, 1 - Vstup
Popis programu - hlavička
BSF
MOVLW
MOVWF
MOVLW
MOVWF
BCF
STATUS,RP0
b'00001010'
TRISA
b'00000000'
TRISB
STATUS,RP0
• BCF STATUS,RP0 - Přesun zpět do BANK 0
– BCF - Bit Clear F - nastavení bitu do v paměti (F) do stavu 0
• Stejné jako BSF, ale bit nuluje.
• V hlavičce se nastavují i jiné registry, o nich ale až později.
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
PORTA
PORTA,1
shp
PORTA,3
shl
kama
• Kama - návěstí (kudy)
• CLRF - CLeaR F - vynuluje obsah bajtu
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
PORTA
PORTA,1
shp
PORTA,3
shl
kama
• BTFSS - Bit Test F Skip if Set - otestuje hodnotu bitu PORTA,1
– 1 - přeskočí následující instrukci
– 0 - pokračuje normálně dále na následující instrukci
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
PORTA
PORTA,1
shp
PORTA,3
shl
kama
• GOTO - skok v programu na návěstí
– Shl - návěstí pro "had doleva"
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
PORTA
PORTA,1
shp
PORTA,3
shl
kama
• BTFSS - Bit Test F Skip if Set - otestuje hodnotu bitu PORTA,3
– 1 - přeskočí následující instrukci
– 0 - pokračuje normálně dále na následující instrukci
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
PORTA
PORTA,1
shp
PORTA,3
shl
kama
• GOTO - skok v programu na návěstí
– Shp - návěstí pro "had doprava"
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
PORTA
PORTA,1
shp
PORTA,3
shl
kama
• GOTO - skok v programu na návěstí kama
– Kama - program opět zjišťuje zda nebylo stisknuto tlačítko
– Z cyklu se odskočí až když je nějaké tlačítko zmáčknuto
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
•
•
•
PORTA
PORTA,1
shp
PORTA,3
shl
kama
Shp - návěstí shift na pravo
Nastavení (SET) posledního bitu, aby se mohlo "shiftovat" doprava
Lze zapsat i BSF vystup,7
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
•
PORTA
PORTA,1
shp
PORTA,3
shl
kama
CALL casovac - volání podprogramu pro vytvoření časové prodlevy
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
•
•
•
PORTA
PORTA,1
shp
PORTA,3
shl
kama
Doprava - návěstí (ukazatel)
RRF - Rotate Right F (paměť) posun doprava (jako minule)
CALL casovac - volání podprogramu pro časovou prodlevu
Popis programu - tělo programu
kama
CLRF
BTFSS
GOTO
BTFSS
GOTO
GOTO
shp
MOVLW 128
MOVWF vystup
CALL
casovac
RRF
vystup,1
CALL
casovac
BTFSS vystup,0
GOTO
doprava
CLRF
vystup
GOTO kama
doprava
•
PORTA
PORTA,1
shp
PORTA,3
shl
kama
BTFSS - otestuje jestli je již nastaven nultý bit v bajtu výstup (konec)
– 1- dále již neposouvat - vynulovat výstup, odskok na "kama"
– 0 - ještě posouvat (nedokončeno) odskok na "doprava"
Popis programu - tělo programu
shl
doleva
•
MOVLW 1
MOVWF vystup
CALL
casovac
RLF
vystup,1
CALL
casovac
BTFSS vystup,7
GOTO
doleva
CLRF
vystup
GOTO
kama
Podobně jako u shp
– Na výstup nastavuji nejprva nultý bit ( lze i BSF vystup,0)
– Shiftuje se doleva
– Testuje se sedmý bit výstupu
Popis programu - tělo programu
casovac
MOVLW 255
MOVWF i2
MOVLW 100
MOVWF i1
DECFSZ i1,1
goto pauza1
pauza2
pauza1
DECFSZ i2,1
goto pauza2
return
end
• "Známý" časovač z minulých úloh
ÚKOL
Připojit spínače na jiné piny
Prohodit funkci tlačítek
Pokud jsou zmáčknuty obě jet tam a zpět
(ochrana proti záchvěvům)