ŠKOLA PIC II 2021 – Kapitola 1
Assembler je programovací jazyk, kde adresy registrů, proměnných nebo konstant nahrazujeme symboly, které jsou pro člověka přívětivější a lépe si je pamatuje podle nějaké mnemotechniky.
Tahák Assembler.pdf
Základní pojmy
Mikroprocesor (CPU,MCU) – mikrokontroler – (Central Processing Unit). Rozdělení mikroprocesorů na 8 bitové, 16 bitové, 32 bitové a 64 bitové. Rozdělení podle architektury: Von Neumann, Harvard RISC (reduced instruction set computer; počítač s redukovanou instrukční sadou) .
Hardvarská architektura:
– oddělená paměť programu a paměť dat
Mikroprocesor PIC16F15324 (rodina PIC16F15344)
Výrobce: Microchip (USA)
Typ: 8 bitový mikrokontrolér
Program memory: 7k (max 28k v rodině)
EEPROM: 256 bytes
SRAM: 512 bytes (max 2048 v rodině)
I/O ports: 12 (max 44 pin v rodině)
A/D převodník: 11 ch., 10 bit (max 43chv rodině)
Komparátory: 2
Časovače: 1 8bit, 2 16bit
EUSART: 2x
I2C, SPI: 1*1 (2*2 v rodině)
ECCP/CCP: 2/2
LCD: ne
Kapacitní snímač: ne
Hlavní rozdíly mezi PIC16F15324 , PIC16F887a PIC16F1937:
-kvalitní interní oscilátor 31kHz a 1-32MHz, 2-4 PLL
– paměť SRAM 512 bytes
-dva FSR registry
– 5 časovačů (TIMERS)
– 5 ECCP/CCP (PWM – Pulse Width Modulation)
– větší výběr anologových i digitálních periférií
– individuálně nastavitelné pull-ups odpory na vstupech
– lepší možnost nastevení přerušení (Interrupt-on-change with edge-select
– PPS – periferial Pin Select – sw nastavitelné vstupy a výstupy periférií
Základní dokument: Datasheet PIC16F15324/344
http://ww1.microchip.com/downloads/en/devicedoc/40001889a.pdf
Vývojové prostředí: MPLAB-X
Počítačový program pro tvorbu programů pro mikroprocesory. Jedná se o volný program firmy Microchip, ve kterém budeme pracovat. Aktuální verze je 2.05 ke stažení zde:
https://www.microchip.com/pagehandler/en-us/family/mplabx/
Podrobný popis MPLAB X je zde:
http://ww1.microchip.com/downloads/en/devicedoc/50002027d.pdf
PICKIT 3
je programátor a simulátor pro nahrávání a odlaďování programů přímo v mikroprocesoru.
Podrobnější popis je zde:
http://www.microchip.com/Developmenttools/ProductDetails.aspx?PartNO=PG164130
Program je soupis pokynů (instrukcí), jejichž vykonáním dosáhneme žádaného výsledku.
Mikroprocesor je zařízení, které program vykonává.
Mikroprocesor
Mikroprocesor pracuje ve strojovém kódu. Strojový kód je v podstatě hromada čísel, ve kterých se vyzná pouze mikroprocesor (je-li je program správně napsaný), ale člověk většinou ne. Pro příklad uvedeme část strojového kódu :
:020000040000FA
:020000000428D2
:08000800230000308C008D0183
:100010008F0190012100F9309B00B8309500FF302E
:100020008C0000308D0080308E008F010F309000EA
:100030007A309900200074309C00FF30AF00FF3010
:10004000B000FF30B100FF30B200FF30B300FF302E
:10005000B400FF30B500FF30B600A101A201A60137
:100060006430A4000A30A300A700911C3528911029
:10007000BC0110193C149018BC143C0C3C06BE008A
:100080003E18BC173D083C06BE003E1C4E283C08EE
:10009000BD00BC1F4D2825144E28A5146400461031
:1000A000C610A40B5B2846146430A400A30B5B2885
:1000B000C6140A30A300461C6228BB1F6228F30F37
:1000C0006228F40A251D6728BB13F301F401251EDD
:1000D0006A28BB17A51E6D28BB13251F7028BB17E8
:1000E000A51F7328BB130E10BB1B0E148D01073008
:1000F00020050B00822887288E28922896289A2887
Na první pohled je jasné, že člověk se v tom velice obtížně orientuje. Aby bylo programování pro člověka přívětivé a snadné, byl vytvořen jazyk symbolických adres – Assembler. Je to nejnižší programovací jazyk. Jedná se o soubor instrukcí daného procesoru, které se postupně zapisují do zdrojového souboru. Tyto instrukce mnemotechnicky vyjadřují jednotlivé povely pro procesor, jsou to zkratky anglických pojmů (např. instrukce BTFSS – Bit Test F, Skip if Set – testuj bit registru F, skoč pokud bit b je nastaven na log. 1 (H).
Zápis celé instrukce v assembleru vypadá takto:
Test_bitu2 BTFSS CISLO,2 ;Test_bitu2 je návěští, BTFSS instrukce, CISLO je registr, 2 je 2. bit registru CISLO (naše proměnná)
další příklad lze uvést jednu jednoduchou instrukci:
bsf Rele 1 ;Tato instrukce zabezpečí sepnutí relé 1, které jsme si dopředu deklarovali na nějaký port (bit set file).
Chceme-li ale toto relé naopak vypnout, stačí instrukci změnit takto:
bcf Rele 1 ;Tato instrukce znamená bit clear file (Clear=0 nebo vypnuto)
Zápisu programu v assembleru (Jazyk Symbolických Adres) se říká zdrojový kód – zdroják. Tento zdrojový kód se následně přeložíme překladačem (compilerem) do výše zmíněného strojového kódu, který se pak již programátorem nahraje do čipu pomocí programovacího konektoru (zpravidla). Pro přehlednost lze využít následujících ikon.
Kompletní popis assembleru firmy Microchip je možno stáhnout :
http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf
Instalace vývojového prostředí MPLAB X a založení nového projektu.
Instalace vývojového prostředí MPLAB X se provede následovně:
na webové stránce Microchip (výrobce mikroprocesorů PIC a nejenom jich)
https://www.microchip.com/mplab/mplab-x-ide/0
nebo – ale bohužel stránky Microchip se často mění, takže se klidně stane, že za týden tam už není, co jste běžně před tím našli. Takže trpělivost a hledat.
https://www.microchip.com/pagehandler/en-us/family/mplabx/
si vybereme pro jaký systém chceme nainstalovat prostředí. K dispozici je Windows x86/x64, Linux 32-Bit a Linux 64-bit a MAC(10.X). Pro Windows je k dispozici nejnovější verze v 5.15 a rychle se to mění. Ze zkušenosti je lepší upgrade až po zralé úvaze, abychom se nemuseli vracet původní verzi, která nám fungovala bezvadně a nová se chová jinak než jsme byli zvyklí.
Po stažení tohoto souboru (367MB) do počítače provedeme jeho extrahování a následně spuštění instalace. Lze to provést najednou kliknutím na soubor MPLABX-v2.05-windows-installer.exe.
Za okamžik by se mělo objevit logo MPLABX a následně Setup tabulka. Kliknutím na Next > pokračujeme. Schválíme licenční podmínky zaškrtnutím „I accept the agreement“ a pokračujeme Next >. Instalační direktorář raději neměnte a stiskněte Next >. Tabulku Ready to install také odklepneme Next >. V případě, že máme nainstalovanou některou z nižších verzí MPLAX, musíme ji odinstalovat a to nejlépe před zahájením nové instalace.
Instalace chvíli trvá, ale neměl by to být žádný problém. Když dojede modrý proužek instalace na konec, vytvoří se odinstalační program. Jsme-li úspěšní až sem, uvidíme následující tabulku:
Potvrzením tlačítka „Finish“ se načtou stránky Microchip MPLAB X, kde je se v angličtině učební program „Learn More“. Kdo chce, může si to prostudovat, případně přehrát i video. Pro začátek to není nutné, ale lze se na tuto stránku kdykoliv vrátit.
Na ploše počítače by se měli objevit tři ikony:
MPLABX-V5.15 je ikona pro spuštění našeho vývojového prostředí,
MPLAB IPE je ikona pro spuštění programu pro nahrávání souboru HEX přímo do procesoru a
MPLAB driver switcher používat nebudeme, slouží k přepínání mezi dřívějšími verzemi MPLAB.
Spustíme-li ikonu MPLAB X – objeví se logo:
a následně celý program MPLABX-V5.15 rozdělený na více oken, která jdou ve Windows přetahováním myší upravovat, ale abych se přiznal tak se mi to nikdy pořádně nepodařilo uspořádat k obrazu svému a běda, pořídíte-li si monitor s jiným rozlišením, vše se vám na obrazovce rozhází. Takže lepší je zůstat konzervativní a změny provádět jen po zralé úvaze. Jako základní okna v prostředí budeme používat tato: „Projekty“, ve kterém se nám budou zobrazovat námi vytvořené projekty, největší okno „Asm Source“ je pro zobrazování a editaci textových souborů našich programů v assembleru. Později to může být i například v „C“ a podobně. V tomto okně budeme nejvíce pracovat.
Další okno je „Navigátor“ , kde si můžeme zobrazit přehled podprogramů a návěští a poklepnutím na název skočíme přímo na řádek v editoru asm. další je „Dasboard“, kde můžeme přímo spouštět externí pdf soubory, např., datasheet a vidíme zde základní vlastnosti a využití procesoru a lze zde jedním kliknutím nastavit vlastnosti projektu. Další důležité okno je „Output -..“, kde se zobrazují výsledky překladů, chybová hlášení atd. Je to hned druhé nejdůležitější okno. Prostředí je velmi různorodé, až bych řekl že zbytečně složité, ale cílem Microchip bylo sestavit jediné prostředí, kde lze dělat vše. Bohužel pro začátek je to složité, ale při instalaci pro začátek nemusíme vše instalovat. Tak pro nás zatím stačí instalovat procesory PIC 8bit, jazyk assembler, takže nemusíme instalovat konfigurátor, pluginy, procesory AWR, překladač pro 16 a 32 bitové procesory, jazyk C, To vše lze doinstalovat později. Takže pro začátek je v jednoduchosti síla. Není nutné hned zkoušet všechny možnosti co to umí, ale jen to co nezbytně potřebujeme k práci.
Založení nového projektu
V záložce „File“ (Vlevo nahoře) vybereme „New Project…“ a klikneme. Objeví se tabulka „Choose Project“. Vybereme Microchip Embedded a potvrdíme „Next >”. V Následující tabulce „Select Device“ do řádku Device: napíšeme PIC16F1937 a potvrdíme „Next >”. V další tabulce „Select Header“ potvrdíme „None“ tlačítkem „Next >”. Následně vybereme „Select Tool“ kliknutím na „PICkit3“ a potvrdíme „Next >”. V tabulce „Select Compiler“ vybereme mpasm(v5.55)
a opět potvrdíme „Next >”. V další tabulce „Select Project Name and Folder“ vyplníme název našeho projektu. Nepoužívejte českou diakritiku v názvu ani v cestě. Vyhnete se tím problémům v budoucnosti. Cestu (Project Location:) potvrďte tu, která je doporučená. Potom budete mít projekty uloženy ve složce vaší dokumentace a práci budete mít jednodušší. V položce „Encoding:“ naopak vyberte stránku „windows-1250“, aby se poznámky v programu zobrazovaly správně česky. Kdo chce pracovat pouze v angličtině, klidně může.
Kliknutím na „Finish“ dokončíme založení projektu, který by se měl objevit v tabulce „Projekty“ (levá horní).
Tím máme založený „čistý“ nový projekt. Abychom mohli pracovat, pro začátek si „vypůjčíme“ již napsaný program v assembleru, a budeme ho později moci upravovat nebo měnit.
K tomu je ale nutné nakopírovat do adresáře „JMENO_PROJEKTU.X“ textový *.asm soubor.
V našem případě nakopírujeme Fott_302.asm.
V okně „Project“ klepneme pravým tlačítkem na „Source Files“ a vybereme „Add Existing Item…“
a vybereme již nakopírovaný soubor Fott_302.asm.
Tento soubor se nám objeví v okně „Project“ a když na něho dvakrát klikneme, tak se rozbalí i v okně assembleru.
Dostali jsme se úspěšně až sem, tak máme skoro vyhrané první kolo a můžeme začít s programováním. Nejprve je ale dobré, říct si některé zásady, které sice nejsou nezbytné, ale usnadní nám život v budoucnosti, hlavně při kopírování programů, nebo jejich částí a při vracení se do historie, abychom hned na první pohled pochopili, co jsme tím vlastně zamýšleli. Jelikož assembler umožňuje zápis ve více stylech, je dobré si zvolit pouze jeden a ten dodržovat. Také je dost tolerantní k psaní příkazů malými a velkými písmeny, ale naopak u názvů registrů striktně vyžaduje pouze velká písmena a u návěští je mu to jedno, ale nesmí se zaměnit, potom je v koncích.
Assembler umožňuje opravdu velké množství příkazů, které z počátku nebudeme potřebovat, ale v budoucnu nám mohou pomoci. Co je důležité s jakými soubory assembler pracuje a jak by měl vypadat zápis v jediném základním souboru s příponou asm. Do tohoto souboru můžeme importovat soubory (important Files) přilinkovávat hlavičkové soubory, knihovny a další. Nejdůležitější v této chvíli pro nás jsou soubory s příponou inc. V každém případě musíme použít #include “p16f15344.inc”, kde je deklarace všech registrů procesoru na srozumitelný jazyk. Například PORTA, který je na adrese H’000C’ má přiřazen název „PORTA“, takže si skutečně nemusíme pamatovat spoustu čísel a stačí nám pouze přilinkovat tento soubor.
Pro práci je také důležité, jak zápis programu v asm vypadá a jak je přehledný. Je to důležité hlavně když se k němu vracíme, abychom nemuseli bádat nad tím, jak jsme to vlastně tehdy mysleli. To nám ušetří nemálo času.
Přehledný zápis programu by měl obsahovat tyto části:
1. hlavičku, která by měla mít stále stejný obsah a získáme okamžitý přehled. Je to vlastně poznámka, která se neuplatní v překladu, to znamená, že každý řádek musí začínat středníkem a v editoru by měl být zobrazen zeleným písmem. Jednotlivé části lze pro přehlednost rozdělovat například linkou s rovnítkem (dvojitá čára), pomlčkou (jednoduchá čára, tečkou, hvězdičkou a podobně. Je to na vkusu každého ale vždy je nutný na začátku řádku středník, aby to byla poznámka.
2. zde je dobré zařadit hlášku: errorlevel -302 ; Zakázat hlaseni “Register. bank 0..”,
jinak nám překladač vysype spoustu modrých hlášek o možnosti špatného přepnutí paměťové banky a hodně nám to zkomplikuje při hledání opravdových chyb, které bychom náhodou měli v zápisu. Ty se po překladu objeví v okně Output a jsou také modré.
3. #include “p16f15376.inc” – je to soubor inc., který nám definuje typ procesoru a nastavení jeho konfigurace. Podrobně si toto probereme později, pro začátek stačí zkopírovat tuto část z jiného souboru.
4. na tomto místě je dobré mít deklarace proměnných a deklaraci portů (pinů)
5. zde už se umisťuje hlavní program
instrukce org 0x000 je adresa první instrukce, kde má program začátek a org 0x004 nám označí kam program skočí při přerušení.
6. Podprogramy
6. deklarace RAM a END který označuje konec programu.
Tím je v podstatě vyčerpán obsah základního programu v asm. Jen je nutno připomenout, že při zadávání parametrů projektu je třeba stanovit kódování. Po neblahých zkušenostech po importu i jen části zdrojového textu již používám jen UTF8 a zdroják píšu bez čárek a háčků. Jinak se odsuzujete k častým opravám a přepisováním prázdných čtverečků na platné znaky s háčky v poznámkách a to opravdu není programátorská práce. Pro popis s háčky a čárkami, který se dá využít jako dokumentace k projektu, je lepší z důvodu srozumitelnost a pozdější publikace psát třeba ve Wordu a v hlavičce souboru asm v kolonce Popis Word označit cestu k tomuto souboru. Ušetří se tím do budoucna mnoho času, až bude projektů více.
V editoru asm se píše zdrojový kód do sloupců oddělených tabulátorem.
V prvním sloupci je vždy návěstí (LAabels), v druhém začíná instrukce (Instructions nebo Macros), další jsou parametry (Operands)instrukce poslední sloupec je poznámka (Comments).
Jak budou sloupce nastaveny, záleží na každém, jak se mu to líbí, ale není to dobré měnit, jinak do budoucna dopadnete při kopírování obdobně jako při jiném kódování, tentokrát se vám však rozhází sloupce. Takže rada na konec, radši parametry tabulátorů editoru neupravovat, získá se tím větší přehlednost zápisu. Toť vše a už opravdu můžeme začít tu správnou programátorskou práci.
Vzorový program – SKOLA_PICII.asm ke kopii:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 |
;############################################################################### ; 1. HLAVIČKA Zdrojového souboru ;############################################################################### ; Project : První zdroják pro zkoušku překladu a ; naprogramování HEX souboru do mikroprocesoru ;------------------------------------------------------------------------------- ; File Name : Prvni_pokus ;V1.00 - zakladni verze verze ;------------------------------------------------------------------------------- ; DATE (Time) : 12.02.2021 17:48 ;------------------------------------------------------------------------------ ; Project Leader : VV Allcomp as. ;------------------------------------------------------------------------------- ; Autor : VC Allcomp.as. ©2020,2021 ;------------------------------------------------------------------------------- ; Original SW : PIC16F_SIP ;------------------------------------------------------------------------------- ; Original HW : EAGLE Project PIC16F_SIP ;------------------------------------------------------------------------------- ; Original doc : ;dOKUMENTACE k výrobkům PIC16F_SIP ;-------------------------------------------------------------------------------; ; ;############################################################################### ; 1. KONFIGURACE mikroprocesoru, nastavení pojistek ;############################################################################### ; PIC16F15324 Configuration Bit Settings ; Assembly source line config statements #include "p16f15324.inc" ; CONFIG1 ; __config 0xFFFF __CONFIG _CONFIG1, _FEXTOSC_ECH & _RSTOSC_EXT1X & _CLKOUTEN_OFF & _CSWEN_ON & _FCMEN_ON ; CONFIG2 ; __config 0xFD3F __CONFIG _CONFIG2, _MCLRE_ON & _PWRTE_OFF & _LPBOREN_OFF & _BOREN_OFF & _BORV_HI & _ZCD_OFF & _PPS1WAY_ON & _STVREN_ON ; CONFIG3 ; __config 0xFF9F __CONFIG _CONFIG3, _WDTCPS_WDTCPS_31 & _WDTE_OFF & _WDTCWS_WDTCWS_7 & _WDTCCS_SC ; CONFIG4 ; __config 0xFFFF __CONFIG _CONFIG4, _BBSIZE_BB512 & _BBEN_OFF & _SAFEN_OFF & _WRTAPP_OFF & _WRTB_OFF & _WRTC_OFF & _WRTSAF_OFF & _LVP_ON ; CONFIG5 ; __config 0xFFFF __CONFIG _CONFIG5, _CP_OFF ;############################################################################### ; 4. Deklarace promennych a konstant ;############################################################################### CAS_ZPOZDENI EQU .30 ;SEC ;=============================================================================== #define STB1_TM PORTB,5 ;Strobe TM #define CLK_TM PORTC,7 ;CLK TM #define DIO_TM PORTC,6 ;DIO TM #define TRIS_TM TRISC,6 ;TRIS DIO TM #define PULL_TM WPUC ,6 ;PullUp DIO TM ;............................................................. ;... Adresy nastavit podle zvolene banky ... ADRESS_TM EQU 0x5A0 ;startovaci adresa dat ADRREAD_TM EQU 0x5b0 ;adresa prij.dat ;............................................................. ;======= DEFINICE PORTU PIC16F15324 ========================================== #define PORTA_0 LATA ,0 ;PROG DTA #define PORTA_1 PORTA,1 ;PROG CLK #define PORTA_2 LATA ,2 ; #define PORTA_3 LATA ,3 ;PROG Reset #define PORTA_4 PORTA,4 ; #define PORTA_5 PORTA,5 ; ;----------------------------------------------- #define LED_G PORTC,0 ;Rezerva #define PORTC_1 PORTC,1 ;Rezerva #define PORTC_2 PORTC,2 ; #define PORTC_3 PORTC,3 ; #define PORTC_4 PORTC,4 ; #define PORTC_5 PORTC,5 ; ;===============================================================================; ; ;############################################################################### ; Nastavení počátku programu ;############################################################################### org 0x000 ; Addresa prvni instrukce nop ;pro krokovani goto START ;******************************************************************************* ; MAIN PROGRAM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ;******************************************************************************* START: ;-------- Inicializace PORTu str.180 ------------------ ; ;------------------------------------------------------------------------------- BANKSEL PORTA ;BANK 0 clrf PORTA ;Str.179 clrf PORTC ; BANKSEL LATA ; clrf LATA ; clrf LATC ; BANKSEL ANSELA ;Set 0 - digital I/O, 1 - analog clrf ANSELA ; ;.............................. clrf ANSELC ; ;.............................. BANKSEL TRISA ;Set 1 - INPUT, 0 - OUTPUT movlw B'000000' movwf TRISA ; movlw B'111110' movwf TRISC ;............................................ banksel WPUA movlw B'000000' movwf WPUA movlw B'111110' movwf WPUC ; --------- Oscilator module str. 116 ------------------------------------- banksel OSCCON1 clrf OSCCON1 ;str.114 clrf OSCCON2 banksel OSCEN ;str.117 movlw B'01000100' ; movwf OSCEN banksel OSCFRQ ;str.114 movlw B'00000010' ;4 MHz movwf OSCFRQ ; --------- WDT ----- str.154 ------------------------------------- banksel WDTCON0 ;BANK 16 movlw B'00011111' ;32 sec movwf WDTCON0 ; --------- TMR2 ----- str.291 ------------------------------------- banksel T2CLKCON ;str.310 movlw 0x01 movwf T2CLKCON ;Fosc/4 banksel T2CON ;Str.311 movlw B'10000000' ;on/0 /0 - movwf T2CON banksel PR2 ; movlw .65 ;doladeni hodin na 1ms movwf PR2 ; --------- TIMER1/3/5 MODULE ----------------- Page: 278 --------- ; --------- ANALOG-TO-DIGITAL CONVERTER (ADC)- Page:227 ----------- ;; --------- Ostatni ------------------------------------------------ banksel SEC movlw .0 movwf SEC movlw .10 movwf CLOCK_10ms movlw .10 movwf CLOCK_100ms movlw .100 movwf CLOCK_1ms clrf SWITCH clrf TIM ;=============================================================================== ; Formalni start programu ;=============================================================================== MXDISP: ;Zakladni smycka programu ;=============================================================================== banksel PORTA bcf CLOCK,C1ms banksel PIR4 ;BANK 14 btfss PIR4,TMR2IF ; goto MXDISP ;jump if not bcf PIR4,TMR2IF ;66us (15kHz) banksel CLOCK decfsz CLOCK_1us,F goto MXDISP movlw .15 ;15 pro 1 msec movwf CLOCK_1us bsf CLOCK,C1ms ; ====== VALID 1 ms =========== bcf CLOCK,C10ms decfsz CLOCK_1ms,F goto MXDISP movlw .10 movwf CLOCK_1ms bsf CLOCK,C10ms ; ====== VALID 10 ms ========== bcf CLOCK,C100ms decfsz CLOCK_10ms,F goto MXDISP call TEST_TIM0 movlw .10 movwf CLOCK_10ms bsf CLOCK,C100ms ; ====== VALID 100 ms ========= bcf CLOCK,C1s bcf CLOCK,C05s bcf LED_G ;1sec blikani MX_clk100 decfsz CLOCK_100ms,F goto MX_500 goto MX_1000 MX_500 movfw CLOCK_100ms andlw B'00000111' sublw .5 bnz MXDISP bsf CLOCK,C05s ;plati 500ms ; ====== VALID 500 ms ========= goto MXDISP MX_1000 banksel CLOCK_100ms movlw .10 movwf CLOCK_100ms bsf CLOCK,C1s ; ====== VALID 1 sec ========= bcf CLOCK,C1m call TEST_TIM1 CLRWDT ;reset watchdog WDE VALID1s ;--------------------------------- bsf LED_G ;1sec blikani incf SEC,F movlw .60 ;.60 ; subwf SEC,w bnz MXDISP clrf SEC bsf CLOCK,C1m ;platna minuta Val_1m ;VALID 1 min ---------- incf MIN,F goto MXDISP ;=============================================================================== ; FORMALNI KONEC PROGRAMU ;=============================================================================== ;############################################################################### ; PODPROGRAMY (Subroutines ;############################################################################### TIMER_0 ;TO tlacitek cca 0.5sec movlw .100 movwf TIMR_0 bsf TIM,0 return ;...................... TIMER_1 ;TO dobu behu motoru btfsc TIM,1 return clrf SWITCH movlw CAS_ZPOZDENI movwf TIMR_1 bsf TIM,1 return ;...................... TIMER_2 ;TO automaticke zavreni movlw .100 movwf TIMR_2 bsf TIM,2 return ;...................... TEST_TIM0 ;10ms btfss TIM,0 return decfsz TIMR_0,F return bcf TIM,0 return ;....................... TEST_TIM1 ;sec btfss TIM,1 goto TEST_TIM2 decfsz TIMR_1,F goto TEST_TIM2 bcf TIM,1 Test_T1 bcf TIM,6 ;priznak fotobunky call TIMER_2 ;automatické zavreni TEST_TIM2 ;sec btfss TIM,2 return decfsz TIMR_2,F return bcf TIM,2 return ;------------------------------------------------------------------------------- ;############################################################################### ; DEKLARACE PROMENNYCH ;############################################################################### ;definice registru CLOCK C1ms EQU 0x0 ;platna 1ms C10ms EQU 0x1 ;platna 10ms C100ms EQU 0x2 ;platna 100ms C1s EQU 0x3 ;platna 1s C1m EQU 0x4 ;platna 1 min C05s EQU 0x5 ;platna 0.5s ;=============================================================================== CBLOCK 0x20 ;BANK0 CLOCK CLOCK_1us CLOCK_1ms CLOCK_10ms CLOCK_100ms CLOCK_256 SEC MIN TIM TIMR_0 TIMR_1 TIMR_2 SWITCH ENDC ;MAX 0x6F + 16 reg. 0x70 az 0x7F ;--------------------------- 80 --------------------- CBLOCK 0x70 ;BANK0 CITAC ENDC ;############################################################################### END ; Konec programu ;############################################################################### |