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 ReportTranscript 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..