;**********************CITAC DO 1,3 GHz**********************
;TOTO JE PROGRAM PRE CITAC,MERANIE T,A MERANIE TRVANIA
;LOG.1 A LOG.0 A PROSTY CITAC (VERZIA PRE PLOSAK Z PROTELU)
;VZORKUJE KAZDU SEKUNDU,PROSTY CITAC SA INKREMENTUJE NA RB0
;*************************************************************
RTCC equ 01h
_OPTION equ 01h
PCL equ 02h
SWR equ 03h
FSR equ 04h
PA equ 05h
TRISA equ 05h
PB equ 06h
TRISB equ 06h
EEDATA equ 08h
EECON1 equ 08h
EEADR equ 09h
EECON2 equ 09h
PCLATCH equ 0Ah
INTCON equ 0Bh
PRIZNAK equ 0Ch
INI equ 0h ;Priznak ci pri inicializacii vysielame iba horny polbyte alebo oba polbyty
MHz equ 1h ;Priznak ze frekvencia sa bude zobrazovat v MHz
NULA equ 2h ;Priznak ze zobrazovane cislo je nula
MERIAM equ 3h ;Priznak ze prebieha incrementovanie RTCC z f/4
SEK equ 1h ;Priznak ze cas sa zobrazuje v sekundach a nie v milisekundach (rovnaky ako pre MHz pretoze mikdy nebudu nastavovane naraz (neprepisu sa))
PERIODA equ 4h ;Priznak ze sa bude merat perioda
LOG1 equ 5h ;Priznak ze sa bude merat trvanie log.1
LOG0 equ 6h ;Priznak ze sa bude merat trvanie log.0
FLSB equ 0Dh ;Najnizsi byte pri pocitani impulzov
FMSB equ 0Eh ;Najvyssi byte pri pocitani impulzov (stredny je RTCC)
COUNT equ 0Fh ;Pocitadlo prepnuti pri zistovani obsahu preddelicky
TMP2 equ 10h ;\
TMP1 equ 11h ;-registre sluziace na urcenie casovych pauz pri inicializcii displaya
TMP0 equ 12h ;/
CISLA01 equ 13h ;Tu je 0-ty a 1. rad nacitaneho poctu impulzov po premene na BCD kod
CISLA23 equ 14h ;Tu je 2. a 3. rad nacitaneho poctu impulzov po premene na BCD kod
CISLA45 equ 15h ;Tu je 4. a 5. rad nacitaneho poctu impulzov po premene na BCD kod
CISLA67 equ 16h ;Tu je 6. a 7. rad nacitaneho poctu impulzov po premene na BCD kod
_STISK equ 17h ;Tu si pamatame ake tlacitko bolo stlacene
PRERUS equ 18h ;Obsah tohto registra sa pri preruseni prepise do OPTION
FLAG equ 19h ;Druhy register priznakov
KALIB equ 0h ;Priznak ze dochadza ku kalibracii citaca
_MIMO equ 1h ;Priznak ze sa vypise napis MIMO ROZSAH
_PCITAC equ 2h ;Priznak ze bude zobrazovany prosty citac
MINKAL equ 3h ;Priznak ze doslo k minimalnej kalibracii
_CITAC1G equ 4h ;Priznak ze sa vypise napis CITAC DO 1 GHz
_CIT1G equ 5h ;Priznak ze je zapnuty citac do 1GHz
KALREG equ 1Ah ;Register kde si uchovame nacitanu kalibraciu z EEPROM
NAPIS equ 1Bh ;Register kde sa urcuje ktory napis vypisat
_CITAC equ 0h ;Priznak v registry NAPIS ze sa vypise CITAC
_MERPER equ 1h ;Priznak v registry NAPIS ze sa vypise MERANIE PERIODY
_LOG1 equ 2h ;Priznak v registry NAPIS ze sa vypise TRVANIE LOG.1
_LOG0 equ 3h ;Priznak v registry NAPIS ze sa vypise TRVANIE LOG.0
_PRSCIT equ 4h ;Priznak v registry NAPIS ze sa vypise PROSTY CITAC
_KALIB equ 5h ;Priznak v registry NAPIS ze sa vypise KALIBRACIA
RTCCPOM equ 1Ch ;Pomocny register v podprograme B32_BCD (ukladame si tam zvatca RTCC)
POM1 equ 1Dh
POM2 equ 1Eh ;Pomocne registre v programe PROSTY CITAC (uchovavaju najvyssie 2 horne byty)
POM3 equ 1Fh
FMMSB equ 20h ;MSB register pre citac (viac vyznamny ako FMSB) dodany pre citac so vzorkovanim 1s
CISLA89 equ 21h ;Tu je 8. a 9. rad nacitaneho poctu impulzov po premene na BCD kod
SWRPOM equ 22h ;Odlozenie obsahu SWR pri preruseni
WPOM equ 23h ;Odlozenie obsahu W pri preruseni
F equ 01h
W equ 00h
;................................................................................................
_CP_ON EQU H'000F'
_CP_OFF EQU H'3FFF'
_PWRTE_ON EQU H'3FF7'
_PWRTE_OFF EQU H'3FFF'
_WDT_ON EQU H'3FFF'
_WDT_OFF EQU H'3FFB'
_LP_OSC EQU H'3FFC'
_XT_OSC EQU H'3FFD'
_HS_OSC EQU H'3FFE'
_RC_OSC EQU H'3FFF'
;................................................................................................
#define Z SWR,2
#define E PB,3
#define RW PB,2
#define RS PB,1
;**********************************************************************************************
list p=16f84
__CONFIG _CP_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
;**********************************************************************************************
org 00h
goto START
;**********************************************************************************************
org H'2100' ;initialize EEPROM Data
de 9,0 ;NA ADRESU 0 NAPISE CISLO "9"
;**********************************************************************************************
; PRERUSENIE
;**********************************************************************************************
ORG 04H
INT BTFSC FLAG,_PCITAC ;AK JE ZAPNUTY PROSTY CITAC VYKONAJ INT1
GOTO INT1
;TOTO PRERUSENIE PLATI PRE MERANIE LOG.1 , LOG.0 ALEBO PERIODY
BSF SWR,5 ;PREPNEME SA DO DRUHEJ STRANKY
MOVFW PRERUS
MOVWF _OPTION
BCF SWR,5 ;PREPNEME SA SPAT DO POVODNEJ STRANKY
BCF INTCON,1 ;PRERUSENIE BOLO OBSLUZENE
BSF PRIZNAK,MERIAM
RETFIE ;NAVRAT Z PRERUSENIA
INT1 movwf WPOM ;save w reg in Buffer
swapf WPOM, F ;swap it
swapf SWR,W ;get status
movwf SWRPOM ;save it
INCF POM1,F
BTFSC Z ;AK PRETIEKOL INCREMENTUJ STREDNY BYTE
INCF POM2,F
BTFSC Z ;AK PRETIEKOL INCREMENTUJ HORNY BYTE
INCF POM3,F
BCF INTCON,1 ;PRERUSENIE BOLO OBSLUZENE
swapf SWRPOM,W ;restore status
movwf SWR ; /
swapf WPOM,W ;restore W reg
RETFIE
;***********************************************************************************************
NAPIS_CITAC
ADDWF PCL,F
RETLW 'C'
RETLW 'I'
RETLW 'T'
RETLW 'A'
RETLW 'C'
RETLW ' '
RETLW 'D'
RETLW 'O'
RETLW ' '
RETLW '3'
RETLW '0'
RETLW ' '
RETLW 'M'
RETLW 'H'
RETLW 'z'
RETLW 0
NAPIS_CITAC1G
ADDWF PCL,F
RETLW 'C'
RETLW 'I'
RETLW 'T'
RETLW 'A'
RETLW 'C'
RETLW ' '
RETLW 'D'
RETLW 'O'
RETLW ' '
RETLW '1'
RETLW ','
RETLW '3'
RETLW ' '
RETLW 'G'
RETLW 'H'
RETLW 'z'
RETLW 0
NAPIS_MERANIE_PERIODY
ADDWF PCL,F
RETLW 'M'
RETLW 'E'
RETLW 'R'
RETLW 'A'
RETLW 'N'
RETLW 'I'
RETLW 'E'
RETLW ' '
RETLW 'P'
RETLW 'E'
RETLW 'R'
RETLW 'I'
RETLW 'O'
RETLW 'D'
RETLW 'Y'
RETLW 0
NAPIS_LOG1
ADDWF PCL,F
RETLW ' '
RETLW 'T'
RETLW 'R'
RETLW 'V'
RETLW 'A'
RETLW 'N'
RETLW 'I'
RETLW 'E'
RETLW ' '
RETLW 'L'
RETLW 'O'
RETLW 'G'
RETLW '.'
RETLW '1'
RETLW 0
NAPIS_LOG0
ADDWF PCL,F
RETLW ' '
RETLW 'T'
RETLW 'R'
RETLW 'V'
RETLW 'A'
RETLW 'N'
RETLW 'I'
RETLW 'E'
RETLW ' '
RETLW 'L'
RETLW 'O'
RETLW 'G'
RETLW '.'
RETLW '0'
RETLW 0
NAPIS_PROSTY_CITAC
ADDWF PCL,F
RETLW ' '
RETLW ' '
RETLW 'P'
RETLW 'R'
RETLW 'O'
RETLW 'S'
RETLW 'T'
RETLW 'Y'
RETLW ' '
RETLW 'C'
RETLW 'I'
RETLW 'T'
RETLW 'A'
RETLW 'C'
RETLW 0
NAPIS_KALIBRACIA
ADDWF PCL,F
RETLW ' '
RETLW ' '
RETLW ' '
RETLW 'K'
RETLW 'A'
RETLW 'L'
RETLW 'I'
RETLW 'B'
RETLW 'R'
RETLW 'A'
RETLW 'C'
RETLW 'I'
RETLW 'A'
RETLW 0
NAPIS_MIMO_ROZSAH
ADDWF PCL,F
RETLW ' '
RETLW ' '
RETLW 'M'
RETLW 'I'
RETLW 'M'
RETLW 'O'
RETLW ' '
RETLW 'R'
RETLW 'O'
RETLW 'Z'
RETLW 'S'
RETLW 'A'
RETLW 'H'
RETLW 0
;*************************************************************
; Podprogramy cekani
;*************************************************************
;.................................
; cekej vice nez 15 ms
;.................................
; pro inicializaci LCD
;.................................
; 15000/773 = 19,40491591203
; TMP1 = 13h (.19) TMP0= 00 .... 14693 mikrosekund
; 307/3= 102,3333333333
; TMP1 = 13h, TMP0 = 66h ..... 14999 mikrosekund
; TMP1 = 0ffh, TMP0 = 66h ..... 198891 mikrosekund
; v cekacich smyckach
;.................................
; celkem 15002 mikrosekund
;.................................
cek15m movlw 13h
movwf TMP1
movlw 66h
movwf TMP0
goto cekej
;.................................
; cekej vice nez 4,1 ms
;.................................
; pro inicializaci LCD
;.................................
; celkem 4.102 ms
;.................................
cek4m movlw 05h
movwf TMP1
movlw 4ch
movwf TMP0
goto cekej
;.................................
; cekej vice nez 1,64 ms
;.................................
; Doba pro provedeni instrukce LCD
; ClrDsp a Home
;.................................
cek1m6 movlw 1ch
movwf TMP0
movlw 03h
movwf TMP1
goto cekej
;.................................
; cekej vice nez 100 mikrosekund
;.................................
; pro inicializaci LCD
;.................................
; celkem 101 mikrosekund
;.................................
cek100 movlw 1Fh
movwf TMP0
clrf TMP1
goto cekej
;.................................
; cekej vice nez 40 mikrosekund
;.................................
; Doba pro provedeni instrukce LCD
; (mimo ClrDsp a Home)
;.................................
cek40 movlw 0Ah
movwf TMP0
clrf TMP1
;.............................................................
; Dobu urcuje obsah TMP1 a TMP0
;.............................................................
; Pro instrukcni cyklus 1 mikrosekunda je doba cekani
; v mikrosekundach
; TMP1=0, TMP0=n, cekani = 3+3*n pro n=1,2,0ff,0=256
; max. 771 mikrosekund (TMP0 = 00h)
;..................................................
; TMP1=n, TMP0=01, cekani = 6+773*n
; max. 197121 mikrosekund (TMP1=0ffh, TMP0=01h)
;..................................................
;max. 198 891 mikrosekund (TMP1=0ffh, TMP0=00h)
;.............................................................
cekej decfsz TMP0,f
goto cekej
movfw TMP1
btfsc Z
retlw 00h
decf TMP1,f
goto cekej
;*************************************************************
; Prenos dat (wrdata) a prikazu (wrcmd) do LCD
;*************************************************************
; prikaz nebo data musi byt pred volanim podprogramu ve W reg.
;.............................................................
WRDATA bsf RS ;volba Registru dat v LCD
goto wr1
WRCMD bcf RS ;volba Instrukcniho registru v LCD
wr1 bcf RW ;RW vystup bude vzdy 0
movwf TMP2 ;data pro vyslani do TMP2
bsf E ;nastav Enable
;................................
movlw 0f0h ;odmaskujeme horny polbyte
andwf TMP2,W
BTFSC RS
ADDLW b'00000010'
BTFSC RW
ADDLW b'00000100'
BTFSC E
ADDLW b'00001000'
movwf PB ;horni pulbyte dat na DB7/4
bcf E ;ukonci Enable
;................................
btfsc PRIZNAK,INI
RETURN
;................................
bsf E ;nastav Enable
swapf TMP2,F
movlw 0f0h ;odmaskujeme dolny polbyte
andwf TMP2,W
BTFSC RS
ADDLW b'00000010'
BTFSC RW
ADDLW b'00000100'
BTFSC E
ADDLW b'00001000'
movwf PB ;dolni pulbyte dat na DB7/4
bcf E ;ukonci Enable
swapf TMP2,F
btfsc RS ;pokud slo o zapis dat
goto wr2 ;cekej 40 mikrosekund
;.............................................................
movlw 01h ;pokud slo o instrukci Display
subwf TMP2,W ;Clear, cekej 1.64 ms
bz wr3
movlw 02h ;pokud slo o instrukci Home,
subwf TMP2,W ;cekej 1.64 ms
bz wr3
movlw 03h ;pokud slo o instrukci Home,
subwf TMP2,W ;cekej 1.64 ms
bz wr3
;.............................................................
wr2 call cek40 ;cekej 40 mikrosekund
return
;.............................................................
wr3 call cek1m6 ;cekej 1.6 ms
return
;*************************************************************
; inicializace LCD po zapnuti
;*************************************************************
INILCD bsf PRIZNAK,INI ;Bude sa vysielat iba horny polbyte
call cek15m
movlw 30h
call WRCMD
call cek4m
movlw 30h
call WRCMD
call cek100
movlw 30h
call WRCMD
call cek40
bcf PRIZNAK,INI ;Bude sa vysielat horny aj dolny polbyte
movlw 28h ;4 bitova komunikacia,2 riadky,znak 5x7
call WRCMD
movlw 08h ;Display OFF
call WRCMD
movlw 01h ;Display ON
call WRCMD
movlw 06h ;Inkrementace, normalni mod
call WRCMD
movlw 0ch ;Zapni display
call WRCMD
;............................
return
;************ PODPROGRAM ,KTORY INCREMENTJE REGISTER FMSB POCAS MERACEJ PERIODY **************
INCFMSB MOVLW d'216'
MOVWF TMP0
MOVLW d'99'
MOVWF TMP1
MOVLW d'2'
MOVWF TMP2
SLUCKA BTFSS INTCON,2 ;DOSLO K PRETECENIU RTCC?
GOTO KOMPENZ ;NIE => KOMPENZUJ CAS TRVANIA INCREMENTACIE A MAZANIA PRIZNAKU
BCF INTCON,2 ;ANO => INCREMENTUJ REGISTER FMSB A ZMAZ PRIZNAK PRETECENIA
INCFSZ FMSB,F
GOTO SLUCKA2
INCF FMMSB,F
SLUCKA2 GOTO SLUCKA1
KOMPENZ NOP ;PO SKOKU NA KOMPENZ BUDE SLUCKA TRVAT ROVNAKO DLHO AKO
NOP ;KED SA INCREMENTUJE REGISTER FMSB A NULUJE PRIZNAK
NOP
GOTO SLUCKA1
SLUCKA1 DECFSZ TMP0,F
GOTO SLUCKA
DECFSZ TMP1,F
GOTO SLUCKA
DECFSZ TMP2,F
GOTO SLUCKA
RETURN
;**********************PODPROGRAM CO ZISTI OBSAH PREDDELICKY ************************************
PREDDEL movfw RTCC ;hodnotu z RTCC uloz v registri TMP0
movwf TMP0
clrf COUNT ;vynuluj pocitadlo prepnuti
clrf FLSB ;vynuluj najnizsi byte frekvencie
PREPNI
incf COUNT,F ;incrementuj pocitadlo prepnuti
;.................OSETERNIE NULY........................
btfsc Z ;ak nacital 256 impulzov (count = 0) tak to znamena ze v preddelicke bola 0
goto PREPNI1 ;teda FLSB ostane 0 a ani RTCC sa este nezmenilo => VRAT POVODNU HODNOTU DO RTCC
;.......................................................
bcf PA,3 ;prepni vstup
NOP
bsf PA,3 ; /
movfw RTCC ;pozri sa ci sa zmenila hodnota v RTCC
subwf TMP0,W ; /
btfsc Z
goto PREPNI ;nezmenila -> opat prepni
comf COUNT,F ;zmenila => zneguj count
incf COUNT,W ;a pripocitaj 1 (tak dostaneme pocet prepnuti)
movwf FLSB ;hodnotu z preddelicky uchovaj v registry FLSB
PREPNI1 movfw TMP0
movwf RTCC ;vrat povodnu hodnotu do RTCC
return
;********************PODROGRAM CO PREMENI 32 BITOVE CISLO NA BCD KOD ****************************
B32_BCD bcf SWR,0 ;VYNULUJ BIT PRENOSU
movlw d'32'
movwf COUNT
movlw 6
btfsc FLAG,_CIT1G ;AK JE ZAPNUTY CITAC DO 1 GHz TAK TAK TOTO JE DELENIE 64
addwf COUNT,F ;POZN. (NAMIESTO 32 BITOVEHO REGISTRA PREDPOKLADAME 32+6 BITOVY (6 BITOV JE V PREDDELICKE SAB ...) A POSLEDNE 2 RADY NEZOBRAZIME)
clrf CISLA01
clrf CISLA23
clrf CISLA45
clrf CISLA67
clrf CISLA89
loop32 rlf FLSB, F
rlf RTCCPOM, F
rlf FMSB, F
rlf FMMSB,F
rlf CISLA01, F
rlf CISLA23, F
rlf CISLA45, F
rlf CISLA67, F
rlf CISLA89, F
;
decfsz COUNT, F
goto DEKKOR ;dekadicka korekcia sa urobi s kazdym registrom
BTFSS FLAG,_CIT1G
RETURN ;AK NEMERIAME DO 1.3 GHz TAK KONIEC
;................................................................................................
;MERIAME DO 1.3 GHz => POSUN VYSLEDOK O 2 RADY DO PRAVA - TYM ZATEMNIME POSLEDNE 2 RADY PRI
;MERANI DO 1.3 GHz KTORE SU NEPRESNE VPLYVOM PREDDELICKY (TENTO POSUN JE ZOHLADNENY V ZOBRAZOVANI)
MOVFW CISLA23
MOVWF CISLA01 ;CISLA23 -> CISLA01
MOVFW CISLA45
MOVWF CISLA23 ;CISLA45 -> CISLA23
MOVFW CISLA67
MOVWF CISLA45 ;CISLA67 -> CISLA45
MOVFW CISLA89
MOVWF CISLA67 ;CISLA89 -> CISLA67
RETURN
;................................................................................................
DEKKOR movlw CISLA01
movwf FSR
call BCDKOR ;BCD korekcia
movlw CISLA23
movwf FSR
call BCDKOR ;BCD korekcia
movlw CISLA45
movwf FSR
call BCDKOR ;BCD korekcia
movlw CISLA67
movwf FSR
call BCDKOR ;BCD korekcia
movlw CISLA89
movwf FSR
call BCDKOR ;BCD korekcia
goto loop32
;
BCDKOR movlw 3
addwf 0,W
movwf TMP0
btfsc TMP0,3 ; test ci je vysledok > 7
movwf 0
movlw 30
addwf 0,W
movwf TMP0
btfsc TMP0,7 ; test ci je vysledok > 7
movwf 0 ; uloz ako MSD
RETLW 0
;******************************PODPROGRAM CO VYPISE T= "CAS" ms*********************************
ZOBRAZ MOVLW 02H
CALL WRCMD
MOVLW 'T'
CALL WRDATA
MOVLW '='
CALL WRDATA
MOVLW ' '
CALL WRDATA
BTFSC PRIZNAK,SEK ;AK SA NEZOBRAZUJU SEKUNDY TAK ZOBRAZ 3 PRAZDNE MIESTA
GOTO ZOBR
MOVLW ' '
CALL WRDATA
MOVLW ' '
CALL WRDATA
MOVLW ' '
CALL WRDATA
GOTO ZOBRAZ2 ;PRESKOC ZOBRAZOVANIE RADU SEKUND
ZOBR MOVFW CISLA89
ANDLW 0FH ;ODMASKUJ 8.RAD
BTFSC Z
BSF PRIZNAK,NULA ;AK JE TO NULA TAK NASTAV PRIZNAK
BTFSC Z
GOTO ZOBR1 ;A NEZOBRAZUJ JU
ADDLW 30H
ZOBR1 CALL WRDATA
ZOBRAZ1 SWAPF CISLA67,W
ANDLW 0FH ;ODMASKUJ 7. RAD
BTFSS Z
GOTO ZOBRAZD ;AK JE NENULOVY TAK HO ZOBRAZ
GOTO ZOBRAZC ;AK JE TO NULA TAK JU NEZOBRAZUJ
ZOBRAZD BCF PRIZNAK,NULA ;VYPNI PRIZNAK NULA
ADDLW 30H
ZOBRAZC CALL WRDATA
MOVFW CISLA67
ANDLW 0FH ;ODMASKUJ 6. RAD - PRI ZOBRAZOVANI SEKUND JE VZDY ZOBRAZENY
ADDLW 30H
CALL WRDATA
MOVLW ',' ;AK SA ZOBRAZUJU SEKUNDY TAK ZOBRAZ DESATINNU CIARKU
CALL WRDATA
ZOBRAZ2 SWAPF CISLA45,W
ANDLW 0FH ;ODMASKUJ 5.RAD
BTFSC PRIZNAK,SEK ;AK JE CAS V SEKUNDACH TAK CISLO URCITE ZOBRAZ
GOTO ZOBRAZ3
BTFSS Z ;AK JE TO NENULOVE CISLO TAK HO ZOBRAZ
GOTO ZOBRAZ3
BSF PRIZNAK,NULA ;AK JE TO NULA TAK NASTAV PRIZNAK
GOTO ZOBRAZ4
ZOBRAZ3 ADDLW 30H
ZOBRAZ4 CALL WRDATA
BTFSS PRIZNAK,SEK
GOTO ZOBRAZ5
MOVLW 0C0H
CALL WRCMD ;AK JE CAS V SEKUNDACH TAK SKOC DO NOVEHO RIADKU
ZOBRAZ5 MOVFW CISLA45
ANDLW 0FH ;ODMASKUJ 4.RAD
BTFSC PRIZNAK,SEK ;AK JE CAS V SEKUNDACH TAK CISLO URCITE ZOBRAZ
GOTO ZOBRAZ6
BTFSS Z ;AK JE TO NENULOVE CISLO TAK HO ZOBRAZ
GOTO ZOBRAZ6
BTFSC PRIZNAK,NULA ;AK JE TO NULA A AJ PREDNOU BOLA NULA TAK NIC NEZOBRAZUJ
GOTO ZOBRAZ7
ZOBRAZ6 ADDLW 30H
ZOBRAZ7 CALL WRDATA
BTFSC PRIZNAK,SEK
GOTO ZOBRAZ8
MOVLW 0C0H
CALL WRCMD ;AK JE CAS V MILISEKUNDACH TAK SKOC DO NOVEHO RIADKU
;.........................ODTERAZ UZ BUDU VSETKY CISLA ZOBRAZENE...............................
ZOBRAZ8 SWAPF CISLA23,W
ANDLW 0FH ;ODMASKUJ 3. RAD
ADDLW 30H
CALL WRDATA
BTFSC PRIZNAK,SEK
GOTO ZOBRAZ9
MOVLW ','
CALL WRDATA ;AK JE CAS V MILISEKUNDACH TAK ZOBRAZ DESATINNU CIARKU
ZOBRAZ9 MOVFW CISLA23
ANDLW 0FH ;ODMASKUJ 2. RAD
ADDLW 30H
CALL WRDATA
SWAPF CISLA01,W
ANDLW 0FH ;ODMASKUJ 1. RAD
ADDLW 30H
CALL WRDATA
MOVFW CISLA01
ANDLW 0FH ;ODMASKUJ 0-TY RAD
ADDLW 30H
CALL WRDATA
MOVLW ' '
CALL WRDATA
BTFSC PRIZNAK,SEK
GOTO ZOBRAZA
MOVLW 'm'
CALL WRDATA ;AK JE CAS V MILISEKUNDACH TAK ZOBRAZ m
GOTO ZOBRAZB
ZOBRAZA MOVLW ' '
CALL WRDATA ;AK JE CAS V SEKUNDACH ZOBRAZ MEDZERU
ZOBRAZB MOVLW 's'
CALL WRDATA ;ZOBRAZ s PRE OBE ALTERNATIVY
RETURN ;VRAT SA
;************** PODPROGRAM ,KTOREHO VYSTUPOM JE PLATNE TLACITKO ********************************
STISK MOVLW d'100'
MOVWF COUNT
STISK1 MOVFW PA
ANDLW 03H
SUBWF _STISK,W ;POZRI SA CI JE STISK ZHODNY S NACITANYM STAVO TLACITOK
BTFSS Z
GOTO ZMENA ;NIE => ZMEN STISK
CALL cek4m
DECFSZ COUNT,F
GOTO STISK1 ;400 ms BOL NA VSTUPE NEZMENENY STAV
MOVFW PA
BTFSC FLAG,KALIB
RETURN ;PRI KALIBRACII NAM NULOVY VYSTUP NEVADI, OSETRUJEME IBA ODSKOK
ANDLW 03H
BTFSC Z ;SKONTROLUJ ESTE CI TO BOL NENULOVY STAV
GOTO STISK ;NEBOL A NAS ZAUJIMA IBA STLACENE TLACITKO => STISK
RETURN ;SKONCI LEBO NA VSTUPE JE PLATNY NENULOVY STAV
ZMENA MOVFW PA ;PA DO STISK
ANDLW 03H
MOVWF _STISK
MOVLW d'100' ;ZMENIL SA STAV TLACITOK OPAT SA BUDE CAKAT 400 ms
MOVWF COUNT
GOTO STISK1
;*************************PODROGRAM CO VYPISE SPRAVU NA DISPLAY********************************
SPRAVA MOVLW 01H
CALL WRCMD ;VYNULUJ DISPLAY A DD RAM NA 0
CLRF COUNT ;COUNT UKAZUJE NA PISMENO KTORE PRAVE ZOBRAZUJEME
SPRAVA2 MOVFW COUNT
BTFSC NAPIS,_CITAC
CALL NAPIS_CITAC
BTFSC FLAG,_CITAC1G
CALL NAPIS_CITAC1G
BTFSC NAPIS,_MERPER
CALL NAPIS_MERANIE_PERIODY
BTFSC NAPIS,_LOG1
CALL NAPIS_LOG1
BTFSC NAPIS,_LOG0
CALL NAPIS_LOG0
BTFSC NAPIS,_KALIB
CALL NAPIS_KALIBRACIA
BTFSC NAPIS,_PRSCIT
CALL NAPIS_PROSTY_CITAC
BTFSC FLAG,_MIMO
CALL NAPIS_MIMO_ROZSAH
;....................................
MOVWF TMP0 ;TOTO JE TU LEN NATO ABY SME ZISTILI CI W=0
MOVFW TMP0 ;LEBO INSTRUKCIA RETLW NEMENI STAVOVE BITY
;....................................
BTFSC Z ;POZRI SA CI NIE JE KONIEC SPRAVY (W=0)
RETURN ;JE => SKONCI
CALL WRDATA
MOVLW 07H
SUBWF COUNT,W ;POZRI SA CI NETREBA SKOCIT DO DRUHEHO RIADKA
BTFSS Z
GOTO SPRAVA1
MOVLW 0C0H
CALL WRCMD ;SKOK DO DRUHEHO RIADKU
SPRAVA1 MOVLW 01H
ADDWF COUNT,F ;POSUN SA NA DRUHY RIADOK SPRAVY
GOTO SPRAVA2
;**********************************************************************************************
;............................................START............................................
;**********************************************************************************************
START BSF SWR,5 ;PREPNI SA DO STRANKY 1
MOVLW b'00000001'
MOVWF TRISB ;V PB JE IBA RB0/INT VSTUP (PRE MERANIE PERIODY)
MOVLW b'00010011'
MOVWF TRISA ;VSTUPY SU PA4/RTCC A PA0 A PA1 (VSTUPY SPINACOV)
BCF SWR,5 ;VRAT SA SPAT DO STRANKY 0
CALL INILCD
BSF PA,2 ;VYPNI PREDDELICKU
CLRF PRIZNAK
CLRF FLAG
CLRF NAPIS
CLRF FMMSB
CLRF FMSB
CLRF RTCCPOM
CLRF FLSB ;TOTO JE TU NATO ABY SA PRI VOLBE CITAC HNED ZOBRAZILO f= 0.000 kHz
;***NAKONFIGURUJEME RTCC CIM ZAROVEN VYNULUJE PREDDELICKU A NA CITACI SA ZOBRAZI f= 0.000 kHz***
BSF SWR,5 ;PREPNEME SA DO DRUHEJ STRANKY
MOVLW 0A7H
MOVWF _OPTION ;V OPTION REGISTY ZAKAZANY PULL-UP,ZDROJ PRE RTCC JE RA4,PREDDEL. PRED RTCC(256)
BCF SWR,5 ;VRATIME SA DO POVODNEJ STRANKY
;...............................NACITANIE KALIBRACIE............................................
;KALIBRACIU NACITAVAME PRETO LEBO PO SPUSTENI CITACA SKOCIME DO STREDU PODPROGRAMU CITAC ABY SME
;HNED ZOBRAZILI f= 0.000 kHz CIM PRESKOCIME NACITANIE KALIBRACNEHO REGISTRA
CLRF EEADR ;NASTAV EEPROM ADRESU NA 0
BSF SWR,5
BSF EECON1,0 ;POVOL CITANIE
BCF SWR,5
MOVFW EEDATA
MOVWF KALREG ;NACITANU HODNOTU ULOZ DO KALIBRACNEHO REGISTRA
;......TERAZ ZAPISEME NA ADRESU DISPLAYA "0" MEDZERU (NESKOR VYUZIJEME NA POTLACENIE NULY).......
MOVLW 08H
MOVWF COUNT
MOVLW 40H
CALL WRCMD ;ADRESA 0 V CG RAM (ZAPISEME NA NU MEDZERU)
CYCLE MOVLW 00H
CALL WRDATA
DECFSZ COUNT,F
GOTO CYCLE
;****************************TERAZ VYTVORIME MENU*********************************************
CIT BSF NAPIS,_CITAC
CALL SPRAVA ;NAPIS CITAC DO 30 MHz
BCF NAPIS,_CITAC
CALL STISK ;SKONCI KED BUDE NIEKTORE TLACITKO PLATNE ALEBO NA RESET
BTFSC PA,0 ;AK NEBOLO STLACENE TLACITKO PA0 (VYBER) , TAK TEDA MUSELO BYT STLACENE TO DRUHE (POTVRDENIE)
GOTO CIT1G
GOTO ZOBCIT ;POTVRDILI SME VOLBU CITAC DO 30 MHz - SKOCIME DO STREDU PROGRAMU ABY SME HNED ZOBRAZILI f= 0.000 kHz (INAC BY SA TO ZOBRAZILO AZ PO SEKUNDE MERANIA)
CIT1G BSF FLAG,_CITAC1G
CALL SPRAVA ;NAPIS CITAC DO 1.3 GHz
BCF FLAG,_CITAC1G
CALL STISK ;SKONCI KED BUDE NIEKTORE TLACITKO PLATNE ALEBO NA RESET
BTFSC PA,0 ;AK NEBOLO STLACENE TLACITKO PA0 (VYBER) , TAK TEDA MUSELO BYT STLACENE TO DRUHE (POTVRDENIE)
GOTO PER
BSF FLAG,_CIT1G ;NASTAVIME PRIZNAK ZE SA BUDE MERAT FREKVENCIA DO 1 GHz
GOTO ZOBCIT ;POTVRDILI SME VOLBU CITAC DO 1.3 GHz - SKOCIME DO STREDU PROGRAMU ABY SME HNED ZOBRAZILI f= 0.000 kHz (INAC BY SA TO ZOBRAZILO AZ PO SEKUNDE MERANIA)
PER BSF NAPIS,_MERPER
CALL SPRAVA ;NAPIS MERANIE PERIODY
BCF NAPIS,_MERPER
CALL STISK ;SKONCI KED BUDE NIEKTORE TLACITKO PLATNE ALEBO NA RESET
BTFSC PA,0 ;AK NEBOLO STLACENE TLACITKO PA0 (VYBER) , TAK TEDA MUSELO BYT STLACENE TO DRUHE (POTVRDENIE)
GOTO LOG.1
BSF PRIZNAK,PERIODA
GOTO STOPKY ;POTVRDILI SME VOLBU CITAC
LOG.1 BSF NAPIS,_LOG1
CALL SPRAVA ;NAPIS TRVANIE LOG.1
BCF NAPIS,_LOG1
CALL STISK ;SKONCI KED BUDE NIEKTORE TLACITKO PLATNE ALEBO NA RESET
BTFSC PA,0 ;AK NEBOLO STLACENE TLACITKO PA0 (VYBER) , TAK TEDA MUSELO BYT STLACENE TO DRUHE (POTVRDENIE)
GOTO LOG.0
BSF PRIZNAK,LOG1
GOTO STOPKY ;POTVRDILI SME VOLBU CITAC
LOG.0 BSF NAPIS,_LOG0
CALL SPRAVA ;NAPIS TRVANIE LOG.0
BCF NAPIS,_LOG0
CALL STISK ;SKONCI KED BUDE NIEKTORE TLACITKO PLATNE ALEBO NA RESET
BTFSC PA,0 ;AK NEBOLO STLACENE TLACITKO PA0 (VYBER) , TAK TEDA MUSELO BYT STLACENE TO DRUHE (POTVRDENIE)
GOTO PROSCIT
BSF PRIZNAK,LOG0
GOTO STOPKY ;POTVRDILI SME VOLBU CITAC
PROSCIT BSF NAPIS,_PRSCIT
CALL SPRAVA ;NAPIS PROSTY CITAC
BCF NAPIS,_PRSCIT
CALL STISK ;SKONCI KED BUDE NIEKTORE TLACITKO PLATNE ALEBO NA RESET
BTFSC PA,0 ;AK NEBOLO STLACENE TLACITKO PA0 (VYBER) , TAK TEDA MUSELO BYT STLACENE TO DRUHE (POTVRDENIE)
GOTO KLB
BSF FLAG,_PCITAC
GOTO PROSTYCITAC ;POTVRDILI SME VOLBU PROSTY CITAC
KLB BSF NAPIS,_KALIB
CALL SPRAVA ;NAPIS KALIBRACIA
BCF NAPIS,_KALIB
CALL STISK ;SKONCI KED BUDE NIEKTORE TLACITKO PLATNE ALEBO NA RESET
BTFSC PA,0 ;AK NEBOLO STLACENE TLACITKO PA0 (VYBER) , TAK TEDA MUSELO BYT STLACENE TO DRUHE (POTVRDENIE)
GOTO CIT ;VRAT SA A ZOBRAZUJ OPAT MENU
BSF FLAG,KALIB
GOTO ZOBCIT ;POTVRDILI SME VOLBU CITAC - SKOCIME DO STREDU PROGRAMU ABY SME HNED ZOBRAZILI f= 0.000 kHz ( INAC BY SA TO ZOBRAZILO AZ PO SEKUNDE MERANIA)
;***********************************************************************************************
;........................................CITAC..................................................
;***********************************************************************************************
CITAC CLRF PRIZNAK
CLRF INTCON ;ZAKAZE AKEKOLVEK PRERUSENIE
CLRF FMSB
CLRF RTCC
BTFSC FLAG,_CIT1G
BCF PA,2 ;AK JE ZAPNUTY CITAC DO 1 GHz TAK ZAPNI PREDDELICKU
BSF SWR,5 ;PREPNEME SA DO DRUHEJ STRANKY
MOVLW 0A7H
MOVWF _OPTION ;V OPTION REGISTY ZAKAZANY PULL-UP,ZDROJ PRE RTCC JE RA4,PREDDEL. PRED RTCC(256)
BSF TRISA,3 ;PREPNE RA3 NA VSTUP CIM UVOLNI VSTUP CITACA
BCF SWR,5 ;VRATIME SA DO POVODNEJ STRANKY
;...............................NACITANIE KALIBRACIE............................................
CLRF EEADR ;NASTAV EEPROM ADRESU NA 0
BSF SWR,5
BSF EECON1,0 ;POVOL CITANIE
BCF SWR,5
MOVFW EEDATA
MOVWF KALREG ;NACITANU HODNOTU ULOZ DO KALIBRACNEHO REGISTRA
;...............................................................................................
CALL INCFMSB
MOVLW 02H
MOVWF PCLATCH ;SME V DRUHEJ STRANKE PROGRAMU
MOVFW KALREG
ADDWF PCL,F ;PRIPOCITAJ KALREG K PCL(TYM SA O DEFINOVANU DOBU 1us PREDLZI MERACI CAS)
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
;................................................................................................
BCF PA,3 ;VYSTUP RA3 NASTAVI NA 0
BSF SWR,5 ;PREPNEME SA DO DRUHEJ STRANKY
BCF TRISA,3 ;PREPNE RA3 NA VYSTUP CIM ZAKAZE VSTUP CITACA
BCF SWR,5 ;VRATIME SA DO POVODNEJ STRANKY
BTFSC INTCON,2
INCF FMSB,F ;ESTE RAZ POZRI CI NEPRETIKOL RTCC
CALL PREDDEL ;ZISTI OBSAH V PREDDELICKE
MOVFW RTCC
MOVWF RTCCPOM
ZOBCIT CALL B32_BCD ;A CELE 32 BITOVE CISLO PREMENI NA BCD KOD
;...............................................................................................
MOVFW CISLA67
BTFSS Z ;AK JE REGISTER NENULOVY TAK FREKVENCIA JE V MHz
BSF PRIZNAK,MHz
BTFSC FLAG,_CIT1G ;PRI MERANI DO 1 GHz BUDEME DESATINNU CIARKU ZOBRAZOVAT INDE
BCF PRIZNAK,MHz
;........................TERAZ NACITANE CISLO ZOBRAZIME.........................................
MOVLW 02H
CALL WRCMD ;DD RAM =0,OBSAH BEZ ZMENY
MOVLW 'f'
CALL WRDATA
MOVLW '='
CALL WRDATA
MOVLW ' '
CALL WRDATA
SWAPF CISLA67,F
MOVFW CISLA67
ANDLW 0FH ;ODMASKUJ 7. RAD
BTFSC Z
BSF PRIZNAK,NULA ;AK JE TO NULA TAK NASTAV PRIZNAK
BTFSS Z
ADDLW 30H ;ZOBRAZ HO IBA AK JE NENULOVE
CALL WRDATA
SWAPF CISLA67,F
MOVFW CISLA67
ANDLW 0FH ;ODMASKUJ 6. RAD
BTFSS Z
GOTO CIT2 ;AK JE NENULOVE TAK HO ZOBRAZ
BTFSC PRIZNAK,NULA ;INAK POZRI CI AJ PRED NIM BOLA NULA
GOTO CIT3 ;BOLA NEZOBRAZUJHO
CIT2 BCF PRIZNAK,NULA ;NENULOVE CISLO => VYPNI PRIZNAK NULY
ADDLW 30H ;AK JE NENULOVE TAK HO ZOBRAZ
CIT3 CALL WRDATA
BTFSS PRIZNAK,MHz
GOTO SKOK1
MOVLW ',' ;AK SA FREKVENCIA ZOBRAZUJE V MHz TAK NAPIS DESATINNU CIARKU
CALL WRDATA
SKOK1 SWAPF CISLA45,F
MOVFW CISLA45
ANDLW 0FH ;ODMASKUJ 5. RAD
BTFSC PRIZNAK,MHz ;AK SA FREKVENCIA ZOBRAZUJE V MHz TAK TOTO MIESTO URCITE ZOBRAZ
GOTO SKOK2
BTFSS Z
GOTO SKOK2 ;AK JE CISLO NENULOVE TAK HO ZOBRAZ
BTFSC PRIZNAK,NULA ;POZRI CI PRED NIM BOLY NULY
GOTO SKOK3 ;BOLY => NEZOBRAZUJ HO
SKOK2 BCF PRIZNAK,NULA ;NENULOVE CISLO => VYNULUJ PRIZNAK NULY
ADDLW 30H
SKOK3 CALL WRDATA
SWAPF CISLA45,F
MOVFW CISLA45
ANDLW 0FH ;ODMASKUJ 4. RAD
BTFSC PRIZNAK,MHz ;AK JE f V MHz TAK CISLO URCITE ZOBRAZ
GOTO SKOK4
BTFSC FLAG,_CIT1G ;AK MERIAME V ROZSAHU DO 1,3 GHz TAK TOTO MIESTO URCITE ZOBRAZ (JEDNOTKY MHz)
GOTO SKOK4
BTFSS PRIZNAK,NULA ;AK PRED NIM BOLO NENULOVE CISLO TAK HO ZOBRAZ
GOTO SKOK4
BTFSC Z ;AK JE TO NULA TAK NIC NEZOBRAZUJ
GOTO SKOK5
SKOK4 BCF PRIZNAK,NULA ;NENULOVE CISLO => VYNULUJ PRIZNAK NULY
ADDLW 30H
SKOK5 CALL WRDATA
BTFSC PRIZNAK,MHz ;AK ZOBRAZUJEME CISLO V MHz TAK TERAZ SKOC DO DRUHEHO RIADKU
GOTO SKOK5.1
BTFSS FLAG,_CIT1G ;AK MERIAME V ROZSAHU DO 1,3 GHz TAK
GOTO SKOK6
MOVLW ','
CALL WRDATA ;DAJ DESATINNU CIARKU A
SKOK5.1 MOVLW 0C0H ;PRESKOC DO DRUHEHO RIADKU
CALL WRCMD
SKOK6 SWAPF CISLA23,F
MOVFW CISLA23
ANDLW 0FH ;ODMASKUJ 3.RAD (JE ZOBRAZENY VZDY)
ADDLW 30H
CALL WRDATA
BTFSC PRIZNAK,MHz ;AK NEMERIAME MHz A AK ANI
GOTO SKOK7
BTFSC FLAG,_CIT1G ;NEMERIAME V ROZSAHU DO 1,3 GHz TAK
GOTO SKOK7
MOVLW 0C0H ;SKOK DO DRUHEHO RIADKA
CALL WRCMD
MOVLW ','
CALL WRDATA ;A DAJ DESATINNU CIARKU
SKOK7 SWAPF CISLA23,F
MOVFW CISLA23
ANDLW 0FH ;ODMASKUJ 2.RAD A ZOBRAZ HO (JE ZOBRAZENY VZDY)
ADDLW 30H
CALL WRDATA
SWAPF CISLA01,F
MOVFW CISLA01
ANDLW 0FH ;ODMASKUJ 1. RAD
ADDLW 30H
CALL WRDATA
SWAPF CISLA01,F
MOVFW CISLA01
ANDLW 0FH ;ODMASKUJ 0-ty RAD
ADDLW 30H
CALL WRDATA
MOVLW ' '
CALL WRDATA
BTFSC FLAG,_CIT1G ;PRI MERANI DO 1 GHz JE FREKVENCIA VZDY V MHz
BSF PRIZNAK,MHz
BTFSC PRIZNAK,MHz
GOTO SKOK8
MOVLW 'k'
CALL WRDATA
GOTO SKOK9
SKOK8 MOVLW 'M'
CALL WRDATA
SKOK9 MOVLW 'H'
CALL WRDATA
MOVLW 'z'
CALL WRDATA
BTFSS FLAG,KALIB
GOTO CITAC ;AK NEPREBIEHA KALIBRACIA ZACNI NOVE MERANIE
CALL STISK ;NACITANY PORT JE VO W
BTFSC Z
GOTO CITAC ;AK NEDOSLO K STLACENIU KLAVESU (W=0) ZACNI NOVE MERANIE
BTFSC _STISK,0
INCF KALREG,F
BTFSC _STISK,1
DECF KALREG,F
;......................OSETRENIE CI JE KALIBRACIA V INTRVALE <0,30>.............................
INCF KALREG,W
BTFSS Z ;AK DOSLO K PODTECENIU (KALREG=FF) TAK TERAZ SA ZVYSIL NA 0 =>
GOTO CITAC4 ;SKONTROLUJ AJ HORNU HRANICU
BCF FLAG,MINKAL ;VYPISEME MAX. KALIBRACIA
CLRF KALREG ;0 -> KALREG
GOTO CITAC2
CITAC4 MOVLW d'31'
SUBWF KALREG,W ;AK DOSLO K PRETECENIU (KALREG >31) TAK VYPIS SPRAVU
BTFSS Z
GOTO ZAPIS ;AK JE KALIBRACIA V NORME TAK JU ZAPIS
BSF FLAG,MINKAL ;SPOSOBI ZE VYPISE MIN. KALIBRACIA
MOVLW d'30'
MOVWF KALREG ;30 -> KALREG
CITAC2
MOVLW 01H
CALL WRCMD
MOVLW 'M'
CALL WRDATA
BTFSS FLAG,MINKAL
GOTO KAL1
MOVLW 'I'
GOTO KAL2
KAL1 MOVLW 'A'
KAL2 CALL WRDATA
BTFSS FLAG,MINKAL
GOTO KAL3
MOVLW 'N'
GOTO KAL4
KAL3 MOVLW 'X'
KAL4 CALL WRDATA
MOVLW '.'
CALL WRDATA
MOVLW ' '
CALL WRDATA
MOVLW 'K'
CALL WRDATA
MOVLW 'A'
CALL WRDATA
MOVLW 'L'
CALL WRDATA
MOVLW 0C0H
CALL WRCMD ;SKOK DO DRUHEHO RIADKU
MOVLW 'I'
CALL WRDATA
MOVLW 'B'
CALL WRDATA
MOVLW 'R'
CALL WRDATA
MOVLW 'A'
CALL WRDATA
MOVLW 'C'
CALL WRDATA
MOVLW 'I'
CALL WRDATA
MOVLW 'A'
CALL WRDATA
MOVLW d'66'
MOVWF TMP2
CITAC3 CALL cek15m
DECFSZ TMP2,F ;CAKAJ SEKUNDU A POTOM ZAPIS KALREG DO EEPROM
GOTO CITAC3
;............................ZAPIS NOVEJ KALIBRACIE DO EEPROM...................................
ZAPIS CLRF EEADR
MOVFW KALREG
MOVWF EEDATA ;KALREG ULOZ NA ADRESU 0
BSF SWR,5
BSF EECON1,2 ;POVOLI ZAPIS DO EEPROM
MOVLW 55H
MOVWF EECON2
MOVLW 0AAH
MOVWF EECON2
BSF EECON1,1 ;ZAHAJI ZAPIS DO EEPROM
; BCF EECON1,2 ;ZAKAZE ZAPIS DO EEPROM
BCF SWR,5
;...............................................................................................
GOTO CITAC
;***********************************************************************************************
;........................................STOPKY..................................................
;***********************************************************************************************
STOPKY BCF PA,3
BSF SWR,5 ;PREPNI SA DO DRUHEJ STRANKY
MOVLW b'00010011'
MOVWF TRISA ;NASTAV RA3 NA VYSTUP ABY BLOKOVAL VSTUP RTCC
MOVLW b'11100111'
MOVWF _OPTION ;ZDROJOM PRE RTCC JE RA4
BCF SWR,5 ;PREPNEME SA DO POVODNEJ STRANKY
;ZATIAL SA NIC NEDEJE LEBO RTCC SA INCREMENTUJE Z RA4 CO JE VSAK ZAKAZANE PREPNUTIM RA3 NA VYSTUP
CLRF FLSB
CLRF RTCC
CLRF FMSB
CLRF CISLA01
CLRF CISLA23
CLRF CISLA45
CLRF CISLA67
CLRF CISLA89
CALL ZOBRAZ ;ZOBRAZI T= 0,000 ms ABY NA DISPLEJI NASVIETIL NAPIS
STOPKY1 CLRF FLSB ;OPAT VYMAZEME DOLEZITE REGISTRE PRE DALSIE MERANIE
CLRF RTCC ;UDAJ NA DISPLAY-i SA VSAK NEZMENI
CLRF FMSB
CLRF FMMSB
CLRF CISLA01
CLRF CISLA23
CLRF CISLA45
CLRF CISLA67
CLRF CISLA89
BCF PRIZNAK,NULA ;PRIZNAK POUZIVANY NA POTLACENIE NULY
BCF FLAG,KALIB ;PRIZNAK KTORY DOVOLUJE PODPROGRAMU STISK VRATIT AJ NULOVU HODNOTU
BSF SWR,5 ;PREPNI SA DO DRUHEJ STRANKY
BTFSC PRIZNAK,LOG1
MOVLW b'11100111' ;ZDROJOM PRE RTCC JE RA4,PRERUSENIE SA AKTIVUJE CELOM
BTFSC PRIZNAK,LOG0
MOVLW b'10100111' ;ZDROJOM PRE RTCC JE RA4,PRERUSENIE SA AKTIVUJE TYLOM
BTFSC PRIZNAK,PERIODA
MOVLW b'11100111'
MOVWF _OPTION ;ZDROJOM PRE RTCC JE RA4,PRERUSENIE SA AKTIVUJE CELOM
BCF SWR,5 ;PREPNEME SA DO POVODNEJ STRANKY
BCF PRIZNAK,MERIAM ;ZNULUJ PRIZNAK ZE PREBIEHA MERANIE (NASTAVI SA PRI PRERUSENI)
BTFSC PRIZNAK,LOG1 ;TOTO NASTAVENIE PLATI PRE MERANIE TRVANIA LOG1
MOVLW B'10000111' ;ZDROJOM PRE RTCC JE f/4,PRERUSENIE SA AKTIVUJE TYLOM
BTFSC PRIZNAK,LOG0 ;TOTO NASTAVENIE PLATI PRE MERANIE TRVANIA LOG0
MOVLW B'11000111' ;ZDROJOM PRE RTCC JE f/4,PRERUSENIE SA AKTIVUJE CELOM
BTFSC PRIZNAK,PERIODA ;TOTO NASTAVENIE PLATI PRE MERANIE PERIODY
MOVLW b'11000111' ;PREPISOM OBSAHU TOHTO REGISTRA DO OPTION PRI PRERUSENI
MOVWF PRERUS ;SA PREPNE VSTUP RTCC Z RA4 NA f/4 A ZACNE SA MERANIE,PRERUSENIE SA AKLIVUJE CELOM
MOVLW b'10010000'
MOVWF INTCON ;POVOLIME PRERUSENIE OD VONKAJSIEHO PRERUSENIA
CYK BTFSS PRIZNAK,MERIAM ;CAKAME KYM NEZACNE MERANIE (DOJDE K NEMU PO PRERUSENI)
GOTO CYK
MOVLW b'11100111' ;PREPISOM OBSAHU TOHTO REGISTRA DO OPTION PRI PRERUSENI
MOVWF PRERUS ;SA PREPNE VSTUP RTCC Z f/4 NA RA4 CIM SKONCI MERANIE PRE VSETKY MOZNOSTI (PER,LOG1,LOG0), OPATOVNE NASTAVENIE SPUSTACEJ HRANY PRERUSENIA SA UROBI PRI OPATOVNOM SPUSTENI
BCF PRIZNAK,MERIAM ;ZNULUJEME PRIZNAK A BUDEME CAKAT KYM SA NENASTAVI PRI NOVOM PRERUSENI
CYK1 BTFSS INTCON,2
GOTO CYK2
INCF FMSB,F
BTFSC Z
INCF FMMSB,F
BTFSC Z
GOTO PRETEC
BCF INTCON,2
CYK2 BTFSS PRIZNAK,MERIAM ;KED SA NASTAVI BUDE TO ZNAMENAT ZE MERANIE SKONCILO
GOTO CYK1 ;V PREDDELICKE,RTCC A FMSB JE NACITANY CAS
BCF INTCON,7 ;VYPNEME OPATOVNE PRERUSENIE
BTFSC INTCON,2 ;ESTE RAZ SA POZRIEME CI NEPRETIEKOL RTCC
INCF FMSB,F
CALL PREDDEL
MOVFW RTCC
MOVWF RTCCPOM
;......................................KONTROLA PRETECENIA.......................................
;TU SKONTROLUJEME CI JE 10. RAD NULOVY (HIGH NIBBLE OF CISLA89),AK JE NENULOVY ZNAMENA TO
;PRETECENIE LEBO HO UZ NEVIEME ZOBRAZIT
MOVFW CISLA89
ANDLW 0F0H ;DEVIATY RAD ZMAZ DESIATY NACHAJ
BTFSS Z ;AK JE DESIATY RAD NENULOVY NAPIS " MIMO ROZSAH "
GOTO PRETEC
;................................................................................................
CALL B32_BCD
BCF PRIZNAK,SEK
MOVFW CISLA67
BTFSS Z
BSF PRIZNAK,SEK ;CAS BUDE ZOBRAZOVANY V SEKUNDACH
MOVFW CISLA89
BTFSS Z
BSF PRIZNAK,SEK ;CAS BUDE ZOBRAZOVANY V SEKUNDACH
BCF PRIZNAK,NULA ;PRI INICIALIZACII A ZOBRAZOVANI t= 0.000 ms BOL NASTAVENY
CALL ZOBRAZ
GOTO STOPKY1
PRETEC BSF FLAG,_MIMO
CALL SPRAVA ;NAPISE SPRAVU MIMO ROZSAH
CALL STISK
GOTO STOPKY ;PO PRETECENI CAKAJ NA STLACENIE TLACITKA A POTOM ZACNI ODZNOVA
;***********************************************************************************************
;......................................PROSTY CITAC.............................................
;***********************************************************************************************
PROSTYCITAC
MOVLW 01H
CALL WRCMD
MOVLW b'10010000' ;POVOL PRERUSENIE OD VONKAJSIEHO PRERUSENIA NA RB0
MOVWF INTCON
BSF SWR,5
MOVLW b'11000000'
MOVWF _OPTION ;ZAKAZ PULL-UPu,PRERUSENIE NABEZNOU HRANOU
BCF SWR,5
CLRF POM1
CLRF POM2
CLRF POM3
PCITAC1 BSF PRIZNAK,NULA ;NA ZACIATKU PREDPOKLADAME ZE PRED PRVYM CISLOM SU NULY
MOVFW POM3
MOVWF FMSB
MOVFW POM2
MOVWF RTCCPOM
MOVFW POM1
MOVWF FLSB
CALL B32_BCD
MOVLW 02H
CALL WRCMD ;DD RAM NA 0,BEZ ZMENY DISPLAYA
MOVLW 'N'
CALL WRDATA
MOVLW '='
CALL WRDATA
MOVLW ' '
CALL WRDATA
MOVLW ' '
CALL WRDATA
SWAPF CISLA67,F
MOVFW CISLA67 ;7.RAD
CALL UKAZ
SWAPF CISLA67,F
MOVFW CISLA67 ;6.RAD
CALL UKAZ
SWAPF CISLA45,F
MOVFW CISLA45 ;5.RAD
CALL UKAZ
SWAPF CISLA45,F
MOVFW CISLA45 ;4.RAD
CALL UKAZ
MOVLW 0C0H
CALL WRCMD ;SKOK DO DRUHEHO RIADKU
SWAPF CISLA23,F
MOVFW CISLA23 ;3.RAD
CALL UKAZ
SWAPF CISLA23,F
MOVFW CISLA23 ;2.RAD
CALL UKAZ
SWAPF CISLA01,F
MOVFW CISLA01 ;1.RAD
CALL UKAZ
SWAPF CISLA01,F ;POSLEDNE CISLO BUDE VYPISANE VZDY
MOVFW CISLA01 ;0-ty RAD
ANDLW 0FH
ADDLW 30H
CALL WRDATA
BTFSS PA,0 ;PO STLACENI PA,0 VYNULUJ REGISTRE
GOTO PCITAC1
CLRF POM1
CLRF POM2
CLRF POM3
GOTO PCITAC1
UKAZ ANDLW 0FH
BTFSS Z ;NENULOVE CISLO ZOBRAZ
GOTO UKAZ1
BTFSC PRIZNAK,NULA ;JE TO NULA.BOLA AJ PRED NOU NULA?
GOTO UKAZ2 ;ANO -> NEZOBRAZUJ
UKAZ1 BCF PRIZNAK,NULA ;PRVE NENULOVE CISLO =>VYNULUJ PRIZNAK
ADDLW 30H
UKAZ2 CALL WRDATA
RETURN
;***********************************************************************************************
END