;-------------------------------; ; Regulátor, VLHKOST, TEPLOTA ; ; Generátor impulsů ; ;-------------------------------; ;)S(2008.05 slovak@post.cz; ;-------------------------------; ;)S(2013.06 úprava: ;časování impulsního výstupu ;)S(2013.08 úprava: ;výstup pro ventilátor ;návrat na DIS1 ;-------------------------------- ; ;MENU: DIS1-DIS4 (TlP, TlM) ;--------1-------; ; 23.2°C 46.9% ;okamžitá teplota, vlhkost ;17:46:27 Po19/5 ;čas, datum ;--------2-------; ;Ref.teplota (do);referenční teplota (do/tr) dočasná/trvalá ; 19.5°C Hys00.5;hystereze (TlN přechod na položky časové změny) ;--------3-------; ;Ref.vlhkost ;referenční vlhkost ; 51.1% Hys01.0;hystereze ;--------4-------; ;imp.ZAP 1 sek;délka (log.1) impuls ZAP 1 až 255 sekund/minut ;imp.VYP 255 min;délka (log.0) impuls VYP 1 až 255 minut/hodin ;----------------; ; ;Časová změna referenční teploty (TlN zpět na Ref.teplotu) ;Od nastaveného času a vybraného dne, bude platit nová Ref.teplota. ;----------------; ;1. 04:30 1234567;1.položka ; 22.0°C *****--;čas, teplota, den 1=Po...7=Ne, */- aktivní/neaktivní den ;----------------; ;2. 05:30 1234567;2.položka ; 16.0°C *****--;(časová změna Ref.teploty každé pondělí až pátek) ;----------------; ;3. 14:00 1234567;3.položka ; 21.5°C *******;(časová změna Ref.teploty každý den) ;----------------; ;4. 21:00 1234567;4.položka ; 18.0°C *******; ;----------------; ;5. 06:30 1234567;5.položka ; 22.0°C -----**;(časová změna Ref.teploty každou sobotu a neděli) ;----------------; ;6. 22:30 1234567;6.položka ; 16.0°C -----**; ;----------------; ;7. 12:00 1234567;7.položka ; 21.5°C -------;(žádný aktivní den = nevyužitá položka) ;----------------; ;Pokud je nastavena trvalá Ref.teplota (tr), jsou všechny časové změny vyřazeny!!! ;Po nečinnosti tlačítek (30s) se vrátí MENU na DIS1 (to neplatí při nastavování, něco bliká). ; ;Tlačítka ;4. TlP pohyb v MENU vpřed, při nastavování plus. ;3. TlM pohyb v MENU vzad, při nastavování mínus. ;2. TlN přechod z Ref.teploty na časové změny (a zpět), při nastavování následný údaj. ;1. TlS zahájení/ukončení nastavování (pro nastavení času, podržet 4s). ; ;Výstupy ;RB,2 RT relé pro regulaci teploty. ;RA,0 RV relé pro regulaci vlhkosti. ;RA,1 RI relé impulsního generátoru. ;RA,3 RF relé pro ventilátor. ;RB,3 PO podsvícení displeje. ; ;připojení čidla SHT11 ;RB,0 DATA (PULLUP 10k) ;RB,1 CLK ; ;Krystal: 19660800Hz ; ;-------------------------------- LIST P=16F88, R=DEC ;Direktivy překladače include ;Definice názvů registrů ;Nastavení konfigurace procesoru: __CONFIG _CONFIG1,_CP_OFF & _CCP1_RB0 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_ON & _MCLR_OFF & _PWRTE_OFF & _WDT_ON & _HS_OSC __CONFIG _CONFIG2,_IESO_OFF & _FCMEN_OFF errorlevel 1, -306 cblock 0x20 MemSTATUS MemPCLATH A1,A2,A3 ;matematické B1,B2,B3 ; proměnné C1,C2,C3 ; a jiné funkce D1,D2,D3 ; X1,X2 ; FL ;flag,příznaky M1,M2,M3 ;mezisoučet KLVP ;port pro tlačítka KLVD ;dělič pro čtení tlačítek KLVO ;dělič pro opakování tlačítka BLIK ;dělič pro blikání displeje SEKD ;dělič pro 1Hz DATA0,DATA1 ;načtená dat MDT0,MDT1 ;minulá data teploty MDH0,MDH1 ;minulá data vlhkosti TC1,TC2 ;teplota °C (x10) HL1,HL2 ;vlhkost lin. % (x10) HK1,HK2 ;teplotní korekce vlhkosti % (x10) R1,R2,R3,R4 ;řád jedniček, desítek, stovek, tisíců, pro převod HEX/DEC TE ;desetiné tečky, 0=žádná tečka BR ;blikání řádu při nastavování DN ;dělič pro návrat na DIS1 ED ;dělič pro poruchu snímače MAXden ;max den podle měsíce Sek ;sekundy Min ;00 ;minuty Hod ;01 ;hodiny PoNe ;02 ;den v týdnu 0=Pondělí, 6=Neděle Den ;03 ;Den 1...31 Mes ;04 ;Měsíc 1...12 FEE ;05 ;uložené příznaky do EEPROM RT1 ;06 ;referenčí teplota RT2 ;07 ; HYST ;08 ;hystereze teplota RV1 ;09 ;referenční vlhkost RV2 ;0A ; HYSV ;0B ;hystereze vlhkost ;1.položka CAS1H ;0C ;hodiny CAS1M ;0D ;minuty RD1T ;0E ;dny RT11 ;0F ;ref.teplota RT12 ;10 ; ;2.položka CAS2H ;11 CAS2M ;12 RD2T ;13 RT21 ;14 RT22 ;15 ;3.položka CAS3H ;16 CAS3M ;17 RD3T ;18 RT31 ;19 RT32 ;1A ;4.položka CAS4H ;1B CAS4M ;1C RD4T ;1D RT41 ;1E RT42 ;1F ;5.položka CAS5H ;20 CAS5M ;21 RD5T ;22 RT51 ;23 RT52 ;24 ;6.položka CAS6H ;25 CAS6M ;26 RD6T ;27 RT61 ;28 RT62 ;29 ;7.položka CAS7H ;2A CAS7M ;2B RD7T ;2C RT71 ;2D RT72 ;2E endc cblock 0xA1 DPO ;dělič pro ZAP/VYP podsvícení PD60 ;předdělič VYP impulsu D60 ;dělič VYP impilsu DZAP ;30 ;doba ZAP impulsu DVYP ;31 ;doba VYP impulsu ;EEPROM adresa endc EEADRp EQU 0x7E ;pomocná EE adresa MemW EQU 0x7F ZS EQU 0xDF;B2 ;pro LCD, znak kroužku °C #define Stisk FL,0 ;minule stisknuto #define Znova FL,1 ;znova stisknuto #define Znam FL,2 ;1=záporná hodnota #define Azn FL,3 ;znaménko pro Mat. výpočty #define Bzn FL,4 ; #define ES FL,5 ;1=Error Senzor #define SG FL,6 ;1=STOP imp.generátor #define TL FL,7 ;1=stisknuto nějaké tlačítko, pro CDP #define TE1 TE,0 ;1=ZAP tečka (432.1) #define TE2 TE,1 ;1=ZAP tečka (43.21) #define TE3 TE,2 ;1=ZAP tečka (4.321) #define BR1 BR,0 ;blikání R1 #define BR2 BR,1 ;blikání R2 #define BR3 BR,2 ;blikání R3 #define BR4 BR,3 ;blikání R4 #define SDA PORTB,0 ;pro SHT11 #define SCK PORTB,1 ; #define E PORTA,2 ;pro LCD #define RS PORTA,4 ; #define PO PORTB,3 ;podsvícení #define RT PORTB,2 ;relé teplota #define RV PORTA,0 ;relé vlhkost #define RI PORTA,1 ;relé imp.generátor #define RF PORTA,3 ;relé fan, ventilátor #define DPT FEE,0 ;1=dočasně/0=trvale, doba platnosti ref.tep. #define ZAPSM FEE,1 ;0=sek/1=min imp.ZAP #define VYPMH FEE,2 ;0=min/1=hod imp.VYP #define TlP KLVP,7 ;0=ZAP horní tlačítko 4 #define TlM KLVP,6 ;0=ZAP #define TlN KLVP,5 ;0=ZAP #define TlS KLVP,4 ;0=ZAP dolní tlačítho 1 #define SC STATUS,C #define SZ STATUS,Z ;RAM banka 0 (00-7F) RAM0 macro BCF STATUS,RP0 endm ;RAM banka 1 (80-FF) RAM1 macro BSF STATUS,RP0 endm ;Program stránka 0 (000-7FF) PROG0 macro CLRF PCLATH endm ;Program stránka 1 (800-FFF) PROG1 macro BSF PCLATH,3 endm ;************************************************* ORG 0x2100 ;tabulka dat v EEPROM de 0x32, 0x15, 0x00, 0x13, 0x05, 0xF9, 0xD7, 0x00 de 0x05, 0x26, 0x02, 0x0A, 0x04, 0x1E, 0x1F, 0xDC de 0x00, 0x05, 0x1E, 0x1F, 0xA0, 0x00, 0x07, 0x00 de 0x7F, 0xD7, 0x00, 0x0A, 0x00, 0x7F, 0xB4, 0x00 de 0x11, 0x00, 0xFF, 0xDC, 0x00, 0x15, 0x1E, 0xFF de 0xA0, 0x00, 0x00, 0x00, 0x80, 0xD7, 0x00, 0xFF de 0x01, 0x01, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0x29, 0x53, 0x28, 0x30, 0x35, 0x2E, 0x32, 0x30 de 0x30, 0x38, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF ;************************************************* ;reset ORG 0 GOTO Init CALL 41 CALL 83 CALL 40 ;------------------------------- ;přerušení MOVWF MemW SWAPF STATUS,W CLRF STATUS MOVWF MemSTATUS MOVF PCLATH,W MOVWF MemPCLATH PROG1 GOTO INT ;-------------------------------- ;délka měsíce MaxDen MOVF Mes,W ADDWF PCL,F NOP RETLW 31 ;leden RETLW 28 ;únor RETLW 31 ;březen RETLW 30 ;duben RETLW 31 ;květen RETLW 30 ;červen RETLW 31 ;červenec RETLW 31 ;srpen RETLW 30 ;září RETLW 31 ;říjen RETLW 30 ;listopad RETLW 31 ;prosinec ;-------------------------------- ;den v týdnu (PoNe=0=pondělí, 6=neděle) ;písmeno pro znak1 DNY RLF PoNe,W ;*2(+1) ANDLW B'00001111' ;(1a1=1) ADDWF PCL,F RETLW "P" ;M RETLW "o" ;o RETLW "U" ;T RETLW "t" ;u RETLW "S" ;W RETLW "t" ;e RETLW "C" ;T RETLW "t" ;h RETLW "P" ;F RETLW "a" ;r RETLW "S" ;S RETLW "o" ;a RETLW "N" ;S RETLW "e" ;u ;-------------------------------- ;převod den, maska PDM MOVF PoNe,W ADDWF PCL,F RETLW B'00000001' RETLW B'00000010' RETLW B'00000100' RETLW B'00001000' RETLW B'00010000' RETLW B'00100000' RETLW B'01000000' ;================================ ;uložit minuty, hodiny, dny, měsíc UMHDM CLRF EEADRp MOVF Min,W CALL EWrite INCF EEADRp,F MOVF Hod,W CALL EWrite INCF EEADRp,F MOVF PoNe,W CALL EWrite INCF EEADRp,F MOVF Den,W CALL EWrite INCF EEADRp,F MOVF Mes,W CALL EWrite GOTO DIS1 ;-------------------------------- ;uložit ref. teplotu, hys, platnost URT MOVLW 0x05 MOVWF EEADRp MOVF FEE,W CALL EWrite INCF EEADRp,F MOVF RT1,W CALL EWrite INCF EEADRp,F MOVF RT2,W CALL EWrite INCF EEADRp,F MOVF HYST,W CALL EWrite GOTO DIS2 ;-------------------------------- ;uložit ref. vlhkost, hys URV MOVLW 0x09 MOVWF EEADRp MOVF RV1,W CALL EWrite INCF EEADRp,F MOVF RV2,W CALL EWrite INCF EEADRp,F MOVF HYSV,W CALL EWrite GOTO DIS3 ;EEEEEEEEEEEEEEEEEEEEEEEEEEEEEEEE ;čtení EEPROM, adresu do EEADRp, vrátí data v W ERead CLRWDT BSF STATUS,RP1 ;Banka2 BCF STATUS,RP0 ; MOVF EEADRp,W ;nastavení adresy MOVWF EEADR ;do ukazatele BSF STATUS,RP0 ;Banka3 BTFSC EECON1,WR ;čekání na dokončení GOTO $-1 ;předchozího zápisu BCF EECON1,EEPGD ;aktivace paměti;dat EEPROM BSF EECON1,RD ;zahájení čtení BCF STATUS,RP0 ;Banka2 MOVF EEDATA,W ;načtení dat z EEPROM BCF STATUS,RP1 ;Banka0 RETURN ;-------------------------------- ;zápis do EEPROM, adresu do EEADRp, data do W EWrite CLRWDT BSF STATUS,RP1 ;Banka3 BSF STATUS,RP0 ; BTFSC EECON1,WR ;čekání na dokončení GOTO $-1 ;předchozího zápisu BCF STATUS,RP0 ;Banka2 MOVWF EEDATA ;příprava dat MOVF EEADRp,W ;nastavení adresy MOVWF EEADR ;do ukazatele BSF STATUS,RP0 ;Banka3 BCF EECON1,EEPGD ;aktivace paměti dat EEPROM BSF EECON1,WREN ;povolení zápisu do EEPROM BCF INTCON,GIE ;zákaz přerušení MOVLW 0x55 ; MOVWF EECON2 ;zápis 55h MOVLW 0xAA ; MOVWF EECON2 ;zápis AAh BSF EECON1,WR ;zahájení zápisu BSF INTCON,GIE ;povolení přerušení BCF EECON1,WREN ;zákaz dalších zápisů BCF STATUS,RP0 ;Banka0 BCF STATUS,RP1 ; RETURN ;TTTTTTTTTTTTTTTTTTTTTTTTTTTTTTTT CALL NVT ;nejdřív měření, načíst vlhkost a teplotu KLV CLRWDT ;................................ ;test KLV + opakovaní, SZ=0=něco stisknuto, 1=žádné tlačítko MOVF KLVP,W XORLW B'11110000' ;(st.=0) BTFSS SZ ;=1?, nenulové? (žádné tlačítko) GOTO Neco ;něco stisknuto BCF Stisk ;=0 BSF Znova ;=1 RETURN Neco MOVLW 30 ;30 sekund MOVWF DN ; pro mávrat na DIS1 RAM1 CLRF DPO ;časovač pro podsvícení RAM0 BTFSC TlS ;stisknuto? CLRF BLIK ;NE, nulovat BSF SZ ;=1 BTFSS Znova ;=1? odčasováno? RETURN ;NE, jako žádné tl. ;zapnout podsvícení BTFSC PO ;podsvícení? GOTO $+5 ;zapnuté BSF PO ;ZAP BCF Znova ;=0 CLRF KLVO ;MAX čas (3,4s) RETURN MOVLW 7 ;kratší čas (0,1s) BTFSS Stisk ;minule stisknuto? MOVLW 75 ;delší čas (1s) MOVWF KLVO ;nastavit časovač pro opakování BTFSS TlS ;stisknuto? CLRF KLVO ;ANO, MAX čas (3,4s) BCF Znova ;=0 BSF Stisk ;=1 BCF SZ ;=0 RETURN ;------------------------------- ;čekat 15000us = 15ms C15000 MOVLW 0x61 MOVWF C2 MOVLW 0x03 GOTO CEK ;čekat 4100us = 4.1ms C4100 MOVLW 0x1A MOVWF C2 MOVLW 0x82 GOTO CEK ;čekat 1640us = 1.64ms C1640 MOVLW 0x0A MOVWF C2 MOVLW 0x99 GOTO CEK ;čekat 100us = 0.1ms C100 CLRF C2 MOVLW 0xA3 GOTO CEK ;čekat 40us = 0.04ms C40 CLRF C2 MOVLW 0x40 CEK MOVWF C1 ;čekací smyčka, čas určuje hodnota v C1,2 (XTAL=20MHz) CEKEJ DECFSZ C1,F GOTO CEKEJ MOVF C2,W BTFSC SZ RETURN CLRWDT DECF C2,F GOTO CEKEJ ;inicializace LCD po zapnutí INILCD CALL C15000 BCF RS BSF E MOVLW B'00001111' ANDWF PORTB,F MOVLW B'00110000' IORWF PORTB,F BCF E CALL C4100 BSF E BCF E CALL C100 BSF E BCF E CALL C40 MOVLW 0x20 CALL WRCMD MOVLW 0x28 CALL WRCMD MOVLW 0x08 CALL WRCMD MOVLW 0x0C CALL WRCMD MOVLW 0x06 GOTO WRCMD ;zápis dat WRDATA BSF RS ;RS=1=sběrnice pro data GOTO $+2 ;zápis příkazu WRCMD BCF RS ;RS=0=sběrnice pro příkazy MOVWF C3 ;schovat data BSF E ;Enable=1 ;horní půlbyt MOVLW B'00001111' ANDWF PORTB,F MOVF C3,W ANDLW B'11110000' IORWF PORTB,F BCF E ;E=0 BSF E ;E=1 ;dolní půlbyt MOVLW B'00001111' ANDWF PORTB,F SWAPF C3,W ;prohodit půlbyt ANDLW B'11110000' IORWF PORTB,F BCF E ;E=0 ;zjistit čas čekání BTFSC RS ;=0?,šlo o příkaz? GOTO C40 ;NE, šlo o data, čekat 40us MOVF C3,W ;test na příkazy: CLEAR a HOME ANDLW B'11001111' ; (1a1=1) BTFSC SZ ;Z=0=ostatní příkazy? GOTO C1640 ;NE, čekat 1.64ms GOTO C40 ;ANO, čekat 40us ;-------------------------------; ; Matematicke podprogramy ; ;-------------------------------; ;slovak@post.cz )S(12.2004; ;-------------------------------; ; A1,2,3 / B1,2,3 = C1,2,3 ;24Bit, pouze kladna cisla ;SZ=1=deleni nulou (B1,2,3=0) ;B se nezmeni, v A bude zbytek ;pouziva D1,2,3; X1 LOMENO24 ;test B na nulu; sZ=1=ANO ; MOVF B1,F ; BTFSC STATUS,Z ;nenulove? ; MOVF B2,F ; BTFSC STATUS,Z ;nenulove? ; MOVF B3,F ; BTFSC STATUS,Z ;nenulove? ; RETURN ;B1,2,3=0 ;priprava pro deleni LOM24 MOVF A1,W ;A do D MOVWF D1 ; MOVF A2,W ; MOVWF D2 ; MOVF A3,W ; MOVWF D3 ; CLRF A1 ;nulovat CLRF A2 ; CLRF A3 ; MOVLW 24 ;pocet bitu MOVWF X1 ; BCF STATUS,C ;SC=0 ;deleni LDalsi CALL x2M ;D,A posun vlevo, A-B=C BTFSS STATUS,C ;kladny vysledek? GOTO LZapor ;NE ;LKlad MOVWF A3 ;C do A MOVF C2,W ; MOVWF A2 ; MOVF C1,W ; MOVWF A1 ; LZapor DECFSZ X1,F ;-1=0? GOTO LDalsi ;jeste neni konec ;vysledek RLF D1,W ;posledni x2 MOVWF C1 ; a W do C RLF D2,W ; MOVWF C2 ; RLF D3,W ; MOVWF C3 ; BCF STATUS,Z ;SZ=0 RETURN ;-------------------------------- ; A1,2,3 / B1,2,3 = C1,2,3 ;23Bit; MSB=0=kladne, 1=zaporne ;SZ=1=deleni nulou (B1,2,3=0) ;B se nezmeni, v A bude zbytek ;pouziva D1,2,3; X1; FL,Azn,Bzn LOMENO ;test B na nulu; SZ=1=ANO ; MOVF B1,F ; BTFSC STATUS,Z ;nenulove? ; MOVF B2,F ; BTFSC STATUS,Z ;nenulove? ; MOVF B3,F ; BTFSC STATUS,Z ;nenulove? ; RETURN ;B1,2,3=0 ;test A=zaporne BCF Azn ;=0 BTFSC A3,7 ;MSB=1? CALL ZZA ;zmena znamenka A1,2,3 ;test B=zaporne BCF Bzn ;=0 BTFSC B3,7 ;MSB=0? CALL ZZB ;zmena znamenka B1,2,3 ;vypocet CALL LOM24 ;vratit B BTFSC Bzn ;=0? CALL ZZB ;znamenko C, test Azn = Bzn BTFSC Azn ;=0? GOTO $+4 ;NE BTFSC Bzn ;=0? GOTO $+3 ;NE GOTO $+3 ;Azn = Bzn = 0 BTFSS Bzn ;=1? CALL ZZC ;NE, zmena znamenka C1,2,3 BCF STATUS,Z ;SZ=0 RETURN ;................................ ; D1,2,3 A1,2,3 * 2 a Minus x2M RLF D1,F ;posuv vlevo RLF D2,F ; RLF D3,F ; RLF A1,F ; RLF A2,F ; RLF A3,F ; ;pokracuje MINUS ;-------------------------------- ; A1,2,3 - B1,2,3 = C1,2,3 ;SC=0=zaporny vysledek ;A,B se nezmeni MINUS MOVF B1,W ;W=B1 SUBWF A1,W ;A1-B1=W MOVWF C1 ;C1=W=vysledek1 CLRW ;W=0 BTFSS STATUS,C ;SUB kladne? MOVLW 1 ;W=1 ADDWF B2,W ;B2+W=W CLRF C3 ;C3=0 BTFSC STATUS,C ;ADD nepreteklo? BSF C3,0 ;C3=1 SUBWF A2,W ;A2-W=W MOVWF C2 ;C2=w=vysledek2 MOVF C3,W ;W=C3 BTFSS STATUS,C ;SUB kladne? MOVLW 1 ;W=1 ADDWF B3,W ;B3+W=W CLRF C3 ;C3=0 BTFSC STATUS,C ;ADD nepreteklo? BSF C3,0 ;C3=1 SUBWF A3,W ;A3-W=W BTFSC C3,0 ;C3=0? BCF STATUS,C ;SC=0 MOVWF C3 ;C3=W=vysledek3 RETURN ;-------------------------------- ; A1,2,3 + C1,2,3 = C1,2,3 ;A se nemeni PLUS MOVF A1,W ADDWF C1,F ;A1+C1=C1 BTFSS STATUS,C ;preteklo? GOTO $+4 INCFSZ C2,F ;+1=0? GOTO $+2 INCF C3,F ;+1 MOVF A2,W ADDWF C2,F ;A2+C2=C2 BTFSC STATUS,C ;nepreteklo? INCF C3,F ;+1 MOVF A3,W ADDWF C3,F ;A3+C3=C3 RETURN ;-------------------------------- ; A1,2,3 * B1,2,3 = C1,2,3 ;24Bit, pouze kladna cisla ;A, B se nezmeni ;pouziva D1,2,3; X1; X2 KRAT24 ;schovat A do D MOVF A1,W ;A do D MOVWF D1 ; MOVF A2,W ; MOVWF D2 ; MOVF A3,W ; MOVWF D3 ; ;priprava CLRF C1 ;nulovat CLRF C2 ; CLRF C3 ; BCF STATUS,C ; MOVLW 25 ;pocet bitu+1 MOVWF X1 ; ;hledat jednicku RRF B3,F ;posuv vpravo RRF B2,F ; RRF B1,F ; MOVF STATUS,W ;ulozit MOVWF X2 ; SC BTFSC STATUS,C ;=0? ;A+C=C CALL PLUS ;jen pri SC=1 ;A*2 RLF A1,F ;posuv vlevo RLF A2,F ; RLF A3,F ; MOVF X2,W ;obnovit MOVWF STATUS ; SC DECFSZ X1,F ;-1=0? GOTO $-13 ;NE ;obnovit A z D MOVF D1,W ;D do A MOVWF A1 ; MOVF D2,W ; MOVWF A2 ; MOVF D3,W ; MOVWF A3 ; RETURN ;-------------------------------- ; A1,2,3 * B1,2,3 = C1,2,3 ;23Bit, MSB=0=kladne, 1=zaporne ;A, B se nezmeni ;pouziva D1,2,3; X1; X2 KRAT ;test A=zaporne BCF Azn BTFSC A3,7 ;=0? CALL ZZA ;zmena znamenka A ;test B=zaporne BCF Bzn BTFSC B3,7 ;=0? CALL ZZB ;zmena znamenka B ;vypocet CALL KRAT24 ;A*B=C ;znamenko A BTFSC Azn ;=0? CALL ZZA ;znamenko B BTFSC Bzn ;=0? CALL ZZB ;znamenko C, test Azn = Bzn BTFSC Azn ;=0? GOTO $+4 ;NE BTFSC Bzn ;=0? GOTO $+3 ;NE GOTO $+3 ;Azn = Bzn = 0 BTFSS Bzn ;=1? CALL ZZC ;NE, zmena znamenka C1,2,3 BCF STATUS,Z ;SZ=0 RETURN ;-------------------------------- ;zmena znamenka A1,2,3 ZZA BSF Azn ;=1 COMF A1,F COMF A2,F COMF A3,F INCFSZ A1,F ;+1,=0? RETURN INCFSZ A2,F ;+1,=0? RETURN INCF A3,F ;+1 RETURN ;-------------------------------- ;zmena znamenka B1,2,3 ZZB BSF Bzn ;=1 COMF B1,F COMF B2,F COMF B3,F INCFSZ B1,F ;+1,=0? RETURN INCFSZ B2,F ;+1,=0? RETURN INCF B3,F ;+1 RETURN ;-------------------------------- ;zmena znamenka C1,2,3 ZZC COMF C1,F COMF C2,F COMF C3,F INCFSZ C1,F ;+1,=0? RETURN INCFSZ C2,F ;+1,=0? RETURN INCF C3,F ;+1 RETURN ;-------------------------------- ;test C=0; SZ=1=ANO ;TC0 MOVF C3,F ; BTFSC STATUS,Z ;nenulove? ; MOVF C2,F ; BTFSC STATUS,Z ;nenulove? ; MOVF C1,F ; RETURN ;-------------------------------- ;X +1 (MAX 120.0) XP1 MOVLW 0xFE SUBWF X2,W ;X2-FE BTFSC STATUS,C ;záporné? GOTO $+14 MOVLW 0x04 SUBWF X2,W ;X2-5 BTFSS STATUS,C ;kladné? GOTO $+10 MOVLW 0xB0 SUBWF X1,W ;X1-14 BTFSS STATUS,C ;kladné? GOTO $+6 MOVLW 0x70 ;X=-400=FE70 MOVWF X1 ; MOVLW 0xFE ; MOVWF X2 ; RETURN INCFSZ X1,F ;+1=0? RETURN INCF X2,F ;+1 RETURN ;-------------------------------- ;X -1 (MIN -40.0) XM1 ;MOVF X2,W SUBLW 0xFE ;FE-X2 BTFSS STATUS,Z ;nulové? GOTO $+5 MOVF X1,W SUBLW 0x70 ;70-X1 BTFSC STATUS,Z ;nenulové? GOTO $+7 MOVLW 1 SUBWF X1,F ;X1-1 BTFSC STATUS,C ;záporné? RETURN SUBWF X2,F ;X2-1 RETURN MOVLW 0xB0 ;X=1200=04B0 MOVWF X1 ; MOVLW 0x04 ; MOVWF X2 ; RETURN ;-------------------------------- ;X +1 (MAX 100.0) XP100 INCFSZ X1,F ;+1=0? GOTO $+2 ;NE INCF X2,F ;+1 MOVF X2,W SUBLW 0x02 ;02-X2 BTFSC SC ;záporné? RETURN ;NE MOVF X1,W SUBLW 0xE8 ;E8-X1 BTFSC SC ;záporné? RETURN CLRF X1 CLRF X2 RETURN ;-------------------------------- ;X -1 (MIN 0.0) XM100 MOVLW 1 SUBWF X1,F BTFSC SC ;záporné? RETURN ;NE MOVLW 1 SUBWF X2,F BTFSC SC ;záporné? RETURN ;NE MOVLW 0xE8 MOVWF X1 MOVLW 0X03 MOVWF X2 RETURN ;HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH ;převod HEX/DEC, vstup W, výstup R1,2 (pouze kladná čísla) HDW MOVWF A1 CLRF A2 CLRF B3 BCF Znam ;=0 GOTO HDPA1 ;-------------------------------- ;převod HEX/DEC, vstup A1,2, výstup R1,2,3,4 HEXDEC ;upravit záporné číslo BCF Znam ;=0 BTFSS A2,7 ;=1? GOTO PHD BSF Znam ;=1, záporné ;změna znaménka A1,2 COMF A2,F COMF A1,F INCFSZ A1,F ;+1=0? GOTO PHD INCF A2,F ;+1 ;převod PHD CLRF A3 MOVLW 0xE8 ;1000 do B MOVWF B1 ; MOVLW 0x03 ; MOVWF B2 ; CLRF B3 ; CALL LOMENO ;A/B=C, zbytek je v A MOVF C1,W ;uložit řád 1000 MOVWF R4 ; HDPA1 MOVLW 0x64 ;100 do B MOVWF B1 ; CLRF B2 ; CALL LOMENO ;A/B=C, zbytek je v A MOVF C1,W ;uložit řád 100 MOVWF R3 ; MOVLW 0x0A ;10 do B MOVWF B1 ; CLRF B2 ; CALL LOMENO ;A/B=C, zbytek je v A MOVF C1,W ;uložit řád 10 MOVWF R2 ; MOVF A1,W ;uložit řád 1 MOVWF R1 ; RETURN ;PPPPPPPPPPPPPPPPPPPPPPPPPPPPPPPP PRINT MOVLW 0x20 ;mezera MOVF TE,F BTFSC SZ CALL WRDATA ;TE=0, poslat mezeru PRINT4 MOVF R4,F ;řád 1000 [-4321] BTFSS SZ GOTO PZR4 ;nenulové BTFSC TE3 GOTO PZR4T ;TE3=ZAP MOVLW 0x20 ;mezera CALL WRDATA PRINT3 MOVF R3,F ;řád 100 [-321] BTFSS SZ GOTO PZR3 ;nenulové BTFSC TE2 GOTO PZR3T ;TE2=ZAP MOVLW 0x20 ;mezera CALL WRDATA PRINT2 MOVF R2,F ;řád 10 [-21] BTFSS SZ GOTO PZR2 ;nenulové BTFSC TE1 GOTO PZR2T ;TE1=ZAP MOVLW 0x20 ;mezera CALL WRDATA CALL POZN ;znaménko nebo mezera GOTO PR1 PZR2 CALL POZN ;znaménko nebo mezera PRR2 CALL POR2 ;řád 10 BTFSC TE1 GOTO PTR1 ;TE1=ZAP GOTO PR1 ;TE1=VYP PZR3 CALL POZN ;znaménko nebo mezera CALL POR3 ;řád 100 MOVF TE,F BTFSC SZ GOTO PR21 ;TE=0 PT2T BTFSS TE2 GOTO PR2T ;TE2=VYP GOTO PTR21 ;TE2=ZAP PZR4 CALL POZN ;znaménko nebo mezera PR4 CALL POR4 ;řád 1000 MOVF TE,F BTFSC SZ GOTO PR321 ;TE=0 BTFSC TE3 GOTO PTR321 ;TE3=ZAP CALL POR3 ;řád 100 GOTO PT2T PZR2T CALL POZN ;znaménko nebo mezera PR2T CALL POR2 ;řád 10 PTR1 CALL POTE ;poslat tečku GOTO PR1 PZR3T CALL POZN ;znaménko nebo mezera CALL POR3 ;řád 100 PTR21 CALL POTE ;poslat tečku GOTO PR21 PZR4T CALL POZN ;znaménko nebo mezera CALL POR4 ;řád 1000 PTR321 CALL POTE ;poslat tečku PR321 CALL POR3 ;řád 100 PR21 CALL POR2 ;řád 10 PR1 MOVF R1,W ;řád 1 PIOR IORLW B'000110000' GOTO WRDATA ;PRINT W + RETURN ;................................ ;poslat znaménko nebo mezeru POZN MOVLW 0x20 ;mezera BTFSC Znam ;záoprné číslo? (Znam=1) MOVLW 0x2D ;- GOTO WRDATA ;poslat tečku POTE MOVLW 0x2E ;. GOTO WRDATA ;poslat řád 1000 POR4 MOVF R4,W ;řád 1000 GOTO PIOR ;poslat řád 100 POR3 MOVF R3,W ;řád 100 GOTO PIOR ;poslat řád 10 POR2 MOVF R2,W ;řád 10 GOTO PIOR ;blikat při nastavování BLIKS BTFSC BLIK,4 MOVLW 0x20 ;mezera RETURN ;-------------------------------- PRINTS CALL WRCMD ;nastavit kurzor LCD MOVLW 0x20 ;mezera MOVF TE,F BTFSC SZ CALL WRDATA ;TE=0, poslat mezeru CALL POZN MOVF R4,W ;řád 1000 IORLW B'000110000' BTFSC BR4 ;=ZAP?, nastavovat R4? CALL BLIKS ;ANO, blikat R4 CALL WRDATA BTFSC TE3 ;=ZAP? CALL POTE ;ANO, poslat tečku PSR3 MOVF R3,W ;řád 100 IORLW B'000110000' BTFSC BR3 ;=ZAP?, nastavovat R3? CALL BLIKS ;ANO, blikat R3 CALL WRDATA BTFSC TE2 ;=ZAP? CALL POTE ;ANO, poslat tečku PSR2 MOVF R2,W ;řád 10 IORLW B'000110000' BTFSC BR2 ;=ZAP?, nastavovat R4? CALL BLIKS ;ANO, blikat R4 CALL WRDATA BTFSC TE1 ;=ZAP? CALL POTE ;ANO, poslat tečku MOVF R1,W ;řád 1 IORLW B'000110000' BTFSC BR1 ;=ZAP?, nastavovat R4? CALL BLIKS ;ANO, blikat R1 GOTO WRDATA ;NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN; ; Načíst vlhkost a teplotu ; ;NNNNNNNNNNNNNNNNNNNNNNNNNNNNNNN; NVT ;vlhkost CALL TS ;Transmission Start ;Address+Command pro vlhkost (000+00101) BCF SDA ;0 MOVLW 251 ;5xSDA, 5xSCK BSF SCK ; 1 BCF SCK ; 0 ADDLW 1 ;W+1 BTFSS SZ ;W=0? GOTO $-4 ;NE ;dokončit 101 BSF SDA ;1 BSF SCK ; 1 BCF SCK ; 0 BCF SDA ;0 BSF SCK ; 1 BCF SCK ; 0 BSF SDA ;1 BSF SCK ; 1 BCF SCK ; 0 ;ACK CALL INDP BSF SCK ; 1 BCF SCK ; 0 ;čekat na dokončení převodu CALL CDP BTFSS ES ;Error Senzor =1? BTFSC TL ;stisknuto tlačítko =1? RETURN ;ANO ;čtení dat, výstup: DATA0,1 CALL DATAREAD ;-------------------------------- ;diference MOVF DATA0,W MOVWF A1 MOVF DATA1,W MOVWF A2 MOVF MDH0,W MOVWF B1 MOVF MDH1,W MOVWF B2 CALL DIF ;A1,2=nová hodnota, B1,2=stará; A1,2=výsledek ;uložit data MOVF A1,W MOVWF MDH0 MOVWF DATA0 MOVWF B1 MOVF A2,W MOVWF MDH1 MOVWF DATA1 MOVWF B2 ;-------------------------------- ;výpočet lin. vlhkost ;A*B=C CLRF A3 CLRF B3 CALL KRAT24 ;A*B=C ;C/35714=M MOVF C1,W MOVWF A1 MOVF C2,W MOVWF A2 MOVF C3,W MOVWF A3 MOVLW 0x82 MOVWF B1 MOVLW 0x8B MOVWF B2 CALL LOMENO24 ;A/B=C MOVF C1,W MOVWF M1 MOVF C2,W MOVWF M2 ;DATAx243=C MOVF DATA0,W MOVWF A1 MOVF DATA1,W MOVWF A2 CLRF A3 MOVLW 0xF3 ;243=0x0000F3 MOVWF B1 CLRF B2 CALL KRAT24 ;A*B=C ;C/600=C MOVF C1,W MOVWF A1 MOVF C2,W MOVWF A2 MOVF C3,W MOVWF A3 MOVLW 0x58 ;600=0x000258 MOVWF B1 MOVLW 0x02 MOVWF B2 CLRF B3 CALL LOMENO24 ;A/B=C ;C-M=C MOVF C1,W MOVWF A1 MOVF C2,W MOVWF A2 CLRF A3 MOVF M1,W MOVWF B1 MOVF M2,W MOVWF B2 CLRF B3 CALL MINUS ;A-B=C ;C-40=C MOVF C1,W MOVWF A1 MOVF C2,W MOVWF A2 MOVF C3,W MOVWF A3 MOVLW 40 MOVWF B1 CLRF B2 CLRF B3 CALL MINUS ;A-B=C ;uložit vlhkost lin. MOVF C1,W MOVWF HL1 MOVF C2,W MOVWF HL2 ;-------------------------------- ;výpočet korekce vlhkosti ;TC-250=C MOVF TC1,W MOVWF A1 MOVF TC2,W MOVWF A2 MOVLW 0xFF MOVWF A3 BTFSS A2,7 ;záporné číslo? CLRF A3 ;NE MOVLW 250 MOVWF B1 CLRF B2 CLRF B3 CALL MINUS ;A-B=C ;Cx10=C MOVF C1,W MOVWF M1 MOVF C2,W MOVWF M2 MOVF C3,W MOVWF M3 MOVF DATA0,W MOVWF A1 MOVF DATA1,W MOVWF A2 CLRF A3 MOVLW 10 MOVWF B1 CALL KRAT24 ;A*B=C ;C/125=C MOVF C1,W MOVWF A1 MOVF C2,W MOVWF A2 MOVF C3,W MOVWF A3 MOVLW 125 MOVWF B1 CALL LOMENO24 ;A/B=C ;C+10=A MOVF C1,W ADDLW 10 ;C1+10=W MOVWF A1 BTFSC SC ;přenos? INCF C1,F ;ANO MOVF C2,W MOVWF A2 CLRF A3 ;AxM=M MOVF M1,W MOVWF B1 MOVF M2,W MOVWF B2 MOVF M3,W MOVWF B3 CALL KRAT ;A*B=C MOVF C1,W MOVWF M1 MOVF C2,W MOVWF M2 MOVF C3,W MOVWF M3 ;HLx1000=C MOVF HL1,W MOVWF A1 MOVF HL2,W MOVWF A2 MOVLW 0xFF MOVWF A3 BTFSS A2,7 ;záporné číslo? CLRF A3 ;NE MOVLW 0xE8 ;1000=0x03E8 MOVWF B1 MOVLW 0x03 MOVWF B2 CLRF B3 CALL KRAT ;A*B=C ;M+C=A MOVF M1,W ADDWF C1,W ;M1+C1=W MOVWF A1 BTFSS SC ;přenos? GOTO $+4 ;NE INCF C2,F BTFSC SZ ;přenos? INCF C3,F ;ANO MOVF M2,W ADDWF C2,W ;M2+C2=W MOVWF A2 BTFSC SC ;přenos? INCF C3,F ;ANO MOVF M3,W ADDWF C3,W ;M3+C3=W MOVWF A3 ;A/1000=C MOVLW 0xE8 ;1000=0x03E8 MOVWF B1 MOVLW 0x03 MOVWF B2 CALL LOMENO ;A/B=C ;uložit vlhkost s korekcí MOVF C1,W MOVWF HK1 MOVF C2,W MOVWF HK2 ;================================ ;teplota CALL TS ;Transmission Start ;Address+Command pro teplotu (000+00011) BCF SDA ;0 MOVLW 250 ;6xSDA, 6xSCK BSF SCK ; 1 BCF SCK ; 0 ADDLW 1 ;W+1 BTFSS SZ ;W=0? GOTO $-4 ;NE ;dokončit 11 BSF SDA ;1 BSF SCK ; 1 BCF SCK ; 0 BSF SDA ;1 BSF SCK ; 1 BCF SCK ; 0 ;ACK CALL INDP BSF SCK ; 1 BCF SCK ; 0 ;čekat na dokončení převodu CALL CDP BTFSS ES ;Error Senzor =1? BTFSC TL ;stisknuto tlačítko =1? RETURN ;ANO ;čtení dat, výstup: DATA0,1 CALL DATAREAD ;-------------------------------- ;diference MOVF DATA0,W MOVWF A1 MOVF DATA1,W MOVWF A2 MOVF MDT0,W MOVWF B1 MOVF MDT1,W MOVWF B2 CALL DIF ;A1,2=nová hodnota, B1,2=stará; A1,2=výsledek ;uložit data MOVF A1,W MOVWF MDT0 MOVF A2,W MOVWF MDT1 ;-------------------------------- ;výpočet teploty ;A/10=C MOVLW 10 MOVWF B1 CLRF B2 CLRF B3 CLRF A3 CALL LOMENO ;A/B=C ;A-400=C MOVF C1,W MOVWF A1 MOVF C2,W MOVWF A2 CLRF A3 MOVLW 0x90 ;400=0x0190 MOVWF B1 MOVLW 0x01 MOVWF B2 CLRF B3 CALL MINUS ;A-B=C ;uložit teplotu MOVF C1,W MOVWF TC1 MOVF C2,W MOVWF TC2 ;-------------------------------- PROG1 GOTO OV ;ovládání výstupů ;================================ ;čekat na dokončení převodu CDP MOVLW 150 ;2s (150/75) MOVWF ED ; BCF ES BCF TL BTFSC SDA ;=1? GOTO $+6 ;ANO CALL CDPTT BTFSS TL ;stisknuto tlačítko? BTFSC ES ;porucha senzoru? RETURN ;ANO, zrušit převod GOTO $-6 ;NE BTFSS SDA ;=0? RETURN ;ANO CALL CDPTT BTFSS TL ;stisknuto tlačítko? BTFSC ES ;porucha senzoru? RETURN ;ANO, zrušit převod GOTO $-6 ;NE ;test tlačítek CDPTT CLRWDT COMF KLVP,W ANDLW B'11110000' BTFSS SZ ;něco stisknuto? BSF TL ;ANO RETURN ;-------------------------------- ;čtení dat, výstup: DATA0,1 DATAREAD ;první bajt MOVLW 248 ;8xSCK (256-248) BSF SCK ; 1 BCF SC BTFSC SDA ;=1? BSF SC ;ANO, SC=1 RLF DATA1,F ;B+10 MOVF C1,W SUBLW 4 ;4-C1 BTFSC SC ;záporné? GOTO $+4 ;NE, A<=B+4 INCFSZ B1,F ;stará +1 GOTO $+2 ; INCF B2,F ; MOVF B1,W ;stará hodnota B do A MOVWF A1 ; MOVF B2,W ; MOVWF A2 ; RETURN ;-------------------------------- ;zobrazit teplotu a vlhkost ZTV MOVLW 0x80 CALL WRCMD BTFSS ES ;Error Senzor ? GOTO ZTEP ;NE MOVLW "P" CALL WRDATA MOVLW "O" CALL WRDATA MOVLW "R" CALL WRDATA MOVLW "U" CALL WRDATA MOVLW "C" CALL WRDATA MOVLW "H" CALL WRDATA MOVLW "A" CALL WRDATA ; MOVLW " " CALL PSP MOVLW "S" CALL WRDATA MOVLW "E" CALL WRDATA MOVLW "N" CALL WRDATA MOVLW "Z" CALL WRDATA MOVLW "O" CALL WRDATA MOVLW "R" CALL WRDATA MOVLW "U" CALL WRDATA MOVLW "!" CALL WRDATA GOTO RESS ;reset snímače ;-------------------------------- ;zobrazit teplotu ZTEP BSF TE1 MOVF TC1,W MOVWF A1 MOVF TC2,W MOVWF A2 CALL HEXDEC CALL PRINT MOVLW ZS CALL WRDATA MOVLW "C" CALL WRDATA ;zobrazit vlhkost s korekcí MOVF HK1,W MOVWF A1 MOVF HK2,W MOVWF A2 CALL HEXDEC CALL PRINT MOVLW "%" CALL WRDATA PSP MOVLW " " ;Print SPACE GOTO WRDATA ;-------------------------------- ;zobrazit hodiny ZHOD CLRF TE MOVLW 0xC0 CALL WRCMD MOVF Hod,W CALL HDW ;nezobrazovat nulu MOVF R2,F BTFSS SZ GOTO $+4 ; MOVLW " " CALL PSP CALL PR1 GOTO $+2 CALL PR21 MOVLW ":" GOTO WRDATA ;-------------------------------- ;zobrazit minuty ZMIN MOVF Min,W CALL HDW CALL PR21 MOVLW ":" GOTO WRDATA ;-------------------------------- ;zobrazit sekundy ZSEK MOVF Sek,W CALL HDW CALL PR21 ; MOVLW " " GOTO PSP ;-------------------------------- ;zobrazit den ZDEN BCF SC CALL $+2 BSF SC CALL DNY GOTO WRDATA ;-------------------------------- ;zobrazit datum ZDAT MOVF Den,W CALL HDW ;nezobrazovat nulu MOVF R2,F BTFSS SZ GOTO $+4 ; MOVLW " " CALL PSP CALL PR1 GOTO $+2 CALL PR21 MOVLW "/" GOTO WRDATA ;-------------------------------- ;zobrazit měsíc ZMES MOVF Mes,W CALL HDW ;nezobrazovat nulu MOVF R2,F BTFSS SZ GOTO PR21 CALL PR1 ; MOVLW " " GOTO PSP ;-------------------------------- ;zobrazit dočasně ZDOC MOVLW "d" CALL WRDATA MOVLW "o" GOTO WRDATA ;-------------------------------- ;zobrazit trvale ZTRV MOVLW "t" CALL WRDATA MOVLW "r" GOTO WRDATA ;-------------------------------- ;zobrazit ref.teplotu ZRT MOVLW 0xC0 CALL WRCMD MOVF RT1,W MOVWF A1 MOVF RT2,W MOVWF A2 CALL HEXDEC CALL PRINT MOVLW ZS CALL WRDATA MOVLW "C" CALL WRDATA ; MOVLW " " GOTO PSP ;-------------------------------- ;zobrazit ref.vlhkost ZRV MOVLW 0xC0 CALL WRCMD MOVF RV1,W MOVWF A1 MOVF RV2,W MOVWF A2 CALL HEXDEC CALL PRINT MOVLW "%" CALL WRDATA ; MOVLW " " GOTO PSP ;-------------------------------- ;načíst z EEPROM dobu ZAP a VYP RDZV MOVLW 0x30 MOVWF EEADRp CALL ERead RAM1 MOVWF DZAP RAM0 INCF EEADRp,F ;adresa+1 CALL ERead RAM1 MOVWF DVYP MOVLW 60 ;znovunaplnit MOVWF PD60 ; MOVWF D60 ; RAM0 RETURN ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIIII Init ;základní nastavení procesoru BSF STATUS,RP0 ;Banka1 CLRF INTCON CLRF PIE2 MOVLW B'11100000' ;PORTA, 0=výstup, 1=vstup MOVWF TRISA ; MOVLW B'00000001' ;PORTB, 0=výstup, 1=vstup MOVWF TRISB ;!!!to samé i do čtení klávesnice!!! MOVLW B'00000000' ;digi. vstupy MOVWF ANSEL ; MOVLW B'11100101' ;RA0=AN0, RA1=AN1, RA3=Vref+ ; MOVWF ADCON1 ;Configure A/D inputs MOVLW B'01000111' ;ZAP PULLUP, předdělič pro TMR0 1:256 MOVWF OPTION_REG ; MOVLW B'00000000' ;přerušení od (zatím nic) MOVWF PIE1 ; BCF STATUS,RP0 ;Banka0 ; MOVLW B'10000011' ; MOVWF ADCON0 ;AD časování, výběr AD vstupu, ZAP AD MOVLW B'00000000' MOVWF T1CON MOVLW B'00000101' ;předdělič 1:1 pro TMR1 (zatím nevyužito) MOVWF T1CON ; MOVLW B'00100000' ;přerušení od TMR0 MOVWF INTCON ;obnovení RAM z EEPROM 0x00-0x2E CLRF EEADRp ;počáteční adresa EEPROM MOVLW Min ;počáteční adresa RAM MOVWF FSR CALL ERead ;čtení MOVWF INDF ;zápis INCF EEADRp,F ;adresa+1 INCF FSR,F ;data+1 MOVF EEADRp,W SUBLW 0x2E ;poslední adresa EEPROM BTFSC SC ;záporné? GOTO $-7 ;NE ;iniciace LCD CALL INILCD MOVLW 0x01 ;smazat LCD CALL WRCMD ; ;zapnout přerušení (TMR0) BSF INTCON,GIE ;načíst z EEPROM dobu ZAP a VYP CALL RDZV ;první nastavení CLRF DN ;dělič pro návrat na displej 1 CLRF Sek CALL MaxDen MOVWF MAXden ;uložit BSF RI BCF SG BSF PO BCF RF ;reset senzoru CALL RESS ;================================ DIS1 CALL NVT ;načíst vlhkost a teplotu CLRF KLVO CALL ZTV ;zobrazit teplotu a vlhkost CALL ZHOD ;zobrazit hodiny CALL ZMIN ;zobrazit minuty CALL ZSEK ;zobrazit sekundy CALL ZDEN ;zobrazit den (Po...Ne) CALL ZDAT ;zobrazit datum CALL ZMES ;zobrazit měsíc ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO DIS1 ;NE BTFSS TlP ;stisknuto? GOTO DIS2 ;ANO BTFSS TlM ;stisknuto? GOTO DIS4 ;ANO BTFSC TlS ;stisknuto? GOTO DIS1 ;NE ;pauza pro S CLRWDT CALL ZHOD CALL ZMIN CALL ZSEK CALL ZDEN CALL ZDAT CALL ZMES BTFSC TlS ;stisknuto? GOTO DIS1 ;NE BTFSS Znova ;odčasováno? GOTO $-10 ;NE BCF Znova ;nulovat ;................................ ;Vložit Hodiny EHOD MOVLW 0xC0 CALL WRCMD ;blikat, Hod BSF BR1 BSF BR2 MOVF Hod,W CALL HDW CALL PSR2 MOVLW ":" CALL WRDATA CALL ZMIN CALL ZSEK CALL ZDEN CALL ZDAT CALL ZMES ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EHOD ;NE BTFSS TlP ;stisknuto? GOTO EHODP ;ANO BTFSS TlM ;stisknuto? GOTO EHODM ;ANO BTFSS TlS ;stisknuto? GOTO UMHDM ;DIS1 ;ANO GOTO EMIN ;Hod -1 EHODM MOVLW 1 SUBWF Hod,F ;Hod-1 BTFSC SC ;záporné? GOTO EHOD ;NE MOVLW 23 MOVWF Hod GOTO EHOD ;Hod +1 EHODP INCF Hod,F ;Hod+1 MOVF Hod,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF Hod ;NE;=0 GOTO EHOD ;................................ ;vložit Minuty EMIN CALL ZHOD ;blikat, Min MOVF Min,W CALL HDW CALL PSR2 MOVLW ":" CALL WRDATA CALL ZSEK CALL ZDEN CALL ZDAT CALL ZMES ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EMIN ;NE BTFSS TlP ;stisknuto? GOTO EMINP ;ANO BTFSS TlM ;stisknuto? GOTO EMINM ;ANO BTFSS TlS ;stisknuto? GOTO UMHDM ;DIS1 ;ANO GOTO ESEK ;Min -1 EMINM MOVLW 1 SUBWF Min,F ;Min-1 BTFSC SC ;záporné? GOTO EMIN ;NE MOVLW 59 MOVWF Min GOTO EMIN ;Min +1 EMINP INCF Min,F ;Min+1 MOVF Min,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF Min ;NE;=0 GOTO EMIN ;................................ ;vložit Sekundy ESEK CALL ZHOD CALL ZMIN ;blikat, Sek MOVF Sek,W CALL HDW CALL PSR2 ; MOVLW " " CALL PSP CALL ZDEN CALL ZDAT CALL ZMES ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO ESEK ;NE BTFSS TlP ;stisknuto? GOTO ESEKN ;ANO BTFSS TlM ;stisknuto? GOTO ESEKN ;ANO BTFSS TlS ;stisknuto? GOTO UMHDM ;DIS1 ;ANO GOTO EDEN ESEKN MOVLW 1 MOVWF TMR0 MOVLW 75 ;znovu MOVWF SEKD ; naplnit CLRF Sek GOTO ESEK ;................................ ;vložit den Po-Ne EDEN CALL ZHOD CALL ZMIN CALL ZSEK ;blikat, Den BTFSC BLIK,4 GOTO $+3 CALL ZDEN GOTO $+5 MOVLW 0x20 ;mezera CALL WRDATA MOVLW 0x20 ;mezera CALL WRDATA CALL ZDAT CALL ZMES ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EDEN ;NE BTFSS TlP ;stisknuto? GOTO EDENP ;ANO BTFSS TlM ;stisknuto? GOTO EDENM ;ANO BTFSS TlS ;stisknuto? GOTO UMHDM ;DIS1 ;ANO GOTO EDAT ;PONE-1 EDENM DECF PoNe,F ;-1? BTFSS PoNe,7 ;záporné GOTO EDEN ;NE MOVLW 6 MOVWF PoNe GOTO EDEN ;PoNe+1 EDENP INCF PoNe,F MOVF PoNe,W SUBLW 6 ;6-PoNe BTFSS SC ;C=1? kladné? CLRF PoNe ;=0 GOTO EDEN ;................................ ;vložit datum den EDAT CALL ZHOD CALL ZMIN CALL ZSEK CALL ZDEN ;blikat, Dat MOVF Den,W CALL HDW CALL PSR2 MOVLW "/" CALL WRDATA CALL ZMES ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EDAT ;NE BTFSS TlP ;stisknuto? GOTO EDATP ;ANO BTFSS TlM ;stisknuto? GOTO EDATM ;ANO BTFSS TlS ;stisknuto? GOTO UMHDM ;DIS1 ;ANO GOTO EMES ;Dny-1 EDATM DECFSZ Den,F ;-1=0? GOTO EDAT MOVF MAXden,W MOVWF Den GOTO EDAT ;Dny+1 EDATP INCF Den,F ;+1 MOVF Den,W SUBWF MAXden,W ;MAXden-Den BTFSC SC ;C=0? záporné? GOTO EDAT MOVLW 1 MOVWF Den GOTO EDAT ;................................ ;vložit měsíc EMES CALL ZHOD CALL ZMIN CALL ZSEK CALL ZDEN CALL ZDAT ;blikat, Mes MOVF Mes,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EMES ;NE BTFSS TlP ;stisknuto? GOTO EMESP ;ANO BTFSS TlM ;stisknuto? GOTO EMESM ;ANO BTFSS TlS ;stisknuto? GOTO UMHDM ;DIS1 ;ANO GOTO EHOD ;Měsíc-1 EMESM DECFSZ Mes,F ;-1=0? GOTO ZMAXD MOVLW 12 MOVWF Mes GOTO ZMAXD ;Měsíc+1 EMESP INCF Mes,F ;+1 MOVF Mes,W SUBLW 12 ;12-Mes BTFSC SC ;C=0? záporné? GOTO ZMAXD MOVLW 1 MOVWF Mes ZMAXD CALL MaxDen ;zjistit max. den v měsíci MOVWF MAXden ;uložit GOTO EMES ;-------------------------------- ;Ref.teplota DIS2 CLRF KLVO MOVLW 0x01 CALL WRCMD CALL C15000 MOVLW "R" CALL WRDATA MOVLW "e" CALL WRDATA MOVLW "f" CALL WRDATA MOVLW "." CALL WRDATA MOVLW "t" CALL WRDATA MOVLW "e" CALL WRDATA MOVLW "p" CALL WRDATA MOVLW "l" CALL WRDATA MOVLW "o" CALL WRDATA MOVLW "t" CALL WRDATA MOVLW "a" CALL WRDATA ; MOVLW " " CALL PSP MOVLW "(" CALL WRDATA BTFSC DPT ;=1? CALL ZDOC ;ANO BTFSS DPT ;=0? CALL ZTRV ;ANO MOVLW ")" CALL WRDATA BSF TE1 MOVLW 0xC9 CALL WRCMD MOVLW "H" CALL WRDATA MOVLW "y" CALL WRDATA MOVLW "s" CALL WRDATA CLRF BR MOVF HYST,W MOVWF A1 CLRF A2 CALL HEXDEC MOVLW 0xCC CALL PSR3 DIS21 MOVLW 0xC0 CALL WRCMD CALL ZRT MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření BTFSC SZ ;Z=0? neco stisknuto GOTO DIS21 ;NE BTFSS TlP ;stisknuto? GOTO DIS3 ;ANO BTFSS TlM ;stisknuto? GOTO DIS1 ;ANO BTFSC TlS ;stisknuto? GOTO DIS5 ;NE ;................................ ;vložit ref.teplotu ERT MOVLW B'00001111' MOVWF BR ERT2 MOVF RT1,W MOVWF A1 MOVF RT2,W MOVWF A2 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO ERT2 ;NE BTFSS TlP ;stisknuto? GOTO ERTP ;ANO BTFSS TlM ;stisknuto? GOTO ERTM ;ANO BTFSS TlS ;stisknuto? GOTO URT ;DIS2 ;ANO CALL ZRT GOTO EDT ;RT-1 ERTM MOVF RT1,W MOVWF X1 MOVF RT2,W MOVWF X2 CALL XM1 MOVF X1,W MOVWF RT1 MOVF X2,W MOVWF RT2 GOTO ERT2 ;RT+1 ERTP MOVF RT1,W MOVWF X1 MOVF RT2,W MOVWF X2 CALL XP1 MOVF X1,W MOVWF RT1 MOVF X2,W MOVWF RT2 GOTO ERT2 ;................................ ;vložit dočasně/trvale teplotu EDT MOVLW 0x8D CALL WRCMD BTFSC BLIK,4 GOTO $+6 BTFSC DPT ;=1? CALL ZDOC ;ANO BTFSS DPT ;=0? CALL ZTRV ;ANO GOTO $+3 ; MOVLW " " CALL PSP ; MOVLW " " CALL PSP ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EDT ;NE BTFSS TlP ;stisknuto? GOTO EDTT ;ANO BTFSS TlM ;stisknuto? GOTO EDTT ;ANO BTFSS TlS ;stisknuto? GOTO URT ;DIS2 ;ANO MOVLW 0x8D CALL WRCMD BTFSC DPT ;=1? CALL ZDOC ;ANO BTFSS DPT ;=0? CALL ZTRV ;ANO GOTO EHYST EDTT BTFSS DPT GOTO $+3 BCF DPT GOTO EDT BSF DPT GOTO EDT ;................................ ;vložit hysereze teplota EHYST MOVLW B'00000111' MOVWF BR EHYST2 MOVLW 0xCC CALL WRCMD MOVF HYST,W MOVWF A1 CLRF A2 CALL HEXDEC CALL PSR3 ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EHYST2 ;NE BTFSS TlP ;stisknuto? GOTO EHTP ;ANO BTFSS TlM ;stisknuto? GOTO EHTM ;ANO BTFSS TlS ;stisknuto? GOTO URT ;DIS2 ;ANO MOVLW 0xCC CALL WRCMD MOVF HYST,W MOVWF A1 CLRF A2 CALL HEXDEC CALL PSR3 GOTO ERT ;HYST-1 EHTM DECF HYST,F ;-1 GOTO EHYST2 ;HYST+1 EHTP INCF HYST,F ;+1 GOTO EHYST2 ;-------------------------------- ;Ref.vlhkost DIS3 CLRF KLVO MOVLW 0x01 CALL WRCMD CALL C15000 MOVLW "R" CALL WRDATA MOVLW "e" CALL WRDATA MOVLW "f" CALL WRDATA MOVLW "." CALL WRDATA MOVLW "v" CALL WRDATA MOVLW "l" CALL WRDATA MOVLW "h" CALL WRDATA MOVLW "k" CALL WRDATA MOVLW "o" CALL WRDATA MOVLW "s" CALL WRDATA MOVLW "t" CALL WRDATA BSF TE1 CALL ZRV ; MOVLW " " CALL PSP MOVLW "H" CALL WRDATA MOVLW "y" CALL WRDATA MOVLW "s" CALL WRDATA CLRF BR MOVF HYSV,W MOVWF A1 CLRF A2 CALL HEXDEC MOVLW 0xCC CALL PSR3 DIS31 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření BTFSC SZ ;Z=0? neco stisknuto GOTO DIS31 ;NE BTFSS TlP ;stisknuto? GOTO DIS4 ;ANO BTFSS TlM ;stisknuto? GOTO DIS2 ;ANO BTFSC TlS ;stisknuto? GOTO DIS3 ;NE ;................................ ;vložit ref.vlhkost ERV MOVLW B'00001111' MOVWF BR ERV2 MOVF RV1,W MOVWF A1 MOVF RV2,W MOVWF A2 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO ERV2 ;NE BTFSS TlP ;stisknuto? GOTO ERVP ;ANO BTFSS TlM ;stisknuto? GOTO ERVM ;ANO BTFSS TlS ;stisknuto? GOTO URV ;DIS3 ;ANO CALL ZRV GOTO EHYSV ;RV-1 ERVM MOVF RV1,W MOVWF X1 MOVF RV2,W MOVWF X2 CALL XM100 MOVF X1,W MOVWF RV1 MOVF X2,W MOVWF RV2 GOTO ERV2 ;RV+1 ERVP MOVF RV1,W MOVWF X1 MOVF RV2,W MOVWF X2 CALL XP100 MOVF X1,W MOVWF RV1 MOVF X2,W MOVWF RV2 GOTO ERV2 ;............................... ;vložit hyserezi vlhkost EHYSV MOVLW B'00000111' MOVWF BR EHYSV2 MOVLW 0xCC CALL WRCMD MOVF HYSV,W MOVWF A1 CLRF A2 CALL HEXDEC CALL PSR3 ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EHYSV2 ;NE BTFSS TlP ;stisknuto? GOTO EHVP ;ANO BTFSS TlM ;stisknuto? GOTO EHVM ;ANO BTFSS TlS ;stisknuto? GOTO URV ;DIS3 ;ANO MOVLW 0xCC CALL WRCMD MOVF HYSV,W MOVWF A1 CLRF A2 CALL HEXDEC CALL PSR3 GOTO ERV ;HYSV-1 EHVM DECF HYSV,F ;-1 GOTO EHYSV2 ;HYSV+1 EHVP INCF HYSV,F ;+1 GOTO EHYSV2 ;================================ ;zobrazit horní řádek ref.teploty ZHR MOVLW 0x80 CALL WRCMD MOVF A1,W CALL WRDATA MOVLW "." CALL WRDATA ; MOVLW " " CALL PSP MOVF M1,W CALL HDW CALL PR21 MOVLW ":" CALL WRDATA MOVF M2,W CALL HDW CALL PR21 ; MOVLW " " CALL PSP MOVLW "1" MOVWF M1 MOVF M1,W CALL WRDATA INCF M1,F MOVF M1,W SUBLW "7" BTFSC SC GOTO $-6 RETURN ;-------------------------------- ;zobrazit dolní řádek ref.teploty ZDR MOVLW 0xC0 CALL WRCMD CALL HEXDEC MOVLW B'00000001' MOVWF TE CALL PRINT MOVLW ZS CALL WRDATA MOVLW "C" CALL WRDATA ; MOVLW " " CALL PSP MOVLW 7 MOVWF M2 MOVLW "-" RRF M1,F BTFSC SC MOVLW "*" CALL WRDATA DECFSZ M2,F GOTO $-6 RETURN ;-------------------------------- ;impuls generátor DIS4 CLRF KLVO CALL RDZV MOVLW 0x80 CALL WRCMD MOVLW "i" CALL WRDATA MOVLW "m" CALL WRDATA MOVLW "p" CALL WRDATA MOVLW "." CALL WRDATA MOVLW "Z" CALL WRDATA MOVLW "A" CALL WRDATA MOVLW "P" CALL WRDATA ; MOVLW " " CALL PSP CLRF TE MOVLW 0x30 MOVWF EEADRp CALL ERead MOVWF A1 CLRF A2 CALL HEXDEC CALL PRINT3 ; MOVLW " " CALL PSP BTFSC ZAPSM ;=0? GOTO $+3 ;NE CALL ZNSEK GOTO $+2 CALL ZNMIN MOVLW 0xC0 CALL WRCMD MOVLW "i" CALL WRDATA MOVLW "m" CALL WRDATA MOVLW "p" CALL WRDATA MOVLW "." CALL WRDATA MOVLW "V" CALL WRDATA MOVLW "Y" CALL WRDATA MOVLW "P" CALL WRDATA ; MOVLW " " CALL PSP MOVLW 0x31 MOVWF EEADRp CALL ERead MOVWF A1 CLRF A2 CALL HEXDEC CALL PRINT3 MOVLW 0xCC CALL WRCMD ; MOVLW " " CALL PSP BTFSC VYPMH ;=0? GOTO $+3 ;NE CALL ZNMIN GOTO $+2 CALL ZNHOD DIS41 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření BTFSC SZ ;Z=0? neco stisknuto GOTO DIS41 ;NE BTFSS TlP ;stisknuto? GOTO DIS1 ;ANO BTFSS TlM ;stisknuto? GOTO DIS3 ;ANO BTFSC TlS ;stisknuto? GOTO DIS41 ;NE ;................................ ;vložit dobu ZAP EZAP BSF SG ;STOP generátor CALL RDZV MOVLW B'00001111' MOVWF BR EZAP2 RAM1 MOVF DZAP,W RAM0 MOVWF A1 CALL HDW MOVLW 0x89 CALL WRCMD CALL PSR3 ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EZAP2 ;NE BTFSS TlP ;stisknuto? GOTO EZAPP ;ANO BTFSS TlM ;stisknuto? GOTO EZAPM ;ANO BTFSS TlS ;stisknuto? GOTO DIS4E ;ANO MOVLW 0x88 CALL WRCMD RAM1 MOVF DZAP,W RAM0 MOVWF A1 CLRF A2 CALL HEXDEC CALL PRINT3 GOTO EZAPSM ;DZAP-1 EZAPM RAM1 DECFSZ DZAP,F ;-1=0? GOTO DZAPS1 ;NE MOVLW 255 DZAPS MOVWF DZAP DZAPS1 RAM0 GOTO EZAP2 ;DZAP+1 EZAPP RAM1 INCFSZ DZAP,F ;+1=0? GOTO DZAPS1 ;NE MOVLW 1 GOTO DZAPS ;................................ ;vložit sek/min EZAPSM MOVLW 0x8D CALL WRCMD BTFSC BLIK,4 GOTO $+6 BTFSC ZAPSM ;=1? CALL ZNMIN ;ANO BTFSS ZAPSM ;=0? CALL ZNSEK ;ANO GOTO $+4 ; MOVLW " " CALL PSP ; MOVLW " " CALL PSP ; MOVLW " " CALL PSP ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EZAPSM ;NE BTFSS TlP ;stisknuto? GOTO EZAPSM1 ;ANO BTFSS TlM ;stisknuto? GOTO EZAPSM1 ;ANO BTFSS TlS ;stisknuto? GOTO DIS4E ;ANO MOVLW 0x8D CALL WRCMD BTFSC ZAPSM ;=1? CALL ZNMIN ;ANO BTFSS ZAPSM ;=0? CALL ZNSEK ;ANO GOTO EVYP EZAPSM1 BTFSS ZAPSM GOTO $+3 BCF ZAPSM GOTO EZAPSM BSF ZAPSM GOTO EZAPSM ;................................ ;vložit dobu VYP EVYP MOVLW B'00001111' MOVWF BR EVYP2 RAM1 MOVF DVYP,W RAM0 MOVWF A1 CALL HDW MOVLW 0xC9 CALL WRCMD CALL PSR3 ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EVYP2 ;NE BTFSS TlP ;stisknuto? GOTO EVYPP ;ANO BTFSS TlM ;stisknuto? GOTO EVYPM ;ANO BTFSS TlS ;stisknuto? GOTO DIS4E ;ANO MOVLW 0xC8 CALL WRCMD RAM1 MOVF DVYP,W RAM0 MOVWF A1 CLRF A2 CALL HEXDEC CALL PRINT3 GOTO EVYPSM ;DVYP-1 EVYPM RAM1 DECFSZ DVYP,F ;-1=0? GOTO DVYPS1 ;NE MOVLW 255 DVYPS MOVWF DVYP DVYPS1 RAM0 GOTO EVYP2 ;DVYP+1 EVYPP RAM1 INCFSZ DVYP,F ;+1=0? GOTO DVYPS1 ;NE MOVLW 1 GOTO DVYPS ;................................ ;vložit sek/min EVYPSM MOVLW 0xCD CALL WRCMD BTFSC BLIK,4 GOTO $+6 BTFSC VYPMH ;=1? CALL ZNHOD ;ANO BTFSS VYPMH ;=0? CALL ZNMIN ;ANO GOTO $+4 ; MOVLW " " CALL PSP ; MOVLW " " CALL PSP ; MOVLW " " CALL PSP ;tlačítka CALL KLV ;čtení klávesnice BTFSC SZ ;Z=0? neco stisknuto GOTO EVYPSM ;NE BTFSS TlP ;stisknuto? GOTO EVYPSM1 ;ANO BTFSS TlM ;stisknuto? GOTO EVYPSM1 ;ANO BTFSS TlS ;stisknuto? GOTO DIS4E ;ANO MOVLW 0xCD CALL WRCMD BTFSC VYPMH ;=1? CALL ZNHOD ;ANO BTFSS VYPMH ;=0? CALL ZNMIN ;ANO GOTO EZAP2 EVYPSM1 BTFSS VYPMH GOTO $+3 BCF VYPMH GOTO EVYPSM BSF VYPMH GOTO EVYPSM ;-------------------------------- ;zobrazit nastavení sekund ZNSEK MOVLW "s" CALL WRDATA MOVLW "e" CALL WRDATA MOVLW "k" GOTO WRDATA ;-------------------------------- ;zobrazit nastavení minut ZNMIN MOVLW "m" CALL WRDATA MOVLW "i" CALL WRDATA MOVLW "n" GOTO WRDATA ;-------------------------------- ;zobrazit nastavení hodin ZNHOD MOVLW "h" CALL WRDATA MOVLW "o" CALL WRDATA MOVLW "d" GOTO WRDATA ;-------------------------------- DIS4E PROG1 GOTO IGEE ;-------------------------------- DIS5 PROG1 GOTO TEP1 ;///////////////////////////////; ORG 0x800 ;program pokračuje na stránce 1 ;///////////////////////////////; DIS20 PROG0 GOTO DIS2 ;-------------------------------- ;uložit imp.generátor do EEPROM IGEE MOVLW 0x5 MOVWF EEADRp MOVF FEE,W PROG0 CALL EWrite MOVLW 0x31 MOVWF EEADRp RAM1 MOVF DVYP,W RAM0 CALL EWrite DECF EEADRp,F RAM1 MOVF DZAP,W RAM0 CALL EWrite MOVLW 60 RAM1 MOVWF PD60 MOVWF D60 RAM0 BSF RI BCF SG GOTO DIS4 ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII; ; identifikace přerušení ; ;IIIIIIIIIIIIIIIIIIIIIIIIIIIIIII; INT ; BTFSC INTCON,TMR0IF ;od TMR0? ; GOTO ITMR0 ;ANO ; BTFSS PIR1,TMR1IF ;od TMR1? ; GOTO EINT ;NE ;================================ ;přerušení od přetečení TMR1 ; BCF PIR1,TMR1IF ;VYP příznak ; ;nevyužito ; GOTO EINT ;================================ ;přerušení od časovače TMR0 ITMR0 BCF INTCON,TMR0IF ;VYP příznak ;75Hz (krystal 19.6608MHz) ;-------------------------------- ;STOP čtení klávesnice BTFSS E ;E=1?, sběrnici používá LCD ;dělič pro klávesnici 75/5=15Hz DECFSZ KLVD,F ;-1=0? GOTO EKLV MOVLW 5 ;znovu MOVWF KLVD ; naplnit ; BSF PS ;první start=1=povolit PR ;čtení klávesnice BSF STATUS,RP0 ;Banka1 MOVLW B'11110000' ;1=vstup, 0=výstup IORWF TRISB,F ;(0a0=0) BCF STATUS,RP0 ;Banka0 MOVF PORTB,W ;čtení MOVF PORTB,W ;čtení MOVF PORTB,W ;čtení MOVF PORTB,W ;čtení MOVF PORTB,W ;čtení MOVF PORTB,W ;čtení MOVF PORTB,W ;čtení ANDLW B'11110000' ;(1a1=1) MOVWF KLVP ;uložit BSF STATUS,RP0 ;Banka1 MOVLW B'00001111' ;PORTB, 0=výstup, 1=vstup ANDWF TRISB,F ;(1a1=1) BCF STATUS,RP0 ;Banka0 EKLV ;-------------------------------- ;dělič pro blikání displeje INCF BLIK,F ;+1 ;-------------------------------- ;dělič pro Error Senzor MOVF ED,F BTFSS SZ ;ED=0? DECFSZ ED,F ;NE, -1=0? GOTO $+2 ;ANO BSF ES ;=1 ;-------------------------------- ;dělič pro opakování KLV DECFSZ KLVO,F ;-1=0? GOTO $+2 ;ANO BSF Znova ;=1 ;-------------------------------- ;dělič 75/75=1Hz DECFSZ SEKD,F ;-1=0? GOTO EINT ;NE MOVLW 75 ;znovu MOVWF SEKD ; naplnit ;SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS; ; 1Hz, SEKUNDA ; ;SSSSSSSSSSSSSSSSSSSSSSSSSSSSSSS; ;dělič pro podsvícení RAM1 INCF DPO,F ;+1 RAM0 BTFSC SZ BCF PO ;VYP podsvícení (po 256sek) ;-------------------------------- ;dělič pro návrat na DIS1 MOVF DN,F BTFSS SZ DECF DN,F ;-------------------------------- BTFSS SG ;1=STOP generátor? CALL IG ;imp.generátor PROG1 ;-------------------------------- ;sekunda+1 INCF Sek,F ;+1 MOVF Sek,W SUBLW 59 ;59-Sek BTFSC SC ;C=0? záporné? GOTO EINT ;NE CLRF Sek ;=0 ;minuta+1 INCF Min,F ;+1 MOVF Min,W SUBLW 59 ;59-Min BTFSC SC ;C=0? záporné? GOTO MiEE ;NE CLRF Min ;=0 ;hodina+1 INCF Hod,F ;+1 MOVF Hod,W SUBLW 23 ;23-Hod BTFSC SC ;C=0? záporné? GOTO HoEE CLRF Hod ;ANO;=0 ;dny v týdnu+1 INCF PoNe,F ;+1 MOVF PoNe,W SUBLW 6 ;6-PoNe BTFSS SC ;C=1? kladné? CLRF PoNe ;NE;=0 ;dny+1 INCF Den,F ;+1 MOVF Den,W SUBWF MAXden,W ;MAXden-Den BTFSC SC ;C=1?; záporné? GOTO DnEE MOVLW 1 ;ANO MOVWF Den ;=1 ;měsíc+1 INCF Mes,F ;+1 MOVF Mes,W SUBLW 12 ;12-Měsíc BTFSC SC ;C=0?; záporné? GOTO $+3 ;NE MOVLW 1 ;ANO MOVWF Mes ;=1 PROG0 CALL MaxDen ;zjistit max. den v měsíci PROG1 MOVWF MAXden ;uložit ;................................ ;uložit měsíc do EEPROM MeEE MOVLW 0x04 MOVWF EEADRp ;adresa MOVF Mes,W ;data CALL EWR ;zápis ;uložit dny do EEPROM DnEE MOVLW 0x02 MOVWF EEADRp ;adresa MOVF PoNe,W ;data CALL EWR ;zápis INCF EEADRp,F MOVF Den,W ;data CALL EWR ;zápis ;uložit hodiny do EEPROM HoEE MOVLW 0x01 MOVWF EEADRp ;adresa MOVF Hod,W ;data CALL EWR ;zápis ;uložit minuty do EEPROM MiEE CLRF EEADRp ;adresa MOVF Min,W ;data CALL EWR ;zápis ;-------------------------------- ;doba platnosti ref.teploty (1=dočasná, 0=trvalá) BTFSS DPT ;=1? GOTO EINT PROG0 CALL PDM PROG1 CALL T1RT ;test časů ;-------------------------------- ;konec přerušení EINT MOVF MemPCLATH,W MOVWF PCLATH SWAPF MemSTATUS,W MOVWF STATUS SWAPF MemW,F SWAPF MemW,W RETFIE ;GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG; ; imp.generátor ; ;GGGGGGGGGGGGGGGGGGGGGGGGGGGGGGG; IG BTFSS RI ;výstup=1? GOTO IGVYP ;NE ;................................ ;ZAPSM BTFSS ZAPSM ;=1=min? GOTO $+4 ;NE ;min ;ANO RAM1 DECFSZ D60,F ;-1=0? GOTO IGRET ;NE ;doba ZAP RAM1 DECFSZ DZAP,F ;-1=0? GOTO ZD60 ;NE RAM0 BCF RI ;výstup=0 ;obnovit DZAP z EEPROM PROG0 GOTO RDZV ;znovunaplnit D60 ZD60 MOVLW 60 MOVWF D60 ;znovunaplnit PD60 ZPD60 MOVLW 60 MOVWF PD60 IGRET RAM0 RETURN ;................................ ;VYPMH IGVYP RAM1 DECFSZ PD60,F ;-1=0? GOTO IGRET ;NE RAM0 BTFSS VYPMH ;=1=hod? GOTO $+4 ;NE ;hod RAM1 DECFSZ D60,F ;-1=0? GOTO ZPD60 ;NE ;doba VYP RAM1 DECFSZ DVYP,F ;-1=0? GOTO ZD60 ;NE RAM0 BSF RI ;výstup=1 ;obnovit DVYP z EEPROM PROG0 GOTO RDZV ;================================ ;zápis do EEPROM (pouze pro zápis v přerušení) EWR CLRWDT BSF STATUS,RP1 ;Banka3 BSF STATUS,RP0 ; BTFSC EECON1,WR ;čekání na dokončení GOTO $-1 ;předchozího zápisu BCF STATUS,RP0 ;Banka2 MOVWF EEDATA ;příprava dat MOVF EEADRp,W ;nastavení adresy MOVWF EEADR ;do ukazatele BSF STATUS,RP0 ;Banka3 BCF EECON1,EEPGD ;aktivace paměti dat EEPROM BSF EECON1,WREN ;povolení zápisu do EEPROM MOVLW 0x55 ; MOVWF EECON2 ;zápis 55h MOVLW 0xAA ; MOVWF EECON2 ;zápis AAh BSF EECON1,WR ;zahájení zápisu BCF EECON1,WREN ;zákaz dalších zápisů BCF STATUS,RP0 ;Banka0 BCF STATUS,RP1 ; RETURN ;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC; ; test časů ; ;CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC; ;test 1.čas T1RT MOVWF M1 ANDWF RD1T,W ;(1a1=1) BTFSC SZ GOTO T2RT ;1.čas MOVF Min,W ;minuty XORWF CAS1M,W ; BTFSS SZ ;jsou stejné? GOTO T2RT ;NE MOVF Hod,W ;hodiny XORWF CAS1H,W ; BTFSS SZ ;jsou stejné? GOTO T2RT ;NE ;1.čas=hodiny, změna ref.teploty MOVF RT11,W ;REF1 MOVWF RT1 ; do RT MOVF RT12,W ; GOTO ZRTEE ;................................ ;test 2.čas T2RT MOVF M1,W ANDWF RD2T,W ;(1a1=1) BTFSC SZ GOTO T3RT ;2.čas MOVF Min,W ;minuty XORWF CAS2M,W ; BTFSS SZ ;jsou stejné? GOTO T3RT ;NE MOVF Hod,W ;hodiny XORWF CAS2H,W ; BTFSS SZ ;jsou stejné? GOTO T3RT ;NE ;2.čas=hodiny, změna ref.teploty MOVF RT21,W ;REF2 MOVWF RT1 ; do RT MOVF RT22,W ; GOTO ZRTEE ;................................ ;test 3.čas T3RT MOVF M1,W ANDWF RD3T,W ;(1a1=1) BTFSC SZ GOTO T4RT ;3.čas MOVF Min,W ;minuty XORWF CAS3M,W ; BTFSS SZ ;jsou stejné? GOTO T4RT ;NE MOVF Hod,W ;hodiny XORWF CAS3H,W ; BTFSS SZ ;jsou stejné? GOTO T4RT ;NE ;3.čas=hodiny, změna ref.teploty MOVF RT31,W ;REF2 MOVWF RT1 ; do RT MOVF RT32,W ; GOTO ZRTEE ;................................ ;test 4.čas T4RT MOVF M1,W ANDWF RD4T,W ;(1a1=1) BTFSC SZ GOTO T5RT ;4.čas MOVF Min,W ;minuty XORWF CAS4M,W ; BTFSS SZ ;jsou stejné? GOTO T5RT ;NE MOVF Hod,W ;hodiny XORWF CAS4H,W ; BTFSS SZ ;jsou stejné? GOTO T5RT ;NE ;4.čas=hodiny, změna ref.teploty MOVF RT41,W ;REF4 MOVWF RT1 ; do RT MOVF RT42,W ; GOTO ZRTEE ;................................ ;test 5.čas T5RT MOVF M1,W ANDWF RD5T,W ;(1a1=1) BTFSC SZ GOTO T6RT ;5.čas MOVF Min,W ;minuty XORWF CAS5M,W ; BTFSS SZ ;jsou stejné? GOTO T6RT ;NE MOVF Hod,W ;hodiny XORWF CAS5H,W ; BTFSS SZ ;jsou stejné? GOTO T6RT ;NE ;5.čas=hodiny, změna ref.teploty MOVF RT51,W ;REF5 MOVWF RT1 ; do RT MOVF RT52,W ; GOTO ZRTEE ;................................ ;test 6.čas T6RT MOVF M1,W ANDWF RD6T,W ;(1a1=1) BTFSC SZ GOTO T7RT ;6.čas MOVF Min,W ;minuty XORWF CAS6M,W ; BTFSS SZ ;jsou stejné? GOTO T7RT ;NE MOVF Hod,W ;hodiny XORWF CAS6H,W ; BTFSS SZ ;jsou stejné? GOTO T7RT ;NE ;6.čas=hodiny, změna ref.teploty MOVF RT61,W ;REF6 MOVWF RT1 ; do RT MOVF RT62,W ; GOTO ZRTEE ;................................ ;test 7.čas T7RT MOVF M1,W ANDWF RD7T,W ;(1a1=1) BTFSC SZ RETURN ;NE ;7.čas MOVF Min,W ;minuty XORWF CAS7M,W ; BTFSS SZ ;jsou stejné? RETURN ;NE MOVF Hod,W ;hodiny XORWF CAS7H,W ; BTFSS SZ ;jsou stejné? RETURN ;NE ;7.čas=hodiny, změna ref.teploty MOVF RT71,W ;REF7 MOVWF RT1 ; do RT MOVF RT72,W ; ;-------------------------------- ;zápis ref.teploty do EEPROM ZRTEE MOVWF RT2 ;dokončit uložení ref.tep. MOVLW 0x06 ;adresa MOVWF EEADRp ; MOVF RT1,W ;data CALL EWR ;zápis INCF EEADRp,F ;adresa+1 MOVF RT2,W ;data GOTO EWR ;zápis ;================================ ;nastavit den */- (aktivovat/deaktivovat) NADEN PROG0 CALL HEXDEC MOVLW 0xC0 CALL WRCMD CALL PRINT PROG1 MOVLW 1 MOVWF M1 ;maska MOVLW 0xC9 MOVWF M2 ;kurzor NADEN1 MOVF M2,W PROG0 CALL WRCMD MOVF M3,W ;data ANDWF M1,W ;maska(1A1=1) MOVLW "-" BTFSS SZ MOVLW "*" CALL BLIKS CALL WRDATA ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO NADEN1 ;NE BTFSS TlP ;stisknuto? GOTO ZMDEN ;ANO BTFSS TlM ;stisknuto? GOTO ZMDEN ;ANO BTFSS TlS ;stisknuto? RETURN ;ANO ;blikat, další den MOVF M2,W PROG0 CALL WRCMD PROG1 MOVF M3,W ;data ANDWF M1,W ;maska(1a1=1) MOVLW "-" BTFSS SZ MOVLW "*" PROG0 CALL WRDATA PROG1 BCF SC RLF M1,F ;maska, vlevo BTFSC M1,7 ;poslední? RETURN ;ANO INCF M2,F ;kurzor+1 GOTO NADEN1 ;změnit den ZMDEN MOVF M3,W ;data ANDWF M1,W ;maska(1a1=a) BTFSC SZ GOTO $+4 COMF M1,W ;maska(negace) ANDWF M3,F ;data(1a1=1) GOTO NADEN1 MOVF M1,W ;maska IORWF M3,F ;data(0a0=0) GOTO NADEN1 ;================================ ;uložit ref. teplotu 1 URT1 MOVLW 0x0C PROG0 MOVWF EEADRp MOVF CAS1H,W CALL EWrite INCF EEADRp,F MOVF CAS1M,W CALL EWrite INCF EEADRp,F MOVF RD1T,W CALL EWrite INCF EEADRp,F MOVF RT11,W CALL EWrite INCF EEADRp,F MOVF RT12,W CALL EWrite PROG1 GOTO TEP1 ;-------------------------------- ;uložit ref. teplotu 2 URT2 MOVLW 0x11 PROG0 MOVWF EEADRp MOVF CAS2H,W CALL EWrite INCF EEADRp,F MOVF CAS2M,W CALL EWrite INCF EEADRp,F MOVF RD2T,W CALL EWrite INCF EEADRp,F MOVF RT21,W CALL EWrite INCF EEADRp,F MOVF RT22,W CALL EWrite PROG1 GOTO TEP2 ;-------------------------------- ;uložit ref. teplotu 3 URT3 MOVLW 0x16 PROG0 MOVWF EEADRp MOVF CAS3H,W CALL EWrite INCF EEADRp,F MOVF CAS3M,W CALL EWrite INCF EEADRp,F MOVF RD3T,W CALL EWrite INCF EEADRp,F MOVF RT31,W CALL EWrite INCF EEADRp,F MOVF RT32,W CALL EWrite PROG1 GOTO TEP3 ;-------------------------------- ;uložit ref. teplotu 4 URT4 MOVLW 0x1B PROG0 MOVWF EEADRp MOVF CAS4H,W CALL EWrite INCF EEADRp,F MOVF CAS4M,W CALL EWrite INCF EEADRp,F MOVF RD4T,W CALL EWrite INCF EEADRp,F MOVF RT41,W CALL EWrite INCF EEADRp,F MOVF RT42,W CALL EWrite PROG1 GOTO TEP4 ;-------------------------------- ;uložit ref. teplotu 5 URT5 MOVLW 0x20 PROG0 MOVWF EEADRp MOVF CAS5H,W CALL EWrite INCF EEADRp,F MOVF CAS5M,W CALL EWrite INCF EEADRp,F MOVF RD5T,W CALL EWrite INCF EEADRp,F MOVF RT51,W CALL EWrite INCF EEADRp,F MOVF RT52,W CALL EWrite PROG1 GOTO TEP5 ;-------------------------------- ;uložit ref. teplotu 6 URT6 MOVLW 0x25 PROG0 MOVWF EEADRp MOVF CAS6H,W CALL EWrite INCF EEADRp,F MOVF CAS6M,W CALL EWrite INCF EEADRp,F MOVF RD6T,W CALL EWrite INCF EEADRp,F MOVF RT61,W CALL EWrite INCF EEADRp,F MOVF RT62,W CALL EWrite PROG1 GOTO TEP6 ;-------------------------------- ;uložit ref. teplotu 7 URT7 MOVLW 0x2A PROG0 MOVWF EEADRp MOVF CAS7H,W CALL EWrite INCF EEADRp,F MOVF CAS7M,W CALL EWrite INCF EEADRp,F MOVF RD7T,W CALL EWrite INCF EEADRp,F MOVF RT71,W CALL EWrite INCF EEADRp,F MOVF RT72,W CALL EWrite PROG1 GOTO TEP7 ;================================ ;1.referenční teplota TEP1 MOVLW "1" MOVWF A1 MOVF CAS1H,W MOVWF M1 MOVF CAS1M,W MOVWF M2 PROG0 CALL ZHR MOVF RD1T,W MOVWF M1 MOVF RT11,W MOVWF A1 MOVF RT12,W MOVWF A2 CALL ZDR TEP11 PROG0 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO TEP11 ;NE BTFSS TlP ;stisknuto? GOTO TEP2 ;ANO BTFSS TlM ;stisknuto? GOTO TEP7 ;ANO BTFSC TlS ;stisknuto? GOTO DIS20 ;NE ;................................ ;blikat, Hod BHRT1 BSF BR1 BSF BR2 CLRF TE BHRT11 MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS1H,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BHRT11 ;NE BTFSS TlP ;stisknuto? GOTO CAS1HP ;ANO BTFSS TlM ;stisknuto? GOTO CAS1HM ;ANO BTFSS TlS ;stisknuto? GOTO URT1 ;TEP1 ;ANO MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS1H,W CALL HDW CALL PR21 PROG1 GOTO BMRT1 ;CAS1H-1 CAS1HM MOVLW 1 SUBWF CAS1H,F ;Hod-1 BTFSC SC ;záporné? GOTO BHRT11 ;NE MOVLW 23 MOVWF CAS1H GOTO BHRT11 ;CAS1H+1 CAS1HP INCF CAS1H,F ;Hod+1 MOVF CAS1H,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF CAS1H ;NE;=0 GOTO BHRT11 ;................................ ;blikat, Min BMRT1 MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS1M,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BMRT1 ;NE BTFSS TlP ;stisknuto? GOTO CAS1MP ;ANO BTFSS TlM ;stisknuto? GOTO CAS1MM ;ANO BTFSS TlS ;stisknuto? GOTO URT1 ;TEP1 ;ANO MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS1M,W CALL HDW CALL PR21 PROG1 GOTO BRT1 ;CAS1M-1 CAS1MM MOVLW 1 SUBWF CAS1M,F ;Min-1 BTFSC SC ;záporné? GOTO BMRT1 ;NE MOVLW 59 MOVWF CAS1M GOTO BMRT1 ;CAS1M+1 CAS1MP INCF CAS1M,F ;Min+1 MOVF CAS1M,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF CAS1M ;NE;=0 GOTO BMRT1 ;................................ ;blikat, ref.teplota 1 BRT1 MOVLW B'00001111' MOVWF BR MOVLW B'00000001' MOVWF TE BRT11 MOVF RT11,W MOVWF A1 MOVF RT12,W MOVWF A2 PROG0 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BRT11 ;NE BTFSS TlS ;stisknuto? GOTO URT1 ;TEP1 ;ANO BTFSS TlN ;stisknuto? GOTO BRT12 ;ANO ;příprava před +/- MOVF RT11,W MOVWF X1 MOVF RT12,W MOVWF X2 BTFSS TlP ;stisknuto? GOTO RT1P ;ANO ;RT1-1 PROG0 CALL XM1 PROG1 GOTO RT1U ;RT1+1 RT1P PROG0 CALL XP1 PROG1 RT1U MOVF X1,W MOVWF RT11 MOVF X2,W MOVWF RT12 GOTO BRT11 ;................................ BRT12 MOVF RT11,W MOVWF A1 MOVF RT12,W MOVWF A2 ;blikat, dny ref.t.1 MOVF RD1T,W MOVWF M3 ;data CALL NADEN MOVF M3,W MOVWF RD1T BTFSS TlS ;stisknuto? GOTO URT1 ;TEP1 ;ANO GOTO BHRT1 ;-------------------------------- ;2.referenční teplota TEP2 MOVLW "2" MOVWF A1 MOVF CAS2H,W MOVWF M1 MOVF CAS2M,W MOVWF M2 PROG0 CALL ZHR MOVF RD2T,W MOVWF M1 MOVF RT21,W MOVWF A1 MOVF RT22,W MOVWF A2 CALL ZDR TEP21 PROG0 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO TEP21 ;NE BTFSS TlP ;stisknuto? GOTO TEP3 ;ANO BTFSS TlM ;stisknuto? GOTO TEP1 ;ANO BTFSC TlS ;stisknuto? GOTO DIS20 ;NE ;................................ ;blikat, Hod BHRT2 BSF BR1 BSF BR2 CLRF TE BHRT21 MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS2H,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BHRT21 ;NE BTFSS TlP ;stisknuto? GOTO CAS2HP ;ANO BTFSS TlM ;stisknuto? GOTO CAS2HM ;ANO BTFSS TlS ;stisknuto? GOTO URT2 ;TEP2 ;ANO MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS2H,W CALL HDW CALL PR21 PROG1 GOTO BMRT2 ;CAS2H-1 CAS2HM MOVLW 1 SUBWF CAS2H,F ;Hod-1 BTFSC SC ;záporné? GOTO BHRT21 ;NE MOVLW 23 MOVWF CAS2H GOTO BHRT21 ;CAS2H+1 CAS2HP INCF CAS2H,F ;Hod+1 MOVF CAS2H,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF CAS2H ;NE;=0 GOTO BHRT21 ;................................ ;blikat, Min BMRT2 MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS2M,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BMRT2 ;NE BTFSS TlP ;stisknuto? GOTO CAS2MP ;ANO BTFSS TlM ;stisknuto? GOTO CAS2MM ;ANO BTFSS TlS ;stisknuto? GOTO URT2 ;TEP2 ;ANO MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS2M,W CALL HDW CALL PR21 PROG1 GOTO BRT2 ;CAS2M-1 CAS2MM MOVLW 1 SUBWF CAS2M,F ;Min-1 BTFSC SC ;záporné? GOTO BMRT2 ;NE MOVLW 59 MOVWF CAS2M GOTO BMRT2 ;CAS2M+1 CAS2MP INCF CAS2M,F ;Min+1 MOVF CAS2M,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF CAS2M ;NE;=0 GOTO BMRT2 ;................................ ;blikat, ref.teplota 2 BRT2 MOVLW B'00001111' MOVWF BR MOVLW B'00000001' MOVWF TE BRT21 MOVF RT21,W MOVWF A1 MOVF RT22,W MOVWF A2 PROG0 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BRT21 ;NE BTFSS TlS ;stisknuto? GOTO URT2 ;TEP2 ;ANO BTFSS TlN ;stisknuto? GOTO BRT22 ;ANO ;příprava před +/- MOVF RT21,W MOVWF X1 MOVF RT22,W MOVWF X2 BTFSS TlP ;stisknuto? GOTO RT2P ;ANO ;RT2-1 PROG0 CALL XM1 PROG1 GOTO RT2U ;RT2+1 RT2P PROG0 CALL XP1 PROG1 RT2U MOVF X1,W MOVWF RT21 MOVF X2,W MOVWF RT22 GOTO BRT21 ;................................ BRT22 MOVF RT21,W MOVWF A1 MOVF RT22,W MOVWF A2 ;blikat, dny ref.t.2 MOVF RD2T,W MOVWF M3 ;data CALL NADEN MOVF M3,W MOVWF RD2T BTFSS TlS ;stisknuto? GOTO URT2 ;TEP2 ;ANO GOTO BHRT2 ;-------------------------------- ;3.referenční teplota TEP3 MOVLW "3" MOVWF A1 MOVF CAS3H,W MOVWF M1 MOVF CAS3M,W MOVWF M2 PROG0 CALL ZHR MOVF RD3T,W MOVWF M1 MOVF RT31,W MOVWF A1 MOVF RT32,W MOVWF A2 CALL ZDR TEP31 PROG0 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO TEP31 ;NE BTFSS TlP ;stisknuto? GOTO TEP4 ;ANO BTFSS TlM ;stisknuto? GOTO TEP2 ;ANO BTFSC TlS ;stisknuto? GOTO DIS20 ;NE ;................................ ;blikat, Hod BHRT3 BSF BR1 BSF BR2 CLRF TE BHRT31 MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS3H,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BHRT31 ;NE BTFSS TlP ;stisknuto? GOTO CAS3HP ;ANO BTFSS TlM ;stisknuto? GOTO CAS3HM ;ANO BTFSS TlS ;stisknuto? GOTO URT3 ;TEP3 ;ANO MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS3H,W CALL HDW CALL PR21 PROG1 GOTO BMRT3 ;CAS3H-1 CAS3HM MOVLW 1 SUBWF CAS3H,F ;Hod-1 BTFSC SC ;záporné? GOTO BHRT31 ;NE MOVLW 23 MOVWF CAS3H GOTO BHRT31 ;CAS3H+1 CAS3HP INCF CAS3H,F ;Hod+1 MOVF CAS3H,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF CAS3H ;NE;=0 GOTO BHRT31 ;................................ ;blikat, Min BMRT3 MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS3M,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BMRT3 ;NE BTFSS TlP ;stisknuto? GOTO CAS3MP ;ANO BTFSS TlM ;stisknuto? GOTO CAS3MM ;ANO BTFSS TlS ;stisknuto? GOTO URT3 ;TEP3 ;ANO MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS3M,W CALL HDW CALL PR21 PROG1 GOTO BRT3 ;CAS3M-1 CAS3MM MOVLW 1 SUBWF CAS3M,F ;Min-1 BTFSC SC ;záporné? GOTO BMRT3 ;NE MOVLW 59 MOVWF CAS3M GOTO BMRT3 ;CAS3M+1 CAS3MP INCF CAS3M,F ;Min+1 MOVF CAS3M,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF CAS3M ;NE;=0 GOTO BMRT3 ;................................ ;blikat, ref.teplota 3 BRT3 MOVLW B'00001111' MOVWF BR MOVLW B'00000001' MOVWF TE BRT31 MOVF RT31,W MOVWF A1 MOVF RT32,W MOVWF A2 PROG0 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BRT31 ;NE BTFSS TlS ;stisknuto? GOTO URT3 ;TEP3 ;ANO BTFSS TlN ;stisknuto? GOTO BRT32 ;ANO ;příprava před +/- MOVF RT31,W MOVWF X1 MOVF RT32,W MOVWF X2 BTFSS TlP ;stisknuto? GOTO RT3P ;ANO ;RT3-1 PROG0 CALL XM1 PROG1 GOTO RT3U ;RT3+1 RT3P PROG0 CALL XP1 PROG1 RT3U MOVF X1,W MOVWF RT31 MOVF X2,W MOVWF RT32 GOTO BRT31 ;................................ BRT32 MOVF RT31,W MOVWF A1 MOVF RT32,W MOVWF A2 ;blikat, dny ref.t.3 MOVF RD3T,W MOVWF M3 ;data CALL NADEN MOVF M3,W MOVWF RD3T BTFSS TlS ;stisknuto? GOTO URT3 ;TEP3 ;ANO GOTO BHRT3 ;-------------------------------- ;4.referenční teplota TEP4 MOVLW "4" MOVWF A1 MOVF CAS4H,W MOVWF M1 MOVF CAS4M,W MOVWF M2 PROG0 CALL ZHR MOVF RD4T,W MOVWF M1 MOVF RT41,W MOVWF A1 MOVF RT42,W MOVWF A2 CALL ZDR TEP41 PROG0 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO TEP41 ;NE BTFSS TlP ;stisknuto? GOTO TEP5 ;ANO BTFSS TlM ;stisknuto? GOTO TEP3 ;ANO BTFSC TlS ;stisknuto? GOTO DIS20 ;NE ;................................ ;blikat, Hod BHRT4 BSF BR1 BSF BR2 CLRF TE BHRT41 MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS4H,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BHRT41 ;NE BTFSS TlP ;stisknuto? GOTO CAS4HP ;ANO BTFSS TlM ;stisknuto? GOTO CAS4HM ;ANO BTFSS TlS ;stisknuto? GOTO URT4 ;TEP4 ;ANO MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS4H,W CALL HDW CALL PR21 PROG1 GOTO BMRT4 ;CAS4H-1 CAS4HM MOVLW 1 SUBWF CAS4H,F ;Hod-1 BTFSC SC ;záporné? GOTO BHRT41 ;NE MOVLW 23 MOVWF CAS4H GOTO BHRT41 ;CAS4H+1 CAS4HP INCF CAS4H,F ;Hod+1 MOVF CAS4H,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF CAS4H ;NE;=0 GOTO BHRT41 ;................................ ;blikat, Min BMRT4 MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS4M,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BMRT4 ;NE BTFSS TlP ;stisknuto? GOTO CAS4MP ;ANO BTFSS TlM ;stisknuto? GOTO CAS4MM ;ANO BTFSS TlS ;stisknuto? GOTO URT4 ;TEP4 ;ANO MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS4M,W CALL HDW CALL PR21 PROG1 GOTO BRT4 ;CAS4M-1 CAS4MM MOVLW 1 SUBWF CAS4M,F ;Min-1 BTFSC SC ;záporné? GOTO BMRT4 ;NE MOVLW 59 MOVWF CAS4M GOTO BMRT4 ;CAS4M+1 CAS4MP INCF CAS4M,F ;Min+1 MOVF CAS4M,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF CAS4M ;NE;=0 GOTO BMRT4 ;................................ ;blikat, ref.teplota 4 BRT4 MOVLW B'00001111' MOVWF BR MOVLW B'00000001' MOVWF TE BRT41 MOVF RT41,W MOVWF A1 MOVF RT42,W MOVWF A2 PROG0 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BRT41 ;NE BTFSS TlS ;stisknuto? GOTO URT4 ;TEP4 ;ANO BTFSS TlN ;stisknuto? GOTO BRT42 ;ANO ;příprava před +/- MOVF RT41,W MOVWF X1 MOVF RT42,W MOVWF X2 BTFSS TlP ;stisknuto? GOTO RT4P ;ANO ;RT4-1 PROG0 CALL XM1 PROG1 GOTO RT4U ;RT4+1 RT4P PROG0 CALL XP1 PROG1 RT4U MOVF X1,W MOVWF RT41 MOVF X2,W MOVWF RT42 GOTO BRT41 ;................................ BRT42 MOVF RT41,W MOVWF A1 MOVF RT42,W MOVWF A2 ;blikat, dny ref.t.4 MOVF RD4T,W MOVWF M3 ;data CALL NADEN MOVF M3,W MOVWF RD4T BTFSS TlS ;stisknuto? GOTO URT4 ;TEP4 ;ANO GOTO BHRT4 ;-------------------------------- ;5.referenční teplota TEP5 MOVLW "5" MOVWF A1 MOVF CAS5H,W MOVWF M1 MOVF CAS5M,W MOVWF M2 PROG0 CALL ZHR MOVF RD5T,W MOVWF M1 MOVF RT51,W MOVWF A1 MOVF RT52,W MOVWF A2 CALL ZDR TEP51 PROG0 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO TEP51 ;NE BTFSS TlP ;stisknuto? GOTO TEP6 ;ANO BTFSS TlM ;stisknuto? GOTO TEP4 ;ANO BTFSC TlS ;stisknuto? GOTO DIS20 ;NE ;................................ ;blikat, Hod BHRT5 BSF BR1 BSF BR2 CLRF TE BHRT51 MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS5H,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BHRT51 ;NE BTFSS TlP ;stisknuto? GOTO CAS5HP ;ANO BTFSS TlM ;stisknuto? GOTO CAS5HM ;ANO BTFSS TlS ;stisknuto? GOTO URT5 ;TEP5 ;ANO MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS5H,W CALL HDW CALL PR21 PROG1 GOTO BMRT5 ;CAS5H-1 CAS5HM MOVLW 1 SUBWF CAS5H,F ;Hod-1 BTFSC SC ;záporné? GOTO BHRT51 ;NE MOVLW 23 MOVWF CAS5H GOTO BHRT51 ;CAS5H+1 CAS5HP INCF CAS5H,F ;Hod+1 MOVF CAS5H,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF CAS5H ;NE;=0 GOTO BHRT51 ;................................ ;blikat, Min BMRT5 MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS5M,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BMRT5 ;NE BTFSS TlP ;stisknuto? GOTO CAS5MP ;ANO BTFSS TlM ;stisknuto? GOTO CAS5MM ;ANO BTFSS TlS ;stisknuto? GOTO URT5 ;TEP5 ;ANO MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS5M,W CALL HDW CALL PR21 PROG1 GOTO BRT5 ;CAS5M-1 CAS5MM MOVLW 1 SUBWF CAS5M,F ;Min-1 BTFSC SC ;záporné? GOTO BMRT5 ;NE MOVLW 59 MOVWF CAS5M GOTO BMRT5 ;CAS5M+1 CAS5MP INCF CAS5M,F ;Min+1 MOVF CAS5M,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF CAS5M ;NE;=0 GOTO BMRT5 ;................................ ;blikat, ref.teplota 5 BRT5 MOVLW B'00001111' MOVWF BR MOVLW B'00000001' MOVWF TE BRT51 MOVF RT51,W MOVWF A1 MOVF RT52,W MOVWF A2 PROG0 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BRT51 ;NE BTFSS TlS ;stisknuto? GOTO URT5 ;TEP5 ;ANO BTFSS TlN ;stisknuto? GOTO BRT52 ;ANO ;příprava před +/- MOVF RT51,W MOVWF X1 MOVF RT52,W MOVWF X2 BTFSS TlP ;stisknuto? GOTO RT5P ;ANO ;RT5-1 PROG0 CALL XM1 PROG1 GOTO RT5U ;RT5+1 RT5P PROG0 CALL XP1 PROG1 RT5U MOVF X1,W MOVWF RT51 MOVF X2,W MOVWF RT52 GOTO BRT51 ;................................ BRT52 MOVF RT51,W MOVWF A1 MOVF RT52,W MOVWF A2 ;blikat, dny ref.t.5 MOVF RD5T,W MOVWF M3 ;data CALL NADEN MOVF M3,W MOVWF RD5T BTFSS TlS ;stisknuto? GOTO URT5 ;TEP5 ;ANO GOTO BHRT5 ;-------------------------------- ;6.referenční teplota TEP6 MOVLW "6" MOVWF A1 MOVF CAS6H,W MOVWF M1 MOVF CAS6M,W MOVWF M2 PROG0 CALL ZHR MOVF RD6T,W MOVWF M1 MOVF RT61,W MOVWF A1 MOVF RT62,W MOVWF A2 CALL ZDR TEP61 PROG0 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO TEP61 ;NE BTFSS TlP ;stisknuto? GOTO TEP7 ;ANO BTFSS TlM ;stisknuto? GOTO TEP5 ;ANO BTFSC TlS ;stisknuto? GOTO DIS20 ;NE ;................................ ;blikat, Hod BHRT6 BSF BR1 BSF BR2 CLRF TE BHRT61 MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS6H,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BHRT61 ;NE BTFSS TlP ;stisknuto? GOTO CAS6HP ;ANO BTFSS TlM ;stisknuto? GOTO CAS6HM ;ANO BTFSS TlS ;stisknuto? GOTO URT6 ;TEP6 ;ANO MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS6H,W CALL HDW CALL PR21 PROG1 GOTO BMRT6 ;CAS6H-1 CAS6HM MOVLW 1 SUBWF CAS6H,F ;Hod-1 BTFSC SC ;záporné? GOTO BHRT61 ;NE MOVLW 23 MOVWF CAS6H GOTO BHRT61 ;CAS6H+1 CAS6HP INCF CAS6H,F ;Hod+1 MOVF CAS6H,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF CAS6H ;NE;=0 GOTO BHRT61 ;................................ ;blikat, Min BMRT6 MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS6M,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BMRT6 ;NE BTFSS TlP ;stisknuto? GOTO CAS6MP ;ANO BTFSS TlM ;stisknuto? GOTO CAS6MM ;ANO BTFSS TlS ;stisknuto? GOTO URT6 ;TEP6 ;ANO MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS6M,W CALL HDW CALL PR21 PROG1 GOTO BRT6 ;CAS6M-1 CAS6MM MOVLW 1 SUBWF CAS6M,F ;Min-1 BTFSC SC ;záporné? GOTO BMRT6 ;NE MOVLW 59 MOVWF CAS6M GOTO BMRT6 ;CAS6M+1 CAS6MP INCF CAS6M,F ;Min+1 MOVF CAS6M,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF CAS6M ;NE;=0 GOTO BMRT6 ;............................... ;blikat, ref.teplota 6 BRT6 MOVLW B'00001111' MOVWF BR MOVLW B'00000001' MOVWF TE BRT61 MOVF RT61,W MOVWF A1 MOVF RT62,W MOVWF A2 PROG0 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BRT61 ;NE BTFSS TlS ;stisknuto? GOTO URT6 ;TEP6 ;ANO BTFSS TlN ;stisknuto? GOTO BRT62 ;ANO ;příprava před +/- MOVF RT61,W MOVWF X1 MOVF RT62,W MOVWF X2 BTFSS TlP ;stisknuto? GOTO RT6P ;ANO ;RT6-1 PROG0 CALL XM1 PROG1 GOTO RT6U ;RT6+1 RT6P PROG0 CALL XP1 PROG1 RT6U MOVF X1,W MOVWF RT61 MOVF X2,W MOVWF RT62 GOTO BRT61 ;................................ BRT62 MOVF RT61,W MOVWF A1 MOVF RT62,W MOVWF A2 ;blikat, dny ref.t.6 MOVF RD6T,W MOVWF M3 ;data CALL NADEN MOVF M3,W MOVWF RD6T BTFSS TlS ;stisknuto? GOTO URT6 ;TEP6 ;ANO GOTO BHRT6 ;-------------------------------- ;7.referenční teplota TEP7 MOVLW "7" MOVWF A1 MOVF CAS7H,W MOVWF M1 MOVF CAS7M,W MOVWF M2 PROG0 CALL ZHR MOVF RD7T,W MOVWF M1 MOVF RT71,W MOVWF A1 MOVF RT72,W MOVWF A2 CALL ZDR TEP71 PROG0 MOVF DN,F ;návrat na DIS1 BTFSC SZ ; GOTO DIS1 ; ;tlačítka CALL KLV-1 ;čtení klávesnice, nejdřív měření PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO TEP71 ;NE BTFSS TlP ;stisknuto? GOTO TEP1 ;ANO BTFSS TlM ;stisknuto? GOTO TEP6 ;ANO BTFSC TlS ;stisknuto? GOTO DIS20 ;NE ;................................ ;blikat, Hod BHRT7 BSF BR1 BSF BR2 CLRF TE BHRT71 MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS7H,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BHRT71 ;NE BTFSS TlP ;stisknuto? GOTO CAS7HP ;ANO BTFSS TlM ;stisknuto? GOTO CAS7HM ;ANO BTFSS TlS ;stisknuto? GOTO URT7 ;TEP7 ;ANO MOVLW 0x83 PROG0 CALL WRCMD MOVF CAS7H,W CALL HDW CALL PR21 PROG1 GOTO BMRT7 ;CAS7H-1 CAS7HM MOVLW 1 SUBWF CAS7H,F ;Hod-1 BTFSC SC ;záporné? GOTO BHRT71 ;NE MOVLW 23 MOVWF CAS7H GOTO BHRT71 ;CAS7H+1 CAS7HP INCF CAS7H,F ;Hod+1 MOVF CAS7H,W SUBLW 23 ;23-Hod BTFSS SC ;C=1? kladné? CLRF CAS7H ;NE;=0 GOTO BHRT71 ;................................ ;blikat, Min BMRT7 MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS7M,W CALL HDW CALL PSR2 ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BMRT7 ;NE BTFSS TlP ;stisknuto? GOTO CAS7MP ;ANO BTFSS TlM ;stisknuto? GOTO CAS7MM ;ANO BTFSS TlS ;stisknuto? GOTO URT7 ;TEP7 ;ANO MOVLW 0x86 PROG0 CALL WRCMD MOVF CAS7M,W CALL HDW CALL PR21 PROG1 GOTO BRT7 ;CAS7M-1 CAS7MM MOVLW 1 SUBWF CAS7M,F ;Min-1 BTFSC SC ;záporné? GOTO BMRT7 ;NE MOVLW 59 MOVWF CAS7M GOTO BMRT7 ;CAS7M+1 CAS7MP INCF CAS7M,F ;Min+1 MOVF CAS7M,W SUBLW 59 ;59-Min BTFSS SC ;C=1? kladné? CLRF CAS7M ;NE;=0 GOTO BMRT7 ;................................ ;blikat, ref.teplota 7 BRT7 MOVLW B'00001111' MOVWF BR MOVLW B'00000001' MOVWF TE BRT71 MOVF RT71,W MOVWF A1 MOVF RT72,W MOVWF A2 PROG0 CALL HEXDEC MOVLW 0xC0 CALL PRINTS ;tlačítka CALL KLV ;čtení klávesnice PROG1 BTFSC SZ ;Z=0? neco stisknuto GOTO BRT71 ;NE BTFSS TlS ;stisknuto? GOTO URT7 ;TEP7 ;ANO BTFSS TlN ;stisknuto? GOTO BRT72 ;ANO ;příprava před +/- MOVF RT71,W MOVWF X1 MOVF RT72,W MOVWF X2 BTFSS TlP ;stisknuto? GOTO RT7P ;ANO ;RT7-1 PROG0 CALL XM1 PROG1 GOTO RT7U ;RT7+1 RT7P PROG0 CALL XP1 PROG1 RT7U MOVF X1,W MOVWF RT71 MOVF X2,W MOVWF RT72 GOTO BRT71 ;................................ BRT72 MOVF RT71,W MOVWF A1 MOVF RT72,W MOVWF A2 ;blikat, dny ref.t.7 MOVF RD7T,W MOVWF M3 ;data CALL NADEN MOVF M3,W MOVWF RD7T BTFSS TlS ;stisknuto? GOTO URT7 ;TEP7 ;ANO GOTO BHRT7 ;================================ ;teplota T1,2 do A TA MOVF TC1,W MOVWF A1 MOVF TC2,W WA2 MOVWF A2 RETURN ;-------------------------------- ;ref.teplota RT1,2 do B RTB MOVF RT1,W MOVWF B1 MOVF RT2,W WB2 MOVWF B2 RETURN ;-------------------------------- ;ref.teplota RT1,2 do A ;RTA MOVF RT1,W ; MOVWF A1 ; MOVF RT2,W ; GOTO WA2 ;-------------------------------- ;teplota T1,2 do B ;TB MOVF TC1,W ; MOVWF B1 ; MOVF TC2,W ; GOTO WB2 ;-------------------------------- ;vlhkost HK1,2 do A VA MOVF HK1,W MOVWF A1 MOVF HK2,W GOTO WA2 ;-------------------------------- ;ref.vlhkost RV1,2 do B RVB MOVF RV1,W MOVWF B1 MOVF RV2,W GOTO WB2 ;-------------------------------- ;Porovnat hodnoty A,B ;výsledek ovlivní STATUS,C ;A <= B SC=0 ;B => A SC=0 ;A > B SC=1 ;B < A SC=1 PAB ;porovnat znaménka MOVF A2,W XORWF B2,W ;(stejné=0) ANDLW B'10000000' ;(1a1=1) RLF B2,W ;vlevo(SC=MSB) BTFSS SZ ;stejné znaménka? (SZ=1) RETURN ;NE ;A-B ;ANO CLRF A3 CLRF B3 PROG0 CALL MINUS ;A-B=C; SC=0=záporný výsledek PROG1 ;test C=0; SZ=1=ANO MOVF C3,F BTFSC SZ ;nenulove? MOVF C2,F BTFSC SZ ;nenulove? MOVF C1,F BTFSC SZ ;nenulové? BCF SC ;SC=0 (A=B) jako záporné RETURN ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO; ; ovládání výstupů ; ;OOOOOOOOOOOOOOOOOOOOOOOOOOOOOOO; OV BTFSC ES ;Error Senzor =1? GOTO RET0 ;ANO ;-------------------------------- ;RT=1 při, teplota <= ref.teplota CALL TA ;teplota T1,2 do A CALL RTB ;ref.teplota RT1,2 do B CALL PAB ;Test A <= B ; sC=0=ANO, 1=NE BTFSS SC ; BSF RT ;ANO, RT=1, ZAP rele ;RT=0 při, teplota > ref.teplota+hystereze CALL TA ;teplota T1,2 do A CALL RTB ;ref.teplota RT1,2 do B MOVF HYST,W ;hystereze ADDWF B1,F ;HYST+A1=A1 BTFSC SC ;nepřeteklo? INCF B2,F ;+1 CALL PAB ;Test A <= B ; sC=0=ANO, 1=NE BTFSC SC ; BCF RT ;NE, RT=0, VYP rele ;-------------------------------- ;RV=1 při, vlhkost <= ref.vlhkost CALL VA ;vlhkost HK1,2 do A CALL RVB ;ref.vlhkost RV1,2 do B CALL PAB ;Test A <= B ; sC=0=ANO, 1=NE BTFSS SC ; BSF RV ;ANO, RV=1, ZAP rele ;RV=0 při, vlhkost > ref.vlhkost+hystereze CALL VA ;vlhkost HK1,2 do A CALL RVB ;ref.vlhkost RV1,2 do B MOVF HYSV,W ;hystereze ADDWF B1,F ;HYSV+A1=A1 BTFSC SC ;nepřeteklo? INCF B2,F ;+1 CALL PAB ;Test A <= B ; sC=0=ANO, 1=NE BTFSC SC ; BCF RV ;NE, RV=0, VYP rele ;-------------------------------- ;RF=1 při, teplota > ref.teplota+5 CALL TA ;teplota T1,2 do A CALL RTB ;ref.teplota RT1,2 do B MOVLW 50 ;5°c ADDWF B1,F ;+ref.teplota BTFSC SC ;nepřeteklo? INCF B2,F ;+1 CALL PAB ;Test A > B ; sC=1=ANO, 0=NE BTFSC SC ; BSF RF ;ANO, RF=1, ZAP rele ;RF=0 při, teplota <= ref.teplota CALL TA ;teplota T1,2 do A CALL RTB ;ref.teplota RT1,2 do B CALL PAB ;Test A <= B ; sC=0=ANO, 1=NE BTFSS SC ; BCF RF ;NE, RF=0, VYP rele ;-------------------------------- RET0 PROG0 RETURN ;-------------------------------- END