blikač, knightrider

Download Report

Transcript blikač, knightrider

Programování mikrokontrolerů
PIC 16F84A
2-ŘSVS
Vlastnosti PIC 16F84A
13 vstupně výstupních pinů 5 + 8 (dva porty)
 PORT A RA0 – RA4
PORT B RB0 – RB7
• 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)
RA2
RA3
RA4/T0CKI
MCLR
Vss
RB0/INT
RB1
RB2
RB3
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
i4
EQU
EQU
EQU
EQU
EQU
h'06'
h'20'
h'21'
h'22'
h'23'
• 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
BCF
• BSF
STATUS,RP0
b'00000000'
TRISB
STATUS,RP0
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
MOVLW
MOVWF
BCF
STATUS,RP0
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)
– Lze zapsat i jako DEC, HEX, ale není tak přehledné.
– Při zadávání konstant v těle programu budeme využívat DEC
Popis programu - hlavička
BSF
MOVLW
MOVWF
BCF
STATUS,RP0
b'00000000'
TRISB
STATUS,RP0
• 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
BCF
• BCF
STATUS,RP0
b'00000000'
TRISB
STATUS,RP0
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
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• MOVLW - MOVe Lieral to W - načte jedničku do střadače
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• MOVWF - MOVe W to F (paměť) - uloží obsah střadače (1) do paměti.
Proměnná s názvem Výstup (EQU h 0006)
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• MOVLW - MOVe Lieral to W - načte desítku do střadače
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• MOVWF - MOVe W to F (paměť) - uloží obsah střadače (10) do paměti.
Proměnná s názvem i4 (EQU h ....)
• Když výstup=1 svítí nám první LED 00000001 - počáteční stav
• Do i4 jsme si zadali počet průběhů programu viz. níže
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• zacatek - návěstí , uložit do i3 hodnotu 8 - proč zrovna 8?
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• leva - návestí
• RLF - Rotation Left F (paměť) - z 00000001 vznikne 00000010 jedná se o
posunování (SHIFT) konstanty, nebo také násobení dvěmi.
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• CALL casovac - volání podprogramu s časovou prodlevou (maření cyklů)
• Po dokončení podprogramu pokračuje program na dalším řádku (DECFSZ
i3,1)
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• DECFSZ i3,1 - DECrement F(paměť) Skip if Zero
– Odečte od i3 jedničku, porovná s nulou, pokud se nerovná nule, pokračuje
normálně dál.
– Až odečte jedničku tolikrát, že i3=0 - přeskočí následující instrukci.
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• GOTO - Skok v programu na místo dané návěstím (leva)
– V případě, že v minulém kroku bylo i3=0 byla tato instrukce přeskočena Jsme na konci 10000000 a musíme obrátit směr pohybu
Popis programu - tělo programu
MOVLW
MOVWF
MOVLW
MOVWF
1
vystup
10
i4
zacatek
MOVLW
MOVWF
8
i3
leva
RLF
CALL
DECFSZ
goto
vystup,1
casovac
i3,1
leva
MOVLW
MOVWF
8
i3
• Opět nahrání hodnoty 8 do střadače a z něj poté do i3 (pro pohyb do leva
(viz. Pokračování programu)
Popis programu - tělo programu
prava
RRF
CALL
vystup,1
casovac
DECFSZ i3,1
goto prava
DECFSZ i4,1
GOTO zacatek
GOTO konec
• prava - návěstí
• RRF Rotation Right F - rotace doprava - dělení dvěmi
01000000 - 00100000
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
konec
CLRF vystup
end
• "Známý" časovač z minulé úlohy
• CLRF CLeaR F - Vynuluje registr (v našem případě výstup - zhasnout
všechny LED)
ÚKOL
• Rozšířit úlohu -2 LED diody naráz na kraji
zůstanou svítit obě