260 likes | 439 Views
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
E N D
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 • 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' • 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'00001010' MOVWF TRISA 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'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 STATUS,RP0 MOVLW b'00001010' MOVWF TRISA 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) • 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'00001010' MOVWF TRISA 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 kama CLRF PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO kama • Kama - návěstí (kudy) • CLRF - CLeaR F - vynuluje obsah bajtu
Popis programu - tělo programu kama CLRF PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO 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 PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO kama • GOTO - skok v programu na návěstí • Shl - návěstí pro "had doleva"
Popis programu - tělo programu kama CLRF PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO 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 PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO kama • GOTO - skok v programu na návěstí • Shp - návěstí pro "had doprava"
Popis programu - tělo programu kama CLRF PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO 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 PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO 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 PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO kama • CALL casovac - volání podprogramu pro vytvoření časové prodlevy
Popis programu - tělo programu kama CLRF PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO 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 PORTA BTFSS PORTA,1 GOTO shp BTFSS PORTA,3 GOTO shl GOTO kama shp MOVLW 128 MOVWF vystup CALL casovac doprava RRF vystup,1 CALL casovac BTFSS vystup,0 GOTO doprava CLRF vystup GOTO 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 MOVLW 1 MOVWF vystup CALL casovac doleva 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 pauza2 MOVLW 100 MOVWF i1 pauza1 DECFSZ i1,1 goto 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)