230 likes | 393 Views
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
E N D
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) RA1 RA0 OSC1/CLKIN OSC2/CLKOUT Vdd RB7 RB6 RB5 RB4 RA2 RA3 RA4/T0CKI MCLR Vss RB0/INT RB1 RB2 RB3
Popis programu - Konfig. slovo INCLUDE "P16F84A.INC" LIST P=16F84A, R=DEC __CONFIG _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 EQU H'0002‚ STATUS EQU H'0003‚ FSR EQU H'0004‚ PORTA EQU 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 "P16F84A.INC" LIST P=16F84A, R=DEC __CONFIG _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 "P16F84A.INC" LIST P=16F84A, R=DEC __CONFIG _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 EQU h'06' i1 EQU h'20' i2 EQU h'21' i3 EQU h'22' i4 EQU 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 STATUS,RP0 MOVLW b'00000000' MOVWF TRISB BCF 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'00000000' MOVWF TRISB BCF 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 STATUS,RP0 MOVLW b'00000000' MOVWF TRISB BCF 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 STATUS,RP0 MOVLW b'00000000' MOVWF TRISB BCF 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 MOVLW 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF i3 • MOVLW - MOVe Lieral to W - načte jedničku do střadače
Popis programu - tělo programu MOVLW 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF 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 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF i3 • MOVLW - MOVe Lieral to W - načte desítku do střadače
Popis programu - tělo programu MOVLW 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF 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 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF i3 • zacatek - návěstí , uložit do i3 hodnotu 8 - proč zrovna 8?
Popis programu - tělo programu MOVLW 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF 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 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF 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 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF 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 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF 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 1 MOVWF vystup MOVLW 10 MOVWF i4 zacatek MOVLW 8 MOVWF i3 leva RLF vystup,1 CALL casovac DECFSZ i3,1 goto leva MOVLW 8 MOVWF 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 vystup,1 CALL 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 pauza2 MOVLW 100 MOVWF i1 pauza1 DECFSZ i1,1 goto 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ě