;************************************************* ; LASKURI.ASM ; ; Tehnyt Jyrki ; jyrki.k@innopultti.fi ; 26.4-2004 ; Copyright ;************************************************* list p=16f628 ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON &_HS_OSC & _MCLRE_OFF & _LVP_OFF ;************************************************ ;Omien rekisterien määrittely. ;************************************************ ;Omat rekisterit. ;Tavalliset rekisterit: YKKOSET EQU 0x20 ;Näytön päivityksessä käytettävät rekisterit. KYMMENET EQU 0x21 ; -||- SADAT EQU 0x22 ; -||- TUHANNET EQU 0x23 ; -||- AYKKOSET EQU 0x24 ;Näytön ohjauksessa käytettävät apurekisterit rekisterit. AKYMMENET EQU 0x25 ; -||- ASADAT EQU 0x26 ; -||- ATUHANNET EQU 0x27 ; -||- VIIVE0 EQU 0x28 ;Kytkinvärähtelyn viiveen rekisterit. VIIVE1 EQU 0x29 ; -||- ;EEPROM-muistin apuna käytettävät rekisterit. OSOITE EQU 0x2A ;EEPROM muistin osoite rekisteri. ARVO EQU 0x2B ;EEPROM muistin muistipaikkaan tallennettava arvo. ;Lukeman tallennus ja näyttö rekistereitä. YKKOSETL EQU 0x2C ;Lukeman talletuksessa apuna käytettävät rekisterit. KYMMENETL EQU 0x2D ; -||- SADATL EQU 0x2E ; -||- TUHANNETL EQU 0x2F ; -||- AJASTUS EQU 0x30 ;Ajastus rekisteri jolla ajoitetaan tallennus tai tallennetun toimintaa. ;Lippurekisterit: YLIVUOTO EQU 0x31 ;Näytönohjauksen apuna käytettävä lippurekisteri.Ilmottamassa numeroiden 0-9 ylivuotamisesta. SEGMENTTI EQU 0x32 ;Näytön päivityksen ohjausreksiteri. Tämä rekisteri auttaa segmenttien himmenyksien poistossa. d1 EQU 0x33 d2 EQU 0x34 VALUE EQU 0xA0 ;Tämä rekisteri määritellään pankki3. Jotta tiedon tallennus ja luku onnistuu EEPROM-muistiin. ;Omien rekistereiden määrittely loppuu tähän. ;Lippubitit: lippuy equ 0 ;Lippubitti kun laskurin ykköset vuotaa yli. lippuk equ 1 ;Lippubitti kun laskurin kymmenet vuotaa yli. lippus equ 2 ;Lippubitti kun laskurin sadat vuotaa yli. lipput equ 3 ;Lippubitti kun laskurin tuhannet vuotaa yli. ;Laskurin ohjausbitit: PULSSI equ 4 ;Pulssin tarkkailu bitti A portin pinnissä 4. NAPPI equ 7 ;Napin tarkkailupinni. Kun tätä nappia painetaan niin sen hetkinen ;laskurin lukema tallentuu 3s sisään EEPROM-muistiin. Jos sitä ;ei pidetä pohjassa yli 3s niin laskuriin tulee noin 3s näkyviin EEPROM-muistiin ;aikasemmin talletettu luku. SEG1 equ 2 ;7-Segmenttien ohjaus bitit jotka,tulee A portin pinneihin 0,1,2 ja 3. SEG2 equ 3 ; -||- SEG3 equ 0 ; -||- SEG4 equ 1 ; -||- ;************************************************ ;Porttien suuntien määrittely. ;************************************************ org 0x000 ;Aletaan täyttämään ohjelmamuistia ;muistipaikasta 0 clrf PORTA ;Tyhjennetään portit clrf PORTB bsf STATUS,RP0 ;-> BANK 1 ;porttien bitit movlw b'10000000' ;siirrä w rekisteriin '10000000'. B-portin pinni 7 sisään nappia varten. movwf TRISB ;portb = output kaikki pinnit. Paitsi 7 pinni, joka tulee napin käyttöön. movlw b'010000' ;siirrä w rekisteriin '10000'. movwf TRISA ;porta = output pinnit 0,1,2 ja 3. 7-Segmenttien ohjauksien takia. ;porta = input pinni 4.Jotta saadaan laskettua pulssit sisään. bcf STATUS,RP0 ;-> BANK 0 bcf STATUS,RP1 ;-> BANK 0 goto MAIN ;********************************************************************************************** ;EEPROMIIN kirjoitus aliohjelma. KIRJOITUS MOVF ARVO,W BANKSEL VALUE ; Select Bank of VALUE. MOVWF VALUE ;Kirjoitetaan ARVO rekisterin arvo VALUE rekisteriin. BANKSEL PORTA ; Select Bank of PORTA eli pankki 0. MOVF OSOITE,W BANKSEL EEADR ; Select Bank of EEADR MOVWF EEADR ; Data Memory Address to write BANKSEL VALUE ; Select Bank of VALUE MOVF VALUE,W BANKSEL EEDATA ; Select Bank of EEDATA MOVWF EEDATA ; Data Memory Value to write BANKSEL EECON1 ; Select Bank of EECON1 BSF EECON1,WREN ; Enable writes MOVLW 0x55 MOVWF EECON2 ; Write 55h MOVLW 0xAA MOVWF EECON2 ; Write AAh BSF EECON1,WR ; Set WR bit to begin write BANKSEL PORTA ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Tässä kohtaa on pieni viive, jotta EEPROM-muistiin kirjoitus aliohjelman kirjoitus sykli ;ehtii tapahtua. EEP ;99993 cycles movlw 0x1E movwf d1 movlw 0x4F movwf d2 EEP_0 call NAYTTO_PAIVITYS;Ohjataan 7-segmenttejä.Tätä täytyy tehdä jottei näyttö sammu. decfsz d1, f goto $+2 decfsz d2, f goto EEP_0 ;3 cycles goto $+1 nop ;4 cycles (including call) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BANKSEL PIR1 ODOTA BTFSS PIR1,EEIF ;Tarkista onko EEIF-bitti 1 (=valmis) GOTO ODOTA ;ei vielä odota. BANKSEL PORTA RETURN ;************************************************************************* ;EEPROM-muistin lukemis aliohjelma. LUE MOVF OSOITE,W BANKSEL EEADR ; Select Bank of EEADR MOVWF EEADR ; Data Memory Address to read BANKSEL EECON1 ; Select Bank of EECON1 BSF EECON1,RD BANKSEL EEDATA ; Select Bank of EEDATA MOVF EEDATA,W ; W = EEDATA BANKSEL PORTA MOVWF ARVO RETURN ;********************************************************************************************** ;*********************************Laskurin alustus********************************************* ;Alustetaan laskurin näyttöön lukema 0000.Ja annetaan aloitus arvot NAYTON_OHJAUS aliohjelmalle. ;********************************************************************************************** ALUSTUS clrf AYKKOSET ;Näytön ohjauksessa käytettävien apurekistereiden nollaus. clrf AKYMMENET ; -||- clrf ASADAT ; -||- clrf ATUHANNET ; -||- clrf YLIVUOTO ;Nollataan YLIVUOTO rekisteri myös varmuuden vuoksi. clrf SEGMENTTI ;Nollataan SEGMENTTI lippurekisteri. movlw b'01111110' ;Ladataan w rekisteriin luku 0 binaarina 01111110. movwf YKKOSET ;Ladataan w rekisteri VIIVE1 rekisteriin. movlw b'01111110' ;Ladataan w rekisteriin luku 0 binaarina 01111110. movwf KYMMENET ;Ladataan w rekisteri KYMMENET rekisteriin. movlw b'01111110' ;Ladataan w rekisteriin luku 0 binaarina 01111110. movwf SADAT ;Ladataan w rekisteri SADAT rekisteriin. movlw b'01111110' ;Ladataan w rekisteriin luku 0 binaarina 01111110. movwf TUHANNET ;Ladataan w rekisteri TUHANNET rekisteriin. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A.NAYTON_OHJAUS aliohjelmaa varten. movwf AYKKOSET ;Ladataan arvo AYKKOSET rekisteriin. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A.NAYTON_OHJAUS aliohjelmaa varten. movwf AKYMMENET ;Ladataan arvo AKYMMENET rekisteriin. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A.NAYTON_OHJAUS aliohjelmaa varten. movwf ASADAT ;Ladataan arvo ASADAT rekisteriin. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A.NAYTON_OHJAUS aliohjelmaa varten. movwf ATUHANNET ;Ladataan arvo ATUHANNET rekisteriin. bsf SEGMENTTI,SEG1 ;Alustetaan NAYTTO_PAIVITYS aliohjelman segmenttien sytytys rekisteri. bcf INTCON,GIE ; Disable INTs. return ;***************************Näytön päivitys aliohjelma******************************************** ;Näytön päivitys aliohjelma joka, päivittää uuden luvun näytöön. Tai ylläpitää vanhaa lukua. ;Jos uutta lukua ei ole käytettävissä. ;********************************************************************************************** NAYTTO_PAIVITYS btfss SEGMENTTI,SEG1;Tarkastetaanko sytytetäänkö tämä segmentti tällä kertaa? goto OHI1 ;Ei sytytetä. clrf PORTA ;Tyhjätään A portti.Joillonka kaikki segmentit sammuu. movf YKKOSET,w ;Ladataan w rekisteriin mahdollinen uusi luku YKKOSET rekisteristä. bcf YKKOSET,7 movwf PORTB ;Ladataan w rekisteri B porttiin. bsf PORTA,SEG1 ;Sytytetään segmentti joko,näyttää näytössä ykkösiä. bcf SEGMENTTI,SEG1;Tämä segmentti sytytettiin joten seuraavalla kerralla tätä ei sytytetä. bsf SEGMENTTI,SEG2;Tämän aliohjelman seuraavalla ajokerralla sytytetään SEG2. return ;Palataan tästä aliohjelmasta. OHI1 btfss SEGMENTTI,SEG2;Tarkastetaanko sytytetäänkö tämä segmentti tällä kertaa? goto OHI2 ;Ei sytytetä. clrf PORTA ;Tyhjätään A portti.Joillonka kaikki segmentit sammuu. movf KYMMENET,w ;Ladataan w rekisteriin mahdollinen uusi luku KYMMENET rekisteristä. bcf KYMMENET,7 movwf PORTB ;Ladataan w rekisteri B porttiin. bsf PORTA,SEG2 ;Sytytetään segmentti joko,näyttää näytössä kymmeniä. bcf SEGMENTTI,SEG2;Tämä segmentti sytytettiin joten seuraavalla kerralla tätä ei sytytetä. bsf SEGMENTTI,SEG3;Tämän aliohjelman seuraavalla ajokerralla sytytetään SEG3. return ;Palataan tästä aliohjelmasta. OHI2 btfss SEGMENTTI,SEG3;Tarkastetaanko sytytetäänkö tämä segmentti tällä kertaa? goto OHI3 ;Ei sytytetä. clrf PORTA ;Tyhjätään A portti.Joillonka kaikki segmentit sammuu. movf SADAT,w ;Ladataan w rekisteriin mahdollinen uusi luku SADAT rekisteristä. bcf SADAT,7 movwf PORTB ;Ladataan w rekisteri B porttiin. bsf PORTA,SEG3 ;Sytytetään segmentti joko,näyttää näytössä satoja. bcf SEGMENTTI,SEG3;Tämä segmentti sytytettiin joten seuraavalla kerralla tätä ei sytytetä. bsf SEGMENTTI,SEG4;Tämän aliohjelman seuraavalla ajokerralla sytytetään SEG4. return ;Palataan tästä aliohjelmasta. OHI3 clrf PORTA ;Tyhjätään A portti.Joillonka kaikki segmentit sammuu. movf TUHANNET,w ;Ladataan w rekisteriin mahdollinen uusi luku TUHANNET rekisteristä. bcf TUHANNET,7 movwf PORTB ;Ladataan w rekisteri B porttiin. bsf PORTA,SEG4 ;Sytytetään segmentti joko,näyttää näytössä tuhansia. bcf SEGMENTTI,SEG4;Tämä segmentti sytytettiin joten seuraavalla kerralla tätä ei sytytetä. bsf SEGMENTTI,SEG1;Tämän aliohjelman seuraavalla ajokerralla sytytetään SEG1. return ;Palataan tästä aliohjelmasta. ;****************************************************************************** ;***************************Viive aliohjelma*********************************** ;****************************************************************************** ;Viive aliohjelma jota tarvitaan kytkinvärähtelyn vaikutuksien poistamiseksi. ;****************************************************************************** VIIVE movlw 0x64 ;Ladataan w rekisteriin luku 100 hexana 64. movwf VIIVE1 ;Ladataan w rekisteri VIIVE1 rekisteriin. LOOP2 movlw 0x64 ;Ladataan w rekisteriin luku 100 hexana 64. movwf VIIVE0 ;Ladataan w rekisteri VIIVE0 rekisteriin. LOOP0 call NAYTTO_PAIVITYS decfsz VIIVE0,f ;1/2ud goto LOOP0 ;2 us decfsz VIIVE1,f ;1/2ud goto LOOP2 ;2 us Hypätään kohtaan LOOP2. return ;Paluu tästä aliohjelmasta. ;***************************Näytönohjaus aliohjelma******************************************** ;Näytönohjaus aliohjelma joka,päivittää uuden luvun näytönpäivitys aliohjelmalle.Kun 16f628:si ;pinnissä 3:me havaitaan uusi pulssi.Tätä voisi sanoa myös vaikka laskuriketjuksi 0-9999.Johon on ;helppo lisätä lisää lukuja haluttaessa. ;********************************************************************************************** NAYTTO_OHJAUS decfsz AYKKOSET,f ;Vähennetään rekisteriä AYKKOSET.Jos meni nollaan hyppy seuraavan käskyn yli. return ;Rekisteri ei mennyt nollaan.Paluu tästä aliohjelmasta. bsf YLIVUOTO,lippuy ;Nostetaan lippu1 ylös YLIVUOTO rekisterissä.Koska rekisteri meni yli. decfsz AKYMMENET,f ;Vähennetään rekisteriä AKYMMENET.Jos meni nollaan hyppy seuraavan käskyn yli. return ;Rekisteri ei mennyt nollaan.Paluu tästä aliohjelmasta. bsf YLIVUOTO,lippuk ;Nostetaan lippu1 ylös YLIVUOTO rekisterissä.Koska rekisteri meni yli. decfsz ASADAT,f ;Vähennetään rekisteriä ASADAT.Jos meni nollaan hyppy seuraavan käskyn yli. return ;Rekisteri ei mennyt nollaan.Paluu tästä aliohjelmasta. bsf YLIVUOTO,lippus ;Nostetaan lippu1 ylös YLIVUOTO rekisterissä.Koska rekisteri meni yli. decfsz ATUHANNET,f ;Vähennetään rekisteriä ATUHANNET.Jos meni nollaan hyppy seuraavan käskyn yli. return ;Rekisteri ei mennyt nollaan.Paluu tästä aliohjelmasta. bsf YLIVUOTO,lipput ;Nostetaan lippu1 ylös YLIVUOTO rekisterissä.Koska rekisteri meni yli. return ;Paluu tästä aliohjelmasta. ;********************************************************************************************** ;*********************************Aliohjelma 7-segmentti näytönohjaus taulukko***************** ;Lisätään ohjelmalaskurin (PCL) arvoa w-rekisterin arvolla. Jolloinka hypätään johonkin ;retlw *x** kohtaan. Jossa ladataan taas w-rekisteriin siinä kohtaa oleva arvo. ;Ja jonka jälkeen palataan takaisin tästä aliohjelmasta. ;********************************************************************************************** TAULUKKO_SEG addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla olevista ;11 käskystä. Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. ;76543210 retlw b'01111110' ;Nro. 0 7-segmenttiin. retlw b'01001111' ;Nro. 9 7-segmenttiin. retlw b'01111111' ;Nro. 8 7-segmenttiin. retlw b'00001110' ;Nro. 7 7-segmenttiin. retlw b'01111101' ;Nro. 6 7-segmenttiin. retlw b'01101101' ;Nro. 5 7-segmenttiin. retlw b'01001011' ;Nro. 4 7-segmenttiin. retlw b'00101111' ;Nro. 3 7-segmenttiin. retlw b'00110111' ;Nro. 2 7-segmenttiin. retlw b'00001010' ;Nro. 1 7-segmenttiin. retlw b'01111110' ;Nro. 0 7-segmenttiin. ;****************************************************************************** ;Lopuksi vielä tarkastetaan mahdollisesti NAYTTO_OHJAUS aliohjelmassa ;ylivuotaneet rekisterit YLIVUOTO rekisterin lipuista lippuy, lippuk, lippus ja lipput. ;Ja alustetaan ylivuotaneet rekisterit uudestaan.Ja nollataan tietysti itse ;YLIVUOTO rekisterin hälytysliput. ;******************************************************************************* YLIVUOTO_ btfss YLIVUOTO,lippuy ;Testataan lippuy YLIVUOTO rekisteristä. goto L2 ;Ei yli vuotoa suoraan seuraavan lipun tarkastukseen. clrf AYKKOSET ;Ylivuoto sattunut.Puhdistetaan rekisteri. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A. movwf AYKKOSET ;Ladataan w rekisterin arvo AYKKOSET rekisteriin. bcf YLIVUOTO,lippuy ;Nollataan YLIVUOTO rekisterin lippu lippuy. L2 btfss YLIVUOTO,lippuk ;Testataan lippuk YLIVUOTO rekisteristä. goto L3 ;Ei yli vuotoa suoraan seuraavan lipun tarkastukseen. clrf AKYMMENET ;Ylivuoto sattunut.Puhdistetaan rekisteri. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A. movwf AKYMMENET ;Ladataan w rekisterin arvo AYKKOSET rekisteriin. bcf YLIVUOTO,lippuk ;Nollataan YLIVUOTO rekisterin lippu lippuk. L3 btfss YLIVUOTO,lippus ;Testataan lippu100 YLIVUOTO rekisteristä. goto L4 ;Ei yli vuotoa suoraan seuraavan lipun tarkastukseen. clrf ASADAT ;Ylivuoto sattunut.Puhdistetaan rekisteri. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A. movwf ASADAT ;Ladataan w rekisterin arvo AYKKOSET rekisteriin. bcf YLIVUOTO,lippus ;Nollataan YLIVUOTO rekisterin lippu lippus. L4 btfss YLIVUOTO,lipput ;Testataan lipput YLIVUOTO rekisteristä. return ;Ei yli vuotoa.Voidaan palata tästä ohjelmasta. clrf ATUHANNET ;Ylivuoto sattunut.Puhdistetaan rekisteri. movlw 0xA ;Ladataan w rekisteriin luku 10 hexana A. movwf ATUHANNET ;Ladataan w rekisterin arvo AYKKOSET rekisteriin. bcf YLIVUOTO,lipput ;Nollataan YLIVUOTO rekisterin lippu lipput. return ;Paluu tästä ohjelmasta. ;********************************************************************************************** ;Tämä aliohjelma tallentaa laskurin lukeman talteen EEPROM-muistiin. LUKEMA_TALTEEN movf YKKOSET,w movwf ARVO movlw 0x0 movwf OSOITE call KIRJOITUS movf KYMMENET,w movwf ARVO movlw 0x1 movwf OSOITE call KIRJOITUS movf SADAT,w movwf ARVO movlw 0x2 movwf OSOITE call KIRJOITUS movf TUHANNET,w movwf ARVO movlw 0x3 movwf OSOITE call KIRJOITUS return ;********************************************************************************************** ;Tämä aliohjelma näyttää hetken aikaa EEPROM-muistiin tallennettua lukemaa hetken aikaa. ;Ja palauttaa sen jälkeen entisen lukeman näyttöön. LUKEMA_NAYTTOON ;Talletetaan näytössä oleva lukema väliaikaisesti picin RAM-muistiin. movf YKKOSET,w movwf YKKOSETL movf KYMMENET,w movwf KYMMENETL movf SADAT,w movwf SADATL movf TUHANNET,w movwf TUHANNETL ;Haetaan tallennettu lukema EEPROM-muistista. movlw 0x0 movwf OSOITE call LUE movf ARVO,W movwf YKKOSET movlw 0x1 movwf OSOITE call LUE movf ARVO,W movwf KYMMENET movlw 0x2 movwf OSOITE call LUE movf ARVO,W movwf SADAT movlw 0x3 movwf OSOITE call LUE movf ARVO,W movwf TUHANNET ;Näytetään lukemaa hetken aikaa näytössä. VIIVE_LN movlw 0x94 ;Ladataan w rekisteriin luku 100 hexana 64. movwf VIIVE1 ;Ladataan w rekisteri VIIVE1 rekisteriin. LOOP2_LN movlw 0xff ;Ladataan w rekisteriin luku 100 hexana 64. movwf VIIVE0 ;Ladataan w rekisteri VIIVE0 rekisteriin. LOOP0_LN call NAYTTO_PAIVITYS decfsz VIIVE0,f ;1/2ud goto LOOP0_LN ;2 us decfsz VIIVE1,f ;1/2ud goto LOOP2_LN ;2 us Hypätään kohtaan LOOP2. ;Ladataan laskurin RAM-muistista takaisin näyttöön. movf YKKOSETL,w movwf YKKOSET movf KYMMENETL,w movwf KYMMENET movf SADATL,w movwf SADAT movf TUHANNETL,w movwf TUHANNET return ;******************************************Pääohjelma************************************** ;Pääohjelma tarkkailee 16f628:n pinniä 3:me.Ja ohjaa laskurin toimintaa aliohjelmien ;avulla.Ja hakee SEG aliohjelmasta näytönpäivitys aliohjelman tarvitsemat arvot rekistereihin ;YKKOSET,KYMMENET,SADAT ja TUHANNET. Ja tarkkailee myös on nappia painettu. ;Jolloinka tallennetaan nykyinen laskurin lukema EEPROM-muistiin halutaessa. ;****************************************************************************************** MAIN call ALUSTUS ;Kutsutaan ALUSTUS aliohjelma. SILMUKKA call NAYTTO_PAIVITYS;Ohjataan 7-segmenttejä.Tätä täytyy tehdä jottei näyttö sammu. ;******************************************************************* ;Koodi joka huomio napin painalluksen. ;Jos napin vaan käyttää pohjassa. Niin silloin näyttöön tulee hetkeksi aikaa ;EEPROM-muistiin tallentunut lukema. Ja jos nappia pitää niin kauvemman aikaa ;pohjassa alkaa vilkkumaan EEPROM-muistiin tallennettu ja nykyinen lukema vuoronperään. ;Ja hetken aikaa vilkuttua, EEPROM-muistiin tallentuu uusi luku, eli sen hetkinen luku ;joka oli näytössä ennen kuin nappia painettiin. movlw 0x5 ;Alustetaan ALUSTUS-rekisteri luvulla 5. movwf AJASTUS ;Joka määrää montako kertaa laskurin nykyistä arvoa ja ;EEPROM-muistissa olevaa lukemaa vilkutetaan ennen kuin ;EEPROM-muistiin tallennetaan mittarin nykyinen lukema. call NAYTTO_PAIVITYS;Ohjataan 7-segmenttejä.Tätä täytyy tehdä jottei näyttö sammu. ;Tässä tarkkaillaan onko tallennusnappi pohjassa. Jos se on, niin silloin vilkutetaan ;EEPROM-muistissa olevaa vanhaa lukemaa ja laskurin nykyistä lukemaa muutaman kerran ;vuoronperään. Jonka jälkeen mittarin uusi lukema tallentuu vanhan lukeman päälle EEPROM-muistissa. ;Jos nappi päästetään ennen vilkkumisen loppumista, niin laskurin sen hetkinen arvo ei tallennu ;muistiin. btfss PORTB,NAPPI goto NAPPI_OHI call LUKEMA_NAYTTOON btfss PORTB,NAPPI goto NAPPI_OHI NAPPI_ call VIIVE ;Viive aliohjelma sisältää laskurin nykyisen näytön viiveen lisäksi. call LUKEMA_NAYTTOON ;EEPROM-muistissa oleva lukema näyttöön hetkeksi. btfss PORTB,NAPPI goto NAPPI_OHI decfsz AJASTUS,f goto NAPPI_ call LUKEMA_TALTEEN ;Kun AJASTUS-rekisteri on mennyt nollaan talletetaan ;laskurin nykyinen arvo vanhan päälle EEPROM-muistiin ;LUKEMA_TALTEEN aliohjelmassa. TALLETUS_TEHTY call NAYTTO_PAIVITYS;Ohjataan 7-segmenttejä.Tätä täytyy tehdä jottei näyttö sammu. btfsc PORTB,NAPPI goto TALLETUS_TEHTY call VIIVE ;******************************************************************** NAPPI_OHI call NAYTTO_PAIVITYS;Ohjataan 7-segmenttejä.Tätä täytyy tehdä jottei näyttö sammu. btfss PORTA,PULSSI ;Anturin kosketin kärjet kiinni jos hyppää seuraavasta ;käskystä yli.Eli esim.Ovi on auki ja magneettikytkimen ;kärjet kiinni. goto SILMUKKA ;Kosketin kärjet oli auki.Eli ovi oli tällä kertaa kiinni. ;Mennään takaisin SILMUKKA kohtaan. call VIIVE ;Kutsutaan VIIVE aliohjelma vaimentamaan kytkinvärähtely. LOOPPI call NAYTTO_PAIVITYS ;Ohjataan 7-segmenttejä. btfsc PORTA,PULSSI ;Odotetaan oven kiinni menemistä.Eli vahditaan koska, ;Magneettikytkimen kärjet menee kiinni.Sitten hypätään ;seuraavan käskyn yli. goto LOOPPI ;Ovi ei ollut vielä mennyt kiinni.Takaisin kohtaan LOOPPI. call VIIVE ;Kutsutaan VIIVE aliohjelma vaimentamaan kytkinvärähtely. call NAYTTO_OHJAUS ;Nyt lisätään laskurin arvoa yhdellä.NAYTTO_OHJAUS aliohjelmassa. movf AYKKOSET,w ;Siirretään rekisterin AYKKOSET arvo w rekisteriin. call TAULUKKO_SEG ;Kutsutaan TAULUKKO_SEG aliohjelmaa tästä aliohjelmasta. movwf YKKOSET ;Ladataan nyt TAULUKKO_SEG aliohjelmasta w rekisteriin saatu ;arvo YKKOSET rekisteriin. movf AKYMMENET,w ;Siirretään rekisterin AKYMMENET arvo w rekisteriin. call TAULUKKO_SEG ;Kutsutaan TAULUKKO_SEG aliohjelmaa tästä aliohjelmasta. movwf KYMMENET ;Ladataan nyt TAULUKKO_SEG aliohjelmasta w rekisteriin saatu ;arvo KYMMENET rekisteriin. movf ASADAT,w ;Siirretään rekisterin ASADAT arvo w rekisteriin. call TAULUKKO_SEG ;Kutsutaan TAULUKKO_SEG aliohjelmaa tästä aliohjelmasta. movwf SADAT ;Ladataan nyt TAULUKKO_SEG aliohjelmasta w rekisteriin saatu ;arvo SADAT rekisteriin. movf ATUHANNET,w ;Siirretään rekisterin ATUHANNET arvo w rekisteriin. call TAULUKKO_SEG ;Kutsutaan TAULUKKO_SEG aliohjelmaa tästä aliohjelmasta. movwf TUHANNET ;Ladataan nyt TAULUKKO_SEG aliohjelmasta w rekisteriin saatu ;arvo TUHANNET rekisteriin. call YLIVUOTO_ goto SILMUKKA END