; Radiometr / dozimetr s AVR ATtiny2313(A/V). ; davkovy prikon v mR/h, davka v mR. ; Interni RC oscilator 8 MHz ; vytvoril: DANYK ; http://danyk.cz .NOLIST .INCLUDE "tn2313def.inc" .LIST .DEF REG4=R0 ; docasny registr .DEF REG5=R1 ; docasny registr .DEF PRETREG2=R2 ; registr 2 do ktereho preteka 16-bitovy citac1 .DEF DAV1=R3 ; nejnizsi .DEF DAV2=R4 ; ... .DEF DAV3=R5 ; ... .DEF DAV4=R6 ; ... .DEF DAV5=R7 ; nejvyssi .DEF BLIKREG=R8 ; BLIKANI TECKY .DEF CIF1=R9 ; nejnizsi cifra .DEF CIF2=R10 ; ... .DEF CIF3=R11 ; ... .DEF CIF4=R12 ; ... .DEF CIF5=R13 ; ... .DEF CIF6=R14 ; ... .DEF CIF7=R15 ; nejvyssi cifra .DEF REG2=R16 ; docasny registr .DEF REG3=R17 ; docasny registr .DEF REG=R18 ; docasny registr .DEF UDAJ1=R19 ; spodnich 8bitu 24-bitoveho vysledku .DEF UDAJ2=R20 ; .DEF UDAJ3=R21 ; hornich 8bitu 24-bitoveho vysledku .DEF PRETREG=R22 ; registr do ktereho preteka 16-bitovy citac1 .DEF MULTREG=R23 ; registr si pamatuje stav multiplexu .DEF ROZREG=R24 ; rozsah .DEF MODREG=R25 ; mod .DEF UDAJ4=R26 ; .DEF UDAJ5=R27 ; .DEF CYKL1=R28 ; docasny registr .DEF CYKL2=R29 ; docasny registr .EQU STAV_TLAC=0x0060 .EQU PRODL_TLAC=0x0061 .EQU DOBA_TLAC=0x0062 ; pozor - techto osm bajtu musi zustat pohromade: .EQU KAL1=0x0063 .EQU KAL2=0x0064 .EQU KAL3=0x0065 .EQU KAL4=0x0066 .EQU ALM1=0x0067 .EQU ALM2=0x0068 .EQU ALM3=0x0069 .EQU ALM4=0x006A .EQU DEL1=0x006B .EQU DEL2=0x006C .EQU DEL3=0x006D .EQU DEL4=0x006E .EQU PREDDEL=0x006F .EQU DAVKA1=0x0070 ;docasna odkladiste pro davku .EQU DAVKA2=0x0071 .EQU DAVKA3=0x0072 .EQU DAVKA4=0x0073 .EQU DAVKA5=0x0074 .EQU SMER=DDRB ;PORT displeje - katod segmentu .EQU PORT=PORTB .EQU SMER2=DDRD ;PORT multiplexu - anod segmentu, vstup, tlacitka .EQU PORT2=PORTD .EQU PIN2=PIND .EQU SMER3=DDRA ;PORT alarmu .EQU PORT3=PORTA .CSEG .ORG 0 RJMP START ; PRERUSENI: ; probuzeni INT0 .ORG INT0addr RJMP PROBUD ; preteceni 16-bitoveho citace impuzlu .ORG OVF1addr INC PRETREG BRNE PRETREG_NEPRETEKL INC PRETREG2 BRNE PRETREG_NEPRETEKL DEC PRETREG2 PRETREG_NEPRETEKL: RETI ; zdroj casovani .ORG OC0Aaddr RJMP CITAC0 START: LDI REG,LOW(RAMEND) OUT SPL,REG ;nastavi port jako vystup LDI REG,0b11111111 OUT SMER,REG ;nastavi bity 0,1,4,6 jako vystup LDI REG,0b1010011 OUT SMER2,REG ;nastavi bity 0,1 jako vystup LDI REG,0b11 OUT SMER3,REG RCALL USPI ; vypne analogovy komparator (setri energii). LDI REG,0b10000000 OUT ACSR,REG ; mod zapisu EEPROM LDI REG,0b00000000 OUT EECR,REG ; NASTAVENI CITACU/CASOVACU LDI REG,0b00000010 ; nastavi citac0 na nulovani pri dosazeni porovnavane... OUT TCCR0A,REG ; ...hodnoty (tzv. CTC), OC0 nevyuzit, LDI REG,0b00000100 ; deleni 256 OUT TCCR0B,REG LDI REG,77 ; porovnavana hodnota, vznikne 400Hz (multiplex 100Hz) OUT OCR0A,REG ; LDI REG,0b00000000 ; nastavi citac1 na normalni mod OUT TCCR1A,REG ; LDI REG,0b00000111 ; externi taktovani OUT TCCR1B,REG LDI REG,0b10000001 ; povoli preruseni OUT TIMSK,REG ; (bit 0 povoli citac0A, bit 7 povoli preruseni preteceni1) ; vynuluje/prednastavi registry LDI MULTREG,1 LDI MODREG,0 CLR DAV1 CLR DAV2 CLR DAV3 MOVW DAV4,DAV2 CLR REG STS STAV_TLAC,REG ;stav tlačítek - pamatuje si předchozí stav STS PRODL_TLAC,REG ;stav tlačítek II - měří prodlevu do další reakce STS DOBA_TLAC,REG ; RCALL OD_ZACATKU ;hlavni smycka SMYCKA: SEI ;povoli globalni preruseni SLEEP RJMP SMYCKA MULT: LDI REG,0b00101100 OUT PORT2,REG CPI MODREG,0 BRNE ZAPNUTO CLR REG LDI REG2,0b00101100 MOV REG3,BLIKREG ANDI REG3,0b00011111 CPI REG3,0 BRNE NE_TECKA_POHO LDI REG,0b01111111 LDI REG2,0b00101101 NE_TECKA_POHO: OUT PORT,REG OUT PORT2,REG2 RET ZAPNUTO: CPI MODREG,8 BRLO MULT_KAL_NE RJMP MULT_KAL MULT_KAL_NE: CPI MODREG,4 BRLO MULT_ALM_NE RJMP MULT_ALM MULT_ALM_NE: MOV REG2,MODREG CPI REG2,3 BRLO MODREG_POD3 LDI REG2,1 MODREG_POD3: ADD REG2,ROZREG MOV REG3,REG2 CPI MODREG,3 BRNE TECKA_NEBLIKA SBRC BLIKREG,4 CLR REG3 TECKA_NEBLIKA: CPI MULTREG,1 BREQ MULT1 CPI MULTREG,2 BREQ MULT2 CPI MULTREG,3 BREQ MULT3 CPI MULTREG,4 BREQ MULT4 MULT1: MOV REG,CIF1 CPI REG2,5 BRLO ROZ_OK1 LDI REG,10 ROZ_OK1: RCALL ZOBRAZ CPI REG3,4 BRNE TECKA1NE SUBI REG,128 ;tohle rozsveci tecku TECKA1NE: OUT PORT,REG LDI REG,0b00101101 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT2: MOV REG,CIF2 CPI REG2,5 BRLO ROZ_OK2 LDI REG,10 ROZ_OK2: RCALL ZOBRAZ CPI REG3,3 BRNE TECKA2NE SUBI REG,128 ;tohle rozsveci tecku TECKA2NE: OUT PORT,REG LDI REG,0b00101110 ;da log1 na bit1 portu. OUT PORT2,REG RET MULT3: MOV REG,CIF3 CPI REG2,5 BRLO ROZ_OK3 LDI REG,10 ROZ_OK3: RCALL ZOBRAZ CPI REG3,2 BRNE TECKA3NE SUBI REG,128 ;tohle rozsveci tecku TECKA3NE: OUT PORT,REG LDI REG,0b00111100 ;da log1 na bit2 portu. OUT PORT2,REG RET MULT4: MOV REG,CIF4 CPI REG2,5 BRLO ROZ_OK4 CPI MODREG,3 BRNE NEBLIKAT_ECKO LDI REG,10 SBRC BLIKREG,4 NEBLIKAT_ECKO: LDI REG,11 ROZ_OK4: CPI REG,0 BRNE CIF4ANO CPI REG2,1 BREQ CIF4ANO LDI REG,0b11111111 RJMP CIF4NE CIF4ANO: RCALL ZOBRAZ CPI REG3,1 BRNE TECKA4NE SUBI REG,128 ;tohle rozsveci tecku TECKA4NE: CIF4NE: OUT PORT,REG LDI REG,0b01101100 ;da log1 na bit3 portu. OUT PORT2,REG RET MULT_KAL: CPI MULTREG,1 BREQ MULT_KAL1 CPI MULTREG,2 BREQ MULT_KAL2 CPI MULTREG,3 BREQ MULT_KAL3 CPI MULTREG,4 BREQ MULT_KAL4 MULT_KAL1: LDS REG,KAL1 RCALL ZOBRAZ CPI MODREG,8 BRNE MOD8_NE SBRC BLIKREG,4 SER REG MOD8_NE: OUT PORT,REG LDI REG,0b00101101 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT_KAL2: LDS REG,KAL2 RCALL ZOBRAZ CPI MODREG,9 BRNE MOD9_NE SBRC BLIKREG,4 SER REG MOD9_NE: SUBI REG,128 ;tohle rozsveci tecku OUT PORT,REG LDI REG,0b00101110 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT_KAL3: LDS REG,KAL3 RCALL ZOBRAZ CPI MODREG,10 BRNE MOD10_NE SBRC BLIKREG,4 SER REG MOD10_NE: OUT PORT,REG LDI REG,0b00111100 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT_KAL4: LDS REG,KAL4 RCALL ZOBRAZ CPI MODREG,11 BRNE MOD11_NE SBRC BLIKREG,4 SER REG MOD11_NE: OUT PORT,REG LDI REG,0b01101100 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT_ALM: CPI MULTREG,1 BREQ MULT_ALM1 CPI MULTREG,2 BREQ MULT_ALM2 CPI MULTREG,3 BREQ MULT_ALM3 CPI MULTREG,4 BREQ MULT_ALM4 MULT_ALM1: LDS REG,ALM1 RCALL ZOBRAZ CPI MODREG,4 BRNE MOD4_NE SBRC BLIKREG,4 SER REG MOD4_NE: OUT PORT,REG LDI REG,0b00101101 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT_ALM2: LDS REG,ALM2 RCALL ZOBRAZ CPI MODREG,5 BRNE MOD5_NE SBRC BLIKREG,4 SER REG MOD5_NE: OUT PORT,REG LDI REG,0b00101110 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT_ALM3: LDS REG,ALM3 RCALL ZOBRAZ CPI MODREG,6 BRNE MOD6_NE SBRC BLIKREG,4 SER REG MOD6_NE: SUBI REG,128 ;tohle rozsveci tecku OUT PORT,REG LDI REG,0b00111100 ;da log1 na bit0 portu. OUT PORT2,REG RET MULT_ALM4: LDS REG,ALM4 RCALL ZOBRAZ CPI MODREG,7 BRNE MOD7_NE SBRC BLIKREG,4 SER REG MOD7_NE: OUT PORT,REG LDI REG,0b01101100 ;da log1 na bit0 portu. OUT PORT2,REG RET ZOBRAZ: CPI REG,12 BRSH ZOBRAZ_MIMO LDI ZH,HIGH(2*TABULKA) LDI ZL,LOW(2*TABULKA) ADD ZL,REG CLR REG ADC ZH,REG LPM REG,Z RET ZOBRAZ_MIMO: LDI REG,0b10111111 RET OBNOVA: MOV UDAJ4,PRETREG2 MOV UDAJ3,PRETREG IN UDAJ1,TCNT1L IN UDAJ2,TCNT1H CLR PRETREG OUT TCNT1H,PRETREG OUT TCNT1L,PRETREG CLR PRETREG2 RCALL PRICTI_DAVKU CLR ROZREG CLR CIF1 CLR CIF2 CLR CIF3 MOVW CIF4,CIF2 MOVW CIF6,CIF2 CPI UDAJ1,128 ;24-bitova podminka mensi nez 10 000 000 LDI REG,150 CPC UDAJ2,REG LDI REG,152 CPC UDAJ3,REG LDI REG,0 CPC UDAJ4,REG BRLO DO9999999 LDI ROZREG,6 SBI PORT3,0 RJMP ZOBRAZIL_E DO9999999: RCALL BIN_NA_BCD RCALL POROVNEJ_ALARM ZOBRAZIL_E: CPI MODREG,3 BRNE NENI_MOD_DAVKY NACIST_DAVKU: RCALL PREPOCET_DAV CLR ROZREG CLR CIF1 CLR CIF2 CLR CIF3 MOVW CIF4,CIF2 MOVW CIF6,CIF2 CPI UDAJ1,128 ;24-bitova podminka mensi nez 10 000 000 LDI REG,150 CPC UDAJ2,REG LDI REG,152 CPC UDAJ3,REG LDI REG,0 CPC UDAJ4,REG BRLO DAVKA_DO9999999 LDI ROZREG,6 RJMP DAVKA_NAD9999999 DAVKA_DO9999999: RCALL BIN_NA_BCD DAVKA_NAD9999999: NENI_MOD_DAVKY: POSUN_ZNOVU: CLR REG CP CIF7,REG BRNE POSUN CP CIF6,REG BRNE POSUN CP CIF5,REG BRNE POSUN RJMP POSUN_KONEC POSUN: MOV CIF1,CIF2 MOV CIF2,CIF3 MOV CIF3,CIF4 MOV CIF4,CIF5 MOV CIF5,CIF6 MOV CIF6,CIF7 CLR CIF7 INC ROZREG RJMP POSUN_ZNOVU POSUN_KONEC: RET ; deleni 2ma DELENI_DVEMA: LSL DAV1 ROL DAV2 ROL DAV3 ROL DAV4 ROL DAV5 BRCC NEPRETEK_ROL CLR DAV5 DEC DAV5 MOV DAV4,DAV5 MOVW DAV2,DAV4 MOV DAV1,DAV5 NEPRETEK_ROL: RET ; Prepocita z poctu impulzu na davku v uR ; Davka = pocet pulzu * kalibrace / 36 000 ; ---------------------------------------------------------- PREPOCET_DAV: MOV UDAJ1,DAV1 MOVW UDAJ2,DAV2 MOVW UDAJ4,DAV4 ;docasne odlozi akumulovanou davku STS DAVKA1,DAV1 STS DAVKA2,DAV2 STS DAVKA3,DAV3 STS DAVKA4,DAV4 STS DAVKA5,DAV5 LDI ZL,LOW(KAL1) LDI ZH,HIGH(KAL1) LDI CYKL2,4 RJMP NASOB_KAL1 DALSI_RAD: RCALL DELENI_DVEMA MOV REG,DAV1 MOVW REG2,DAV2 MOVW REG4,DAV4 RCALL DELENI_DVEMA RCALL DELENI_DVEMA ADD DAV1,REG ADC DAV2,REG2 ADC DAV3,REG3 ADC DAV4,REG4 ADC DAV5,REG5 BRCC NEPRETEK_2A8 CLR DAV5 DEC DAV5 MOV DAV4,DAV5 MOVW DAV2,DAV4 MOV DAV1,DAV5 NEPRETEK_2A8: NASOB_KAL1: LD CYKL1,Z+ CPI CYKL1,0 BREQ KAL_0 PRICTI_ZAS: ADD UDAJ1,DAV1 ADC UDAJ2,DAV2 ADC UDAJ3,DAV3 ADC UDAJ4,DAV4 ADC UDAJ5,DAV5 BRCS PRETEC_NASOB DEC CYKL1 BRNE PRICTI_ZAS KAL_0: DEC CYKL2 BRNE DALSI_RAD RJMP DELENI PRETEC_NASOB: SER UDAJ3 RJMP NEDELIT DELENI: ; Tady se deli 40-bitove cislo konstantou 36000 (aproximovano 36003) ; /2na15 MOV REG,UDAJ2 MOV UDAJ1,UDAJ3 MOVW UDAJ2,UDAJ4 CLR UDAJ4 CLR UDAJ5 LSL REG ROL UDAJ1 ROL UDAJ2 ROL UDAJ3 ROL UDAJ4 MOV REG,UDAJ1 MOVW REG2,UDAJ2 MOVW REG4,UDAJ4 LDI CYKL1,3 DEL_ZNOVU_II: LSR REG5 ROR REG4 ROR REG3 ROR REG2 ROR REG DEC CYKL1 BRNE DEL_ZNOVU_II SUB UDAJ1,REG SBC UDAJ2,REG2 SBC UDAJ3,REG3 SBC UDAJ4,REG4 SBC UDAJ5,REG5 LDI CYKL1,2 DEL_ZNOVU_III: LSR REG5 ROR REG4 ROR REG3 ROR REG2 ROR REG DEC CYKL1 BRNE DEL_ZNOVU_III ADD UDAJ1,REG ADC UDAJ2,REG2 ADC UDAJ3,REG3 ADC UDAJ4,REG4 ADC UDAJ5,REG5 LDI CYKL1,3 DEL_ZNOVU_IV: LSR REG5 ROR REG4 ROR REG3 ROR REG2 ROR REG DEC CYKL1 BRNE DEL_ZNOVU_IV ADD UDAJ1,REG ADC UDAJ2,REG2 ADC UDAJ3,REG3 ADC UDAJ4,REG4 ADC UDAJ5,REG5 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; kontrola zda vysledek deleni neni vetsi nez 24 bitu CPI UDAJ4,0 BRNE UDAJ_PRETEKL CPI UDAJ5,0 BRNE UDAJ_PRETEKL RJMP UDAJ_OK UDAJ_PRETEKL: SER UDAJ3 UDAJ_OK: NEDELIT: ;vrati akumulovanou davku tam kam patri LDS DAV1,DAVKA1 LDS DAV2,DAVKA2 LDS DAV3,DAVKA3 LDS DAV4,DAVKA4 LDS DAV5,DAVKA5 RET ;Tahle obluda prevede binarni UDAJ3:UDAJ1 na BCD CIF7:CIF1 BIN_NA_BCD: ZNOVU_7: CPI UDAJ1,64 ;24-bitova podminka mensi nez 1 000 000 LDI REG,66 CPC UDAJ2,REG LDI REG,15 CPC UDAJ3,REG BRLO MENSI_7 SUBI UDAJ1,64 ;24-bitove odcitání cisla 1 000 000 od vysledku SBCI UDAJ2,66 SBCI UDAJ3,15 INC CIF7 RJMP ZNOVU_7 MENSI_7: ZNOVU_6: CPI UDAJ1,160 ;24-bitova podminka mensi nez 100 000 LDI REG,134 CPC UDAJ2,REG LDI REG,1 CPC UDAJ3,REG BRLO MENSI_6 SUBI UDAJ1,160 ;24-bitove odcitání cisla 100 000 od vysledku SBCI UDAJ2,134 SBCI UDAJ3,1 INC CIF6 RJMP ZNOVU_6 MENSI_6: ZNOVU_5: CPI UDAJ1,16 ;24-bitova podminka mensi nez 10 000 LDI REG,39 CPC UDAJ2,REG LDI REG,0 CPC UDAJ3,REG BRLO MENSI_5 SUBI UDAJ1,16 ;24-bitove odcitání cisla 10 000 od vysledku SBCI UDAJ2,39 SBCI UDAJ3,0 INC CIF5 RJMP ZNOVU_5 MENSI_5: ZNOVU_4: CPI UDAJ1,232 ;16-bitova podminka mensi nez 1 000 LDI REG,3 CPC UDAJ2,REG BRLO MENSI_4 SUBI UDAJ1,232 ;16-bitove odcitání cisla 1 000 od vysledku SBCI UDAJ2,3 INC CIF4 RJMP ZNOVU_4 MENSI_4: ZNOVU_3: CPI UDAJ1,100 ;16-bitova podminka mensi nez 100 LDI REG,0 CPC UDAJ2,REG BRLO MENSI_3 SUBI UDAJ1,100 ;16-bitove odcitání cisla 100 od vysledku SBCI UDAJ2,0 INC CIF3 RJMP ZNOVU_3 MENSI_3: ZNOVU_2: CPI UDAJ1,10 ;8-bitova podminka mensi nez 10 BRLO MENSI_2 SUBI UDAJ1,10 ;8-bitove odcitání cisla 10 od vysledku INC CIF2 RJMP ZNOVU_2 MENSI_2: MOV CIF1,UDAJ1 RET POROVNEJ_ALARM: CPI MODREG,1 BRNE MOD1_NE LDS REG,ALM1 CP CIF2,REG LDS REG,ALM2 CPC CIF3,REG LDS REG,ALM3 CPC CIF4,REG LDS REG,ALM4 CPC CIF5,REG CLR REG CPC CIF6,REG CPC CIF7,REG BRLO ALARM_NE RJMP ALARM_ANO MOD1_NE: LDS REG,ALM1 CP CIF1,REG LDS REG,ALM2 CPC CIF2,REG LDS REG,ALM3 CPC CIF3,REG LDS REG,ALM4 CPC CIF4,REG CLR REG CPC CIF5,REG CPC CIF6,REG CPC CIF7,REG BRLO ALARM_NE ALARM_ANO: SBI PORT3,0 RET ALARM_NE: CBI PORT3,0 RET PROBUD: ; sleep mod IDLE, INT0 pri log0 LDI REG,0b00100000 OUT MCUCR,REG ; zakaze INT0 LDI REG,0b00000000 OUT GIMSK,REG LDI MODREG,1 LDI REG,0b00000010 OUT PORT3,REG RCALL TLACITKA RETI USPI: ; sleep mod Power-down, INT0 pri log0 LDI REG,0b00110000 OUT MCUCR,REG ; povoli INT0 LDI REG,0b01000000 OUT GIMSK,REG CLR REG OUT PORT,REG OUT PORT3,REG LDI REG,0b00101100 OUT PORT2,REG RET ; tlačítko TLAC1: CPI MODREG,4 BRLO NEUKLADEJ RCALL ULOZ_EE NEUKLADEJ: DEC MODREG CPI MODREG,255 BRNE MODHOP LDI MODREG,3 MODHOP: RCALL OD_ZACATKU CPI MODREG,3 BRNE DAVKU_NE RCALL NACIST_DAVKU DAVKU_NE: RET ; tlačítko TLAC2: LDI ZL,LOW(TL2_SKOK) LDI ZH,HIGH(TL2_SKOK) ADD ZL,MODREG CLR REG ADC ZH,REG IJMP TL2_SKOK: RJMP TL2_FCE0 RJMP TL2_FCE1 RJMP TL2_FCE2 RJMP TL2_FCE3 RJMP TL2_FCE4 RJMP TL2_FCE5 RJMP TL2_FCE6 RJMP TL2_FCE7 RJMP TL2_FCE8 RJMP TL2_FCE9 RJMP TL2_FCE10 RJMP TL2_FCE11 TL2_FCE0: RCALL USPI RET TL2_FCE1: TL2_FCE2: RCALL OD_ZACATKU RET TL2_FCE3: RCALL OD_ZACATKU RCALL NACIST_DAVKU RET TL2_FCE4: LDS REG,ALM1 INC REG CPI REG,10 BRLO ALM1_DO9 CLR REG ALM1_DO9: STS ALM1,REG RET TL2_FCE5: LDS REG,ALM2 INC REG CPI REG,10 BRLO ALM2_DO9 CLR REG ALM2_DO9: STS ALM2,REG RET TL2_FCE6: LDS REG,ALM3 INC REG CPI REG,10 BRLO ALM3_DO9 CLR REG ALM3_DO9: STS ALM3,REG RET TL2_FCE7: LDS REG,ALM4 INC REG CPI REG,10 BRLO ALM4_DO9 CLR REG ALM4_DO9: STS ALM4,REG RET TL2_FCE8: LDS REG,KAL1 INC REG CPI REG,10 BRLO KAL1_DO9 CLR REG KAL1_DO9: STS KAL1,REG RET TL2_FCE9: LDS REG,KAL2 INC REG CPI REG,10 BRLO KAL2_DO9 CLR REG KAL2_DO9: STS KAL2,REG RET TL2_FCE10: LDS REG,KAL3 INC REG CPI REG,10 BRLO KAL3_DO9 CLR REG KAL3_DO9: STS KAL3,REG RET TL2_FCE11: LDS REG,KAL4 INC REG CPI REG,10 BRLO KAL4_DO9 CLR REG KAL4_DO9: STS KAL4,REG RET TLAC1_D: LDI MODREG,7 RET TLAC2_D: CLR DAV5 CLR DAV4 MOVW DAV2,DAV4 CLR DAV1 RCALL NACIST_DAVKU RET TLAC12_D: LDI MODREG,11 RET TLACITKA: ;Zjištění stavu tlačítek. f je 100Hz LDS REG,PRODL_TLAC ;počítadlo prodlevy do další reakce CPI REG,0 BREQ UZJE0 DEC REG STS PRODL_TLAC,REG UZJE0: LDS REG2,STAV_TLAC ;Do REG2 načte předchozí stav tlačítek IN REG,PIN2 ;zjistí stav tlačítek ANDI REG,0b00001100 STS STAV_TLAC,REG ;Uloží ho pro příští test CP REG2,REG ;pokud předchozí stav = současný, TL už nereaguje znovu BREQ NEREAGOVAT LDS REG2,PRODL_TLAC ;pokud neuplynula minimální prodleva, nereaguje znovu CPI REG2,0 BRNE NEREAGOVAT SBRS REG,2 RJMP NA_TLAC1 SBRS REG,3 RJMP NA_TLAC2 RJMP NEREAGOVAT NA_TLAC1: RCALL TLAC1 RJMP NEREAGOVAT NA_TLAC2: RCALL TLAC2 NEREAGOVAT: LDI REG2,5 ;urcuje prodlevu do dalsi reakce (x 10ms) ;stisknuti/drzeni tlacitka nastavi prodlevu do dalsi reakce SBRS REG,2 STS PRODL_TLAC,REG2 SBRS REG,3 STS PRODL_TLAC,REG2 ;tady zacina vyhodnoceni dlouheho stisku CPI REG,0b00000011 BREQ NIC_NEDRZI LDS REG2,DOBA_TLAC INC REG2 STS DOBA_TLAC,REG2 NIC_NEDRZI: LDS REG2,PRODL_TLAC CPI REG2,0 BRNE PRODL_NE0 LDI REG2,0 STS DOBA_TLAC,REG2 PRODL_NE0: LDS REG2,DOBA_TLAC CPI REG2,150 BRNE NE100 LDI REG2,0 STS DOBA_TLAC,REG2 CPI REG,0b00000000 BREQ NA_TLAC12_D SBRS REG,2 RJMP NA_TLAC1_D SBRS REG,3 RJMP NA_TLAC2_D RJMP NE100 NA_TLAC1_D: RCALL TLAC1_D RJMP NE100 NA_TLAC2_D: RCALL TLAC2_D RJMP NE100 NA_TLAC12_D: RCALL TLAC12_D NE100: RET ; preruseni ridici multiplex, snimani tlacitek a zdroj obnovovaci frekvence CITAC0: RCALL MULT DEC MULTREG BRNE MULTHOP LDI MULTREG,4 RCALL CASOVANI RCALL TLACITKA INC BLIKREG MULTHOP: RETI CASOVANI: CPI MODREG,1 BRNE PREDDEL_NE LDS REG,PREDDEL DEC REG STS PREDDEL,REG BRNE OBNOVA_NE LDI REG,10 STS PREDDEL,REG PREDDEL_NE: LDS REG,DEL1 DEC REG STS DEL1,REG CPI REG,255 BRNE OBNOVA_NE LDI REG,9 STS DEL1,REG LDS REG,DEL2 DEC REG STS DEL2,REG CPI REG,255 BRNE OBNOVA_NE LDI REG,9 STS DEL2,REG LDS REG,DEL3 DEC REG STS DEL3,REG CPI REG,255 BRNE OBNOVA_NE LDI REG,9 STS DEL3,REG LDS REG,DEL4 DEC REG STS DEL4,REG CPI REG,255 BRNE OBNOVA_NE LDS REG,KAL1 STS DEL1,REG LDS REG,KAL2 STS DEL2,REG LDS REG,KAL3 STS DEL3,REG LDS REG,KAL4 STS DEL4,REG LDI REG,10 STS PREDDEL,REG RCALL OBNOVA OBNOVA_NE: RET ;Vynulovani po zapnuti nebo prepnuti rozsahu OD_ZACATKU: SER REG MOV CIF1,REG MOV CIF2,REG MOV CIF3,REG MOVW CIF4,CIF2 MOVW CIF6,CIF2 LDS REG,KAL1 STS DEL1,REG LDS REG,KAL2 STS DEL2,REG LDS REG,KAL3 STS DEL3,REG LDS REG,KAL4 STS DEL4,REG LDI REG,10 STS PREDDEL,REG MOV UDAJ4,PRETREG2 MOV UDAJ3,PRETREG IN UDAJ1,TCNT1L IN UDAJ2,TCNT1H CLR PRETREG OUT TCNT1H,PRETREG OUT TCNT1L,PRETREG CLR PRETREG2 RCALL PRICTI_DAVKU CLR ROZREG RCALL NACTI_EE RCALL ALARM_NE RET ;pricteni davky z citacu do registru davky PRICTI_DAVKU: SER REG CP DAV5,REG BREQ U_STROPU CLR REG ADD DAV1,UDAJ1 ADC DAV2,UDAJ2 ADC DAV3,UDAJ3 ADC DAV4,UDAJ4 ADC DAV5,REG BRCS PRETEC_DAV U_STROPU: RET PRETEC_DAV: SER REG MOV DAV5,REG RET ; Nacitani kalibrace z EEPROM NACTI_EE: CLI NACTI_EE_Z: SBIC EECR,EEPE RJMP NACTI_EE_Z CLR REG2 LDI ZL,LOW(KAL1) LDI ZH,HIGH(KAL1) NACTI_DALSI: OUT EEAR,REG2 SBI EECR,EERE IN REG,EEDR CPI REG,10 BRLO VYCHOZI_NE LDI REG,0 VYCHOZI_NE: ST Z+,REG INC REG2 CPI REG2,8 BRLO NACTI_DALSI RET ;Ulozeni kalibrace do EEPROM s porovnanim (pri shode neprepisuje) ULOZ_EE: CLI CLR REG3 LDI ZL,LOW(KAL1) LDI ZH,HIGH(KAL1) ULOZ_DALSI: SBIC EECR,EEPE RJMP ULOZ_DALSI OUT EEAR,REG3 SBI EECR,EERE IN REG,EEDR LD REG2,Z+ CP REG,REG2 BREQ SHODA_EE OUT EEAR,REG3 OUT EEDR,REG2 SBI EECR,EEMPE SBI EECR,EEPE SHODA_EE: INC REG3 CPI REG3,8 BRLO ULOZ_DALSI RET TABULKA: .DB 0b11000000,0b11111001 ;0, 1 .DB 0b10100100,0b10110000 ;2, 3 .DB 0b10011001,0b10010010 ;4, 5 .DB 0b10000010,0b11111000 ;6, 7 .DB 0b10000000,0b10010000 ;8, 9 .DB 0b11111111,0b10000110 ;Nic, E