Programování mikrokontrolerů PIC 16F84A NC řídící systémy Vlastnosti PIC 16F84A 13 vstupně výstupních pinů 5 + 8 (dva porty)  PORT A RA0 –

Download Report

Transcript Programování mikrokontrolerů PIC 16F84A NC řídící systémy Vlastnosti PIC 16F84A 13 vstupně výstupních pinů 5 + 8 (dva porty)  PORT A RA0 –

Programování mikrokontrolerů
PIC 16F84A
NC řídící systémy
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
Vlastnosti PIC 16F84A
• Pouze 35 instrukcí
• Každá instrukce zabírá jeden strojový cyklus (instrukce
přerušující běh programu - dva cykly)
• doba strojového cyklu je rovna převrácené hodnotě kmitočtu
oscilátoru, která je vydělena čtyřma. (běžně
• krystaly 4MHz tedy 1/(4Mhz/4) = 1us.)
• maximální frekvence 20MHz - doba strojového cyklu 200ns,
1/(20Mhz/4) = 200ns
• programová paměť o velikosti 1024 slov
• 68 bytů paměť Data RAM
• 64 bytů paměť Data EEPROM
• 15 speciálních hardwarových registrů
• čtyři zdroje přerušení
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
EQU
EQU
EQU
h'06'
h'20'
h'21'
• Direktiva EQU (podobně jako u INCLUDE, ale zde definujem
vlastní proměnné)
• Vystup - název konstanty
• 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
STATUS,RP0
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
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
STATUS,RP0
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
zacatek
BSF
CALL
BCF
CALL
GOTO
casovac
MOVLW 255
MOVWF i2
MOVLW 255
MOVWF i1
DECFSZ i1,1
goto pauza1
DECFSZ i2,1
goto pauza2
pauza2
pauza1
vystup,0
casovac
vystup,0
casovac
zacatek
return
end
• Zacatek - Návěstí - Používá se při skocích v programu (GOTO,
CALL)
Popis programu - tělo programu
zacatek
BSF
CALL
BCF
CALL
GOTO
casovac
MOVLW 255
MOVWF i2
MOVLW 255
MOVWF i1
DECFSZ i1,1
goto pauza1
DECFSZ i2,1
goto pauza2
pauza2
pauza1
vystup,0
casovac
vystup,0
casovac
zacatek
return
end
• BSF vystup,0
– Nastaví bit vystup,0 (ekviv. RB0 viz. deklarace konstant)
vystup
EQU
h'06'
– Vystup - ekvivalent PORTB, ,0 - označení bitu v byte PORTB
Popis programu - tělo programu
zacatek
BSF
CALL
BCF
CALL
GOTO
casovac
MOVLW 255
MOVWF i2
MOVLW 255
MOVWF i1
DECFSZ i1,1
goto pauza1
DECFSZ i2,1
goto pauza2
pauza2
pauza1
vystup,0
casovac
vystup,0
casovac
zacatek
return
end
• CALL - Volání podprogramu
– Casovac - návěstí definované v programu
Popis programu - tělo programu
zacatek
BSF
CALL
BCF
CALL
GOTO
casovac
MOVLW 255
MOVWF i2
MOVLW 255
MOVWF i1
DECFSZ i1,1
goto pauza1
DECFSZ i2,1
goto pauza2
pauza2
pauza1
vystup,0
casovac
vystup,0
casovac
zacatek
return
end
• Casovac, pauza2, pauza - návěstí (značka ukazující na pozici v
programu na kterou se lze odvolávat)
• MOVLW, MOVWF - zaplnění konstant pro podprogram zpoždění
Popis programu - tělo programu
zacatek
BSF
CALL
BCF
CALL
GOTO
casovac
MOVLW 255
MOVWF i2
MOVLW 255
MOVWF i1
DECFSZ i1,1
goto pauza1
DECFSZ i2,1
goto pauza2
pauza2
pauza1
vystup,0
casovac
vystup,0
casovac
zacatek
return
end
• DECFSZ i1,1 - DECrement F Skip if Zero
– Odečte od i1 jedničku a následně porovná s nulou
• =0 - přeskočí následující instrukci (slovo)
• ≠0 - pokračuje na další instrukci
Popis programu - tělo programu
zacatek
BSF
CALL
BCF
CALL
GOTO
casovac
MOVLW 255
MOVWF i2
MOVLW 255
MOVWF i1
DECFSZ i1,1
goto pauza1
DECFSZ i2,1
goto pauza2
pauza2
pauza1
vystup,0
casovac
vystup,0
casovac
zacatek
return
end
• GOTO pauza1 - skok na návěstí
– Lze zapsat i goto $-1 skok o 1 řádek zpět (lze záporná i kladná celá
čísla)
Popis programu - tělo programu
zacatek
BSF
CALL
BCF
CALL
GOTO
casovac
MOVLW 255
MOVWF i2
MOVLW 255
MOVWF i1
DECFSZ i1,1
goto pauza1
DECFSZ i2,1
goto pauza2
pauza2
pauza1
vystup,0
casovac
vystup,0
casovac
zacatek
return
end
• RETURN - návrat z podprogramu
– Program se vrátí za instrukci CALL, která volala podprogram
• END - konec programu
– Musí být i tam, kde se program nikdy k této instrukci nedostane.
ÚKOL
• Rozšířit program tak, aby byl vytvořen
světelný "had"
• Rozsvěcet postupně LED diody
• 00000001 - 00000010 - 00000100 00001000 - 00010000 - 00100000 01000000 - 10000000 a znova 00000001..