;************************************************* ; ; ; Tehnyt Jyrki ; jyrki.k@innopultti.fi ; 21.6-2011 ; Copyright ; ;GSM-kännykkä koodin kehitysvaiheita: ;Ohjaa AT-komenoilla GSM-modulia. ;Numeron valinta potentiometrillä AD-muuntimen avulla. ;Lisänä kaksi nappia muihin toimintoihin. ;Puhelinnumeron asetus ja lähetys RS232-linjaan toimii AT-komennolla: ATD"123456789"; 4.5.2011 ;Puhelinnumero valitaan potentiometrillä ja kuittausnappia painamalla yksi kerrallaan. Jos tulee virhe. ;Niin niin asetetaan potentiometrillä kohdalle C-kirjain ja sen jälkeen painetaan kuittausnappia ja annettu ;numero voidaan pyyhkiä pois yksi kerrallaan. ;Soittaminen valittuun numeroon onnistuu pyörittämällä potentiometrillä kohdalle R-kirjain ja sitten painamalla kuittaunappia. ;Informaatiotekstit toimii napit toimii ja ääni siirtyy molempiin suuntiin 13.5.2011 . ;Toimivin koodi ilman tekstiviestin lukua ja kirjoitusta. 29.5.2011 ;Tulevan puhelun numeron näyttö. ;Julkiseen jakoon koko koodi 21.6.2011 . ;Koodista puuttuu tekstiviestin lukeminen ja kirjoittaminen. ;************************************************* LIST p=16F88 ; list directive to define processor #INCLUDE ; processor specific variable definitions ;Ulkoinen oskillaattori. __CONFIG _CONFIG1, _CP_OFF & _CCP1_RB3 & _DEBUG_OFF & _WRT_PROTECT_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _XT_OSC __CONFIG _CONFIG2, _IESO_OFF & _FCMEN_OFF ;************************************************ ;Omien rekisterien määrittely. ;************************************************ ;Omat rekisterit. cblock 0x20 ;Vapaa muisti alkaa osoitteesta 0x20 luku hexana. ;A/D-muuntimen rekistreitä. ADMUUNNOS ; A/D-muunnos alintavu. ADMUUNNOSKOPIO ;Viiveen rekisterit. d1 d2 d3 ;LCD-näytön ohjaus rekistereitä. OHJAUSKASKY ;Tähän tulee kaikki ohjauskäskyt, jotka menee OHJAUSKOMENTO ja KIRJOITUSKOMENTO aliohjemmille. ENITENM4 VAHITENM4 NUMERO ;Tähän tulee puhelinnumeron numero. ;Puhelinnumeron ja tekstiviestidatan muistiin tallennus rekisterit. PAIKKA3 PAIKKA3KOPIO PAIKKA2 PAIKKA2KOPIO TEMP ;RS-232-linjan rekistereitä. TIETO TIETO1 VIRHE VIRHETEKSTI MERKKEJATULLUT TARKASTETAANMERKIT TESTI TAULUKKO PUHELUNTILA ;Tässä rekisterissä on tieto K (kyllä) ja E (ei) kirjaimilla, onko puhelu menossa vai ei. endc ;Omien rekistereiden määrittely loppuu tähän. ;***** VARIABLE DEFINITIONS w_temp EQU 0x71 ; variable used for context saving status_temp EQU 0x72 ; variable used for context saving ;LCD-näytön bitit. ;Bitit jotka tarvitaan LCD-näytön ohjailussa. E equ 1 RS equ 0 RW equ 4 LCDKIIREINEN equ 3 ;Nappien bitit. KUITTAUS equ 6 ; PERUUTUS equ 7 ; ;************************************************ org 0x000 ;Aletaan täyttämään ohjelmamuistia ;muistipaikasta 0 clrf PORTA ;Tyhjennetään portit clrf PORTB goto PORTIT org 0x004 ;Keskeytyvektori BANKSEL w_temp movwf w_temp call PYYHIRSDATA BANKSEL PAIKKA3 movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. goto FIFOTYHJA FIFOTAYSI movlw 0xFF movwf d1 movwf d2 BANKSEL RCREG movf RCREG,W ;Siirretään RCREG rekisteri w rekisteriin. BANKSEL TIETO movwf TIETO ;Ja sitten w-rekisteri TIETO rekisteriin. movwf TIETO1 ;Ja sitten w-rekisteri TIETO1 rekisteriin. movwf TESTI call KIRJOITUS3 BANKSEL PIR1 btfss PIR1,RCIF goto FIFOTYHJA goto FIFOTAYSI FIFOTYHJA btfsc PIR1,RCIF goto FIFOTAYSI decfsz d1, f goto FIFOTYHJA decfsz d2, f goto FIFOTYHJA movlw A'K' ; movwf MERKKEJATULLUT BANKSEL w_temp movf w_temp,w banksel RCSTA bcf RCSTA,CREN ;Nollataan virheet. bsf RCSTA,CREN ;Kytketään vastaanotto päälle.Ja aletaan odottaa tulevaa tavua. BANKSEL PORTA retfie ;*********************************************************************************************** ;Porttien suuntien määrittely. PORTIT BANKSEL ANSEL ; Select Bank of ANSEL MOVLW 0x00 ; Configure all pins MOVWF ANSEL ; as digital inputs BANKSEL CCP1CON MOVLW 0x00 MOVWF CCP1CON BANKSEL TRISB ;-> BANK 1 ;porttien bitit movlw b'11100100' ;Pinnut 6 ja 7 napeille sisääntuloiksi. Samoin 2 ja 5 LCD-näytön takia. movwf TRISB ;portb = output kaikki pinnit. Paitsi 0 pinni, johon tulee keskeytys. BANKSEL TRISA ;-> BANK 1 movlw b'00010000' ;siirrä w rekisteriin '00000'. movwf TRISA ;porta = output kaikki pinnit paitsi PORTA 4. ; BANKSEL PORTA ;-> BANK 0 bcf INTCON,GIE ;Estetään kaikki keskeytykset. goto MAIN ;****************************************** ;Infotekstit. SAAPUVAPUHELUDB ;Saapuva puhelu teksti näyttöön. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4S4a4a4p4u4v4a4 4p4u4h4e4l4u4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. STARTDB ;START teksti näyttöön. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4S4t4a4r4t4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. TSIDB ;Tee se itse GSM teksti näyttöön. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4T4e4e4 4s4e4 4i4t4s4e4 4G4S4M4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. EIKERKEADB ;Ei kerkea näyttöön. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4E4i4 4k4e4r4k4e4a4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. KATKAISIDB ;Katkaisi näyttöön. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4K4a4t4k4e4s4i4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. EIVASTANNUTDB ;Ei tavoitettu näyttöön. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4E4i4 4t4a4v4o4i4t4e4t4t4u4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. PUHELUDB ;Puhelu näyttöön. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4P4u4h4e4l4u4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. ;Hälytykset GSM-modulilta. NOCARRIERDB ;NO CARRIER. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4N4O4 4C4A4R4R4I4E4R4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. RINGDB ;RING. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4R4I4N4G4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. BUSYDB ;BUSY. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4B4U4S4Y4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. NOANSWERDB ;NO ANSWER. movf TAULUKKO,W incf TAULUKKO addwf PCL,f ;Lisätään PCL eli ohjelmalaskuriin w rekisterin arvo. ;Jonka jälkeen tapahtuukin hyppy johonkin alla db-taulukon kohtaan. ;Se mihinkä kohtaan hyppy kohdistuu. ;Niin siinä oleva arvo ladataan w rekisteriin. ;Ja sitten hypätään tästä aliohjelmasta pois. db "4N4O4 4A4N4S4W4E4R4/" ;Taulukossa numero 4 vastaa RETLW käskyä, ;joka palauttaa numeron 4 jälkeen olevan merkin oli se mikä tahansa merkki eli kirjain, numero yms. ;****************************************** ;LCD-näytön ohjausaliohjelmisto ;Tarvittavia rekistereitä. ;OHJAUSKASKY ;Tähän tulee kaikki ohjauskäskyt, jotka menee OHJAUSKOMENTO ja KIRJOITUSKOMENTO aliohjemmille. ;ENITENM4 ;VAHITENM4 ;d1 ;d2 ;d3 ; ;Aliohjelmien esittely: ;LCDKAYNNISTYS Käynnistää näytön 4-bititillä ohjattavaksi. ;OHJAUSKOMENTO Suorittaa LCD-näytön ohjaukseenliittyvät komennot, kuten tyhjennys, kursorin siirto, uudelle riville siirtyminen jne. ;KIRJOITUSKOMENTO Kirjoittaa halutun merkin näyttöön. ;LCDVARATTU Tarkistaa koska LCD-näyttö on suorittanut kirjoituksen KIRJOITUSKOMENTO aliohjelman jälkeen. ;**************************************** ;LCD-näytön käynnistys viiveitä. ;***************************************** VIIVE15MS ;16993 cycles movlw 0x46 movwf d1 movlw 0x0E movwf d2 VIIVE15MS_0 decfsz d1, f goto $+2 decfsz d2, f goto VIIVE15MS_0 ;3 cycles goto $+1 nop ;4 cycles (including call) return ;********************************************* VIIVE6MS ;5993 cycles movlw 0xAE movwf d1 movlw 0x05 movwf d2 VIIVE6MS_0 decfsz d1, f goto $+2 decfsz d2, f goto VIIVE6MS_0 ;3 cycles goto $+1 nop ;4 cycles (including call) return ;************************************************** VIIVE1MS ;496 cycles movlw 0xA5 movwf d1 VIIVE1MS_0 decfsz d1, f goto VIIVE1MS_0 ;4 cycles (including call) return ;***************************************************** SATAMIKROSEKUNTTIA ;145 cycles movlw 0x30 movwf d1 SATAMIKROSEKUNTTIA_0 decfsz d1, f goto SATAMIKROSEKUNTTIA_0 ;1 cycle nop ;4 cycles (including call) return ;***************************************************** LCDKAYNNISTYS CALL VIIVE15MS ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. bsf PORTB,E movlw 0x3 movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA CALL VIIVE15MS ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. CALL VIIVE6MS ;Odotetaan vähintään 5 ms. bsf PORTB,E movlw 0x3 movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA CALL VIIVE1MS ;Odotetaan vähintään 1 ms. bsf PORTB,E movlw 0x3 movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA ;Ja sitten käynnistetään LCD-moduli neljä bittisenä. CALL VIIVE1MS ;Odotetaan vähintään 1 ms. bsf PORTB,E movlw 0x3 movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA call SATAMIKROSEKUNTTIA bsf PORTB,E movlw 0x2 movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA CALL VIIVE1MS ;Odotetaan vähintään 1 ms. CALL VIIVE15MS ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. ;---Nyt näyttö on käynnistynyt 4 bittisenä, joten seuraavat 8-bittiset käskyt pitää antaa 2 osassa eli 4 bitin paloina. Joista ensin annetaan aina ylimmät neljä bittiä, sitten alimmat 4. ;Tekstirivien määrä 2/1, 0=1 rivi ja 1=2 rivi näyttö, ja merkkikoko 10/7, 0=5x7 ja 1=5x10 pisteen matriisi. ;Neljä eniten merkitsevää bittiä. bsf PORTB,E movlw 0x3 movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA call SATAMIKROSEKUNTTIA ;Neljä vähiten merkitsevää bittiä. bsf PORTB,E movlw 0x8 movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA CALL VIIVE1MS ;Odotetaan vähintään 1 ms. CALL VIIVE15MS ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. ;Näyttö pitäisi olla toimintakunnossa. return ;**************************************************** ;OHJAUSKASKY ;ENITENM4 ;VAHITENM4 OHJAUSKOMENTO ;Muutetaan OHJAUSKASKY-rekisteri ENITENM4 ja VAHITENM4 rekistereihin. movf OHJAUSKASKY,W movwf VAHITENM4 bcf VAHITENM4,4 bcf VAHITENM4,5 bcf VAHITENM4,6 bcf VAHITENM4,7 movf OHJAUSKASKY,W movwf ENITENM4 swapf ENITENM4 bcf ENITENM4,4 bcf ENITENM4,5 bcf ENITENM4,6 bcf ENITENM4,7 ;Neljä eniten merkitsevää bittiä. bsf PORTB,E movf ENITENM4,W movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA call SATAMIKROSEKUNTTIA ;Neljä vähiten merkitsevää bittiä. bsf PORTB,E movf VAHITENM4,W movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA CALL VIIVE15MS return ;***************************************** ;OHJAUSKASKY ;ENITENM4 ;VAHITENM4 KIRJOITUSKOMENTO ;Muutetaan OHJAUSKASKY-rekisteri ENITENM4 ja VAHITENM4 rekistereihin. movf OHJAUSKASKY,W movwf VAHITENM4 bcf VAHITENM4,4 bcf VAHITENM4,5 bcf VAHITENM4,6 bcf VAHITENM4,7 movf OHJAUSKASKY,W movwf ENITENM4 swapf ENITENM4 bcf ENITENM4,4 bcf ENITENM4,5 bcf ENITENM4,6 bcf ENITENM4,7 bsf PORTB,RS ;Neljä eniten merkitsevää bittiä. bsf PORTB,E movf ENITENM4,W movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E clrf PORTA call SATAMIKROSEKUNTTIA ;Neljä vähiten merkitsevää bittiä. bsf PORTB,E movf VAHITENM4,W movwf PORTA call SATAMIKROSEKUNTTIA bcf PORTB,E bcf PORTB,RS clrf PORTA call LCDVARATTU return ;******************************************* LCDVARATTU BANKSEL TRISA movlw b'011000' ;siirrä w rekisteriin '001000'. movwf TRISA ;porta = output kaikki pinnit paitsi PORTA 3. BANKSEL PORTA bsf PORTB,RW POLLAUS call SATAMIKROSEKUNTTIA bsf PORTB,E call SATAMIKROSEKUNTTIA btfss PORTA,LCDKIIREINEN ;Tarkastetaan onko bitti 7 nolla, jos ei ole niin hypätään seuraavn käskyn yli. goto MENINOLLAAN ;Hyppy kohtaan MENINOLLAAN. bcf PORTB,E goto POLLAUS MENINOLLAAN bcf PORTB,RW BANKSEL TRISA movlw b'010000' ;siirrä w rekisteriin '010000'. movwf TRISA ;porta = output kaikki pinnit paitsi PORTA 3. BANKSEL PORTA return ;********************************************** ;Tässä päivitetään näytön tekstit. NAYTTO_PAIVITYS1 ;bcf INTCON,GIE movlw 0x02 ; Kursori kotia. movwf OHJAUSKASKY call OHJAUSKOMENTO ;RAM-muistin osoittimen kopiointi myöhempää palautusta varten sekä alustus. movf PAIKKA2,W movwf PAIKKA2KOPIO call ALUSTARAMMUISTIPAIKKA call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUEPUHNUMERO movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw 0xA8 ;Toiselle riville movwf OHJAUSKASKY call OHJAUSKOMENTO movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO call LUKU3 movf TIETO,w ;Siirretään TIETO rekisterin arvo W-rekisteriin. movwf OHJAUSKASKY call KIRJOITUSKOMENTO ;RAM-muistin osoittimen kopion palautus. movf PAIKKA2KOPIO,W movwf PAIKKA2 bsf INTCON,GIE return ;************************************************* ENSINMAISETKASKYTLCDLLE movlw 0x08 ; Pimennetään näyttö. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS movlw 0x01 ; Tyhjennetään näyttö. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS movlw 0x06 ; Näytön merkkimuistin osoittimen asetukset. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS movlw 0x0C ; Modulin näyttö D=päälle(1) pois(0), kursori U=käytössä(1) pois(0), B=vilkutus käytössä(1) pois(0) movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS movlw 0x02 ; Siirretään kursori kotia. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return ;****************************************************************************************** ;Viive näytön käynnistymiseen 0,5s 4Mhz. PUOLISEK ;499994 cycles movlw 0x03 movwf d1 movlw 0x18 movwf d2 movlw 0x02 movwf d3 PUOLISEK_0 decfsz d1, f goto $+2 decfsz d2, f goto $+2 decfsz d3, f goto PUOLISEK_0 ;2 cycles goto $+1 ;4 cycles (including call) return ;****************************************************************************************** ;Aliohjelmien alusta. ;********************************************************************************************* ;USART eli RS232-väylän alustaminen 1200 nopeuteen 4Mhz. ALUSTAUSART banksel SPBRG movlw 0x33 ;Alusta siirtonopeuden määrittävä arvo SPBRG rekisteriin.Tämä arvo toimii 4Mhz kiteellä jolloin nopeus on 1200 . movwf SPBRG ;Siirrä arvo SPRG rekisteriin.Tämä arvo täytyy laskea kiteen taajuuden mukaiseksi.Katso 16f268 manuaalin s.73. ;Sieltä löytyy kaava tähän.Siittä saatu arvo sitten muutetaan vain hexaksi ja pitäisi toimia... banksel TXSTA movlw b'00100000' ;TXSTA rekisterin bittien selitykset löytyy esim. 16f628 mamuaalista s.71 . movwf TXSTA ;Siirrä TXSTA rekisteriin. banksel PIE1 bcf PIE1,TXIE ;Jos halutaan lähetyksen keskeytys päälle niin aseta TXIE bitti ykköseksi PIE1 rekisterissä. bsf PIE1,RCIE ;Jos halutaan vastaanoton keskeytys päälle niin aseta RCIE bitti ykköseksi PIE1 rekisterissä. bsf INTCON,PEIE bcf INTCON,GIE ;Estetään kaikki keskeytykset. banksel RCSTA movlw b'10010000' ;RCSTA rekisterin bittien selitykset löytyy esim. 16f628 mamuaalista s.72 . movwf RCSTA ;rcsta movf RCREG, W ;nollaa lähetys ja vastaanotto liput rcif. return ;Koska näyttöä tässä ei tarvita, niin tehdään pelkkä keskeytyksen alustus ja poistutaan tästä aliohjelmasta. ;********************************************************** ; setup ADC module for RA0 as an analog input, Fosc/32 conversion ; clock (20-Mhz), and internal Vdd/Vss Voltage Reference. ;AD-muuntimen alustus 8-bittiseksi. ALUSTAAD banksel TRISA ; select Bank 1 |B1 movlw b'00010000' ; |B1 movwf TRISA ; movlw b'00010000' ; set RA4/AN4 pin as analog and |B1 movwf ANSEL ; other 6 ANx pins as digital |B1 movlw b'01000000' ; ADSC2 clock source/2 |B1 movwf ADCON1 ; left justified, internal Vref |B1 bcf STATUS,RP0 ; select Bank 0 |B0 ; movlw b'01000000' ; Fosc/08, ch 0, ADC off ( 8-mhz) |B0 movlw b'10100000' ; Fosc/32, ch 4, ADC off (20-mhz) |B0 movwf ADCON0 ; |B0 return ;********************************************************************************************** ; Noudetaan A/D-muuntimelta 8-bittinen lukema pelkästään ADRESL rekisteristä ADMUUNNOS rekisteriin. ; turn on the ADC module, take a reading, return with 8 most ; signigicant bits of reading in W ADMUUNNOSTALTEEN banksel ADCON1 ;11111111 11000000 ;A/D-muuntimen tulos näin, kun ADCON1 rekisterin bitti ADFM on nolla. bcf ADCON1,ADFM ;00000011 11111111 ;A/D-muuntimen tulos näin, kun ADCON1 rekisterin bitti ADFM on yksi. banksel ADCON0 ADC bsf ADCON0,ADON ; turn on AD module |B0 bcf PIR1,ADIF ; clear AD interrupt flag |B0 movlw d'33' ; use 33 (20 mhz) or 13 (8 mhz) |B0 movwf TEMP ; |B0 ACQ decfsz TEMP,F ; wait 20 usec to acquire |B0 goto ACQ ; |B0 bsf ADCON0,GO_DONE ; start conversion |B0 ADX btfsc ADCON0,GO_DONE ; conversion complete? |B0 goto ADX ; no, loop |B0 banksel ADRESH movf ADRESH,W ; get result low byte |B0 movwf ADMUUNNOS ;ADMUUNNOS movwf ADMUUNNOSKOPIO bcf ADCON0,ADON ; turn off AD module |B0 return ;**************************************************************************************** ;Numeroiden tulostus aliohjelma. Aliohjelma tulostaa ADMUUNNOS-rekisterin arvosta 0-9 numeron tai sitten + merkin. ;Vähentämällä arvosta aina 25. NUMEROT ;movlw 0xD5 ;movwf ADMUUNNOS movlw A'9' movwf NUMERO goto OHINUMERO NUMEROTLOOP decf NUMERO OHINUMERO movlw 0x15 ;Luku 21 hexana eli 15. subwf ADMUUNNOS ;Vähennetään luku 25 ADMUUNNOS-rekisteristä. btfsc STATUS,C goto NUMEROTLOOP movlw A'/' ;Jos NUMERO-rekisterissä tämä merkki niin vaihdetaan se +-merkiksi. xorwf NUMERO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto ONKOC ;Merkki ei ollut / eikä sitä tarvitse vaihtaa + merkiksi, joten paluu tästä aliohjelmasta. movlw A'+' ;Vaihdetaan merkki + merkiksi. movwf NUMERO movwf TIETO ;Siirretään myös TIETO-rekisteriin jos numero aijotaan tallentaa. return ONKOC movlw A'-' ;Jos NUMERO-rekisterissä tämä merkki niin vaihdetaan se --merkiksi. xorwf NUMERO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto ONKOR ;Tarkastetaan onko merkki R? movlw A'C' ;Vaihdetaan merkki C merkiksi. movwf NUMERO movwf TIETO ;Siirretään myös TIETO-rekisteriin jos numero aijotaan tallentaa. return ONKOR movlw A'.' ;Jos NUMERO-rekisterissä tämä merkki niin vaihdetaan se R-merkiksi. xorwf NUMERO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto PALUUNUMEROSTA ;Merkki ei ollut / eikä sitä tarvitse vaihtaa + merkiksi, joten paluu tästä aliohjelmasta. movlw A'R' ;Vaihdetaan merkki R merkiksi. movwf NUMERO movwf TIETO ;Siirretään myös TIETO-rekisteriin jos numero aijotaan tallentaa. return PALUUNUMEROSTA movf NUMERO,W ;Siirretään NUMERO-rekisteri myös TIETO-rekisteriin jos numero aijotaan tallentaa. movwf TIETO return ;**************************************************************************************** ALUSTUS call LCDKAYNNISTYS ;Käynnistää näytön 4-bititillä ohjattavaksi. call ENSINMAISETKASKYTLCDLLE call ALUSTAUSART call ALUSTAAD return ;------------------------------------------------------------------------------ ;Alustetaan RAM-muistipaikka. ALUSTARAMMUISTIPAIKKA movlw 0xA4 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki2:ssa movwf PAIKKA2 ;PAIKKA2 rekisteriin. return ;------------------------------------------------------------------------------- ;Puhelinnumeron tallennus aliohjelmat. ;Valmistellaan RAM-muistin pyyhkiminen pankki2, jonne tulee tekstiviestistä saatu data. PYYHIDATA movlw A' ' movwf TIETO call ALUSTARAMMUISTIPAIKKA movlw 0x29 ;Määritellään tyhjennys määrä muistista 40 paikkaan. movwf TEMP ; PYYHITAANMUISTI ;Jotta se ei ole täynnä aikaisempien viestien datoja. call KIRJOITUS2 ;Käydään kirjoittamassa tieto pankki2:een. incf PAIKKA2 decfsz TEMP goto PYYHITAANMUISTI call ALUSTARAMMUISTIPAIKKA return ;------------------------------------------------------------------------------ ;Pyyhitään RAM-muisti, jonne tulee data RS-232 linjaa myöten tarkastamista varten. PYYHIRSDATA movlw A' ' movwf TIETO movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. movlw 0xC1 ;Määritellään tyhjennys määrä muistista 40 paikkaan. movwf TEMP ; PYYHITAANRSMUISTI ;Jotta se ei ole täynnä aikaisempien viestien datoja. call KIRJOITUS3 ;Käydään kirjoittamassa tieto pankki2:een. decfsz TEMP goto PYYHITAANRSMUISTI movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. return ;------------------------------------------------------------------------------ ;Tekstiviestin RAM-muistista luku aliohjelma. LUKU2 BANKSEL PAIKKA2 ;Select Bank0. movf PAIKKA2,w ;Siirretään PAIKKA2 rekisterin arvo W-rekisteriin. BANKSEL FSR ;Select Bank1. movwf FSR ;Siirretään W-rekisteri RAM-osoittimeen. BANKSEL INDF movf INDF,w ;Siirretään INDF rekisterin arvo W-rekisteriin. BANKSEL TIETO ;Select Bank0. movwf TIETO ;Siirretään W-rekisteri TIETO rekisteriin,Joka on pankki 0:ssa. movwf TIETO1 ;Siirretään W-rekisteri TIETO1 rekisteriin,Joka on pankki 0:ssa. BANKSEL PORTA return ;------------------------------------------------------------------------------ ;Tekstiviestin RAM-muistiin kirjoitus aliohjelma. KIRJOITUS2 BANKSEL PAIKKA2 ;Select Bank0. movf PAIKKA2,w ;Siirretään PAIKKA2 rekisterin arvo w rekisteriin. BANKSEL FSR ;Select Bank1. movwf FSR ;Siirretään w rekisteri ram osottimeen. BANKSEL TIETO ;Select Bank0. movf TIETO,w ;Siirretään TIETO rekisterin arvo w rekisteriin. BANKSEL INDF ;Select Bank1. movwf INDF ;Lataa w rekisteri INDF rekisteriin.Jolloinka se latautuu FSR rekisterin osoitamana paikkaan pankki3:ssa BANKSEL PORTA ;Select Bank0. return ;----------------------------------------------------------------------------- ;Tallennetaan RS-232 linjasta tuleva data tänne. ;Aliohjelma käyttää pankit 3 ja 4 lähes kokonaan ja kykenee lukemaan näin ollen 192 kirjoitettua tavua yhtä soittoa. LUKU3 movf PAIKKA3,W movwf PAIKKA3KOPIO movlw 0x70 ;W-rekisteriin luku. subwf PAIKKA3 ;Vähennetään PAIKKA3 rekisteristä W-reksiteriin annettu luku. btfss STATUS,C ;Jos vähennettävä rekisteri eli PAIKKA3 menee miinukselle vähennyksen jälkeen tämä lippu menee ykköseksi. goto MAHTUUVIELALUK ;Luku alle 6F joten jatketaan lukemista tässä pankissa. ;Jos tullaan tähän täytyy vaihtaa rekisterin PAIKKA3 osoitin seuraavaan pankkiin, koska edellinen on luettu. movf PAIKKA3KOPIO,W ;Suoritetaan uusi vähennyslasku, jotta nähdään ollaanko tähän kohtaan tultu jo aikaisemmin. movwf PAIKKA3 ;Jos on, niin PAIKKAKOPIO3 rekisteriin ei laiteta toista kertaa luku 90, koska PAIKKA3 rekisteri on jo sen yli. movlw 0x90 ;W-rekisteriin luku. subwf PAIKKA3 ;Vähennetään PAIKKA3 rekisteristä W-reksiteriin annettu luku. btfsc STATUS,C ;Jos vähennettävä rekisteri eli PAIKKA3 menee miinukselle vähennyksen jälkeen tämä lippu menee ykköseksi. goto MAHTUUVIELALUK ;Luku yli 90 joten jatketaan lukemista tässä pankissa. ;Jos tullaan tähän PAIKKA3 rekisterin luku oli pienempi kuin 90. ;Ja näin ollen ladataan seuraavan pankin muistiinosoitin PAIKKA3KOPIO rekisteriin josta se sitten kopiodaan PAIKKA3 rekisteriin. movlw 0x90 ;Lataa seuraavan vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3KOPIO ;PAIKKA3 rekisteriin. MAHTUUVIELALUK movf PAIKKA3KOPIO,W movwf PAIKKA3 BANKSEL PAIKKA3 ;Select Bank0. movf PAIKKA3,w ;Siirretään PAIKKA2 rekisterin arvo W-rekisteriin. bsf STATUS,IRP ;Avataan pankit 2 ja 3 epäsuoralle muistiin osoitukselle. BANKSEL FSR ;Select Bank1. movwf FSR ;Siirretään W-rekisteri RAM-osoittimeen. BANKSEL INDF movf INDF,w ;Siirretään INDF rekisterin arvo W-rekisteriin. BANKSEL TIETO ;Select Bank0. movwf TIETO ;Siirretään W-rekisteri TIETO rekisteriin,Joka on pankki 0:ssa. movwf TIETO1 ;Siirretään W-rekisteri TIETO1 rekisteriin,Joka on pankki 0:ssa. BANKSEL PORTA bcf STATUS,IRP ;Suljetaan pankit 2 ja 3 epäsuoralle muistiin osoitukselle. movlw 0xF0 ;0xF0 xorwf PAIKKA3,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return incf PAIKKA3 return ;------------------------------------------------------------------------------ ;RAM-muistiin kirjoitus aliohjelma. ;Aliohjelma käyttää pankit 3 ja 4 lähes kokonaan ja kykenee tallentamaan näin ollen 192 tavua yhtä soittoa. KIRJOITUS3 movf PAIKKA3,W movwf PAIKKA3KOPIO movlw 0x70 ;W-rekisteriin luku. subwf PAIKKA3 ;Vähennetään PAIKKA3 rekisteristä W-reksiteriin annettu luku. btfss STATUS,C ;Jos vähennettävä rekisteri eli PAIKKA3 menee miinukselle vähennyksen jälkeen tämä lippu menee ykköseksi. goto MAHTUUVIELAKIR ;Luku alle 6F joten jatketaan täyttämistä tässä pankissa. ;Jos tullaan tähän täytyy vaihtaa rekisterin PAIKKA3 osoitin seuraavaan pankkiin, koska edellinen on täysi. movf PAIKKA3KOPIO,W ;Suoritetaan uusi vähennyslasku, jotta nähdään ollaanko tähän kohtaan tultu jo aikaisemmin. movwf PAIKKA3 ;Jos on, niin PAIKKAKOPIO3 rekisteriin ei laiteta toista kertaa luku 90, koska PAIKKA3 rekisteri on jo sen yli. movlw 0x90 ;W-rekisteriin luku. subwf PAIKKA3 ;Vähennetään PAIKKA3 rekisteristä W-reksiteriin annettu luku. btfsc STATUS,C ;Jos vähennettävä rekisteri eli PAIKKA3 menee miinukselle vähennyksen jälkeen tämä lippu menee ykköseksi. goto MAHTUUVIELAKIR ;Luku yli 90 joten jatketaan täyttämistä tässä pankissa. ;Jos tullaan tähän PAIKKA3 rekisterin luku oli pienempi kuin 90. ;Ja näin ollen ladataan seuraavan pankin muistiinosoitin PAIKKA3KOPIO rekisteriin josta se sitten kopiodaan PAIKKA3 rekisteriin. movlw 0x90 ;Lataa seuraavan vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3KOPIO ;PAIKKA3 rekisteriin. MAHTUUVIELAKIR movf PAIKKA3KOPIO,W movwf PAIKKA3 movlw 0xF0 ;0xF0 xorwf PAIKKA3,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return bsf STATUS,IRP ;Avataan pankit 2 ja 3 epäsuoralle muistiin osoitukselle. BANKSEL PAIKKA3 ;Select Bank0. movf PAIKKA3,w ;Siirretään PAIKKA2 rekisterin arvo w rekisteriin. BANKSEL FSR ;Select Bank1. movwf FSR ;Siirretään w rekisteri ram osottimeen. BANKSEL TIETO ;Select Bank0. movf TIETO,w ;Siirretään TIETO rekisterin arvo w rekisteriin. BANKSEL INDF ;Select Bank1. movwf INDF ;Lataa w rekisteri INDF rekisteriin.Jolloinka se latautuu FSR rekisterin osoitamana paikkaan pankki3:ssa BANKSEL PORTA ;Select Bank0. bcf STATUS,IRP ;Suljetaan pankit 2 ja 3 epäsuoralle muistiin osoitukselle. incf PAIKKA3 return ;----------------------------------------------------------------------------- ; ; TALLENNAPUHMUMERO call KIRJOITUS2 ;Käydään kirjoittamassa tieto pankki2:een. incf PAIKKA2 return ;-------------------------------------------------------- LUEPUHNUMERO call LUKU2 incf PAIKKA2 return ;------------------------------------------------------------- PYYHIPUHNUMERO movlw A' ' ;Käydään kirjoittamassa annettu numero tyhjäksi. movwf TIETO call KIRJOITUS2 decf PAIKKA2 movlw 0xA3 xorwf PAIKKA2,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return ;incf PAIKKA2 ;RAM-muistin ooitin oli mennyt jo alle sallitun -1 joten lisätään sitä +1. return ;****************************************************************************************** ;Lahetys aliohjelma. LAHETYS232 movf TIETO,W movwf TXREG ;Lataa 8 bittinen lähettettävä tavu TXREG rekisteriin w rekisterista.Ja lähetys alkaa. banksel TXSTA UUDESTAAN btfss TXSTA,TRMT ;odota kunnes TX puskuri on tyhjä.Eli TRMT lippu bitti menee ykköseksi. goto UUDESTAAN ;Ei ollut tyhjä.Palataan kohtaan UUDESTAAN. banksel PORTA return ;****************************************************************************************** ;Merkin odotus aliohjelma ;Aliohjelmassa on sisäänrakennettuna paluu jos RS232-väylästä ei tulekaan merkkejä tietyssä ajassa noin 3 sekuntia. VASTAANOTTO232 return banksel RCSTA bcf RCSTA,CREN ;Nollataan virheet. bsf RCSTA,CREN ;Kytketään vastaanotto päälle.Ja aletaan odottaa tulevaa tavua. banksel PIR1 ;bsf INTCON,GIE ;Sallitaan kaikki keskeytykset. ;movf RCREG,w ;Tyhjätään RCREG rekisteri siellä mahdollisesti olevasta tavusta.Ja nollataan lippubitti RCIF. ;Varmuuden vuoksi että saadaan varmasti se merkki joka lähetetään. ;Aikaviive jonka aikaa odotetaan merkkiä. Jos sitä ei tule poistutaan tästä aliohjelmasta. Eikä jäädä jumiin jos merkkiä ei tule. ;2999995 cycles movlw 0x1A movwf d1 movlw 0x8B movwf d2 movlw 0x0A movwf d3 ODOTETAAN movlw A'K' xorwf MERKKEJATULLUT,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto MERKKITULI ;. decfsz d1, f goto $+2 decfsz d2, f goto $+2 decfsz d3, f goto ODOTETAAN ;Tähän tullaan jos merkkiä ei kuulu tietyssä ajassa. EIMERKKIA movlw 0x01 movwf VIRHETEKSTI ;Laitetaan rekisteriin luku 1 hexana, jotta muissa aliohjelmissa asia tulkitaan merkkien loppumiseksi ja aliohjelma toimii sen mukaan. movlw 0x01 movwf VIRHE movlw 0x00 movwf TIETO movlw 0x00 movwf TIETO1 movlw A'E' movwf MERKKEJATULLUT ;bcf INTCON,GIE ;Estetään kaikki keskeytykset. return MERKKITULI movlw A'E' movwf MERKKEJATULLUT ;bcf INTCON,GIE ;Estetään kaikki keskeytykset. return ;------------------------------------------------------------------------------ ;Odotellaan lopuksi OK-kuittausta ennen jatkoa. ;Aliohjelmassa on sisäänrakennettuna paluu jos RS232-väylästä ei tulekaan merkkejä tietyssä ajassa. OKKUITTAUS call PUOLISEK call PUOLISEK movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. movlw 0x9 ;Moduli kaiuttaa annetun AT-komennon yleensä ennen OK-kuittausta. movwf VIRHE ;Joten suodatetaan AT-komento pois ensin. OKLOOP call LUKU3 movlw A'O' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIOIKEAKIRJAIN ;Kun tullaan tähän on RS232-väylästä tullut jo O-kirjain. call LUKU3 movlw A'K' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto OKKUITTAUSVAARIN movlw 0x01 movwf VIRHE return ;OK kuittaus tuli jatketaan eteenpäin. EIOIKEAKIRJAIN decfsz VIRHE, f goto OKLOOP OKKUITTAUSVAARIN movlw 0x01 movwf VIRHE return ;------------------------------------------------------------------------------ ;Return napin painallus. RETUR movlw 0x0d ;cr movwf TIETO call LAHETYS232 movlw 0x0A ;lf movwf TIETO call LAHETYS232 return ;------------------------------------------------------------------------------ ;Puhelinnumero haetaan RAM-muistista ja laitetaan RS232-väylään. ;Ja numero on haettu kun tulee R-kirjain vastaan. PUHNUMERO movlw 0xA4 movwf PAIKKA2 SEURAAVANUMERO call LUKU2 incf PAIKKA2 movlw A'R' xorwf TIETO,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto PALUUPUHNUM call LAHETYS232 goto SEURAAVANUMERO PALUUPUHNUM ;Puhelinnumero on lähetetty RS232-väylään GSM-modulille. decf PAIKKA2 return ;------------------------------------------------------------------------------ ;AT-komento, joka tulee yleensä aina ensin. AT movlw A'A' movwf TIETO call LAHETYS232 movlw A'T' movwf TIETO call LAHETYS232 return ;------------------------------------------------------------------------------ ;ATD-komento, joka soittaa puhelun, PUHNUMERO aliohjelmassa annettuun numeroon. ATD call AT call RETUR call OKKUITTAUS decfsz VIRHE, f goto ATD ;Kun AT-komenta onnistuu niin annetaan itse soittokäsky. call AT movlw A'D' movwf TIETO call LAHETYS232 movlw A'"' movwf TIETO call LAHETYS232 call PUHNUMERO movlw A'"' movwf TIETO call LAHETYS232 movlw A';' movwf TIETO call LAHETYS232 call RETUR call OKKUITTAUS decfsz VIRHE, f goto ATD return ;------------------------------------------------------------------------------ ;ATA-komento, joka vastaa puheluun. ATA call AT call RETUR call OKKUITTAUS decfsz VIRHE, f goto ATA call AT movlw A'A' movwf TIETO call LAHETYS232 call RETUR call OKKUITTAUS decfsz VIRHE, f goto ATA return ;------------------------------------------------------------------------------ ;ATH-komento, joka katkaisee yhteyden. ATH call AT call RETUR call OKKUITTAUS decfsz VIRHE, f goto ATH call AT movlw A'H' movwf TIETO call LAHETYS232 call RETUR call OKKUITTAUS decfsz VIRHE, f goto ATH return ;------------------------------------------------------------------------------ ;AUGAIN-komento, joka säätää mikrofoni tason maksimille, jotta dynaamisen mikrofonin ääni kuuluisi. MICTASO call AT call RETUR call OKKUITTAUS decfsz VIRHE, f goto MICTASO call AT movlw A'$' movwf TIETO call LAHETYS232 movlw A'A' movwf TIETO call LAHETYS232 movlw A'U' movwf TIETO call LAHETYS232 movlw A'G' movwf TIETO call LAHETYS232 movlw A'A' movwf TIETO call LAHETYS232 movlw A'I' movwf TIETO call LAHETYS232 movlw A'N' movwf TIETO call LAHETYS232 movlw A'=' movwf TIETO call LAHETYS232 movlw A'1' movwf TIETO call LAHETYS232 movlw A',' movwf TIETO call LAHETYS232 movlw A'9' movwf TIETO call LAHETYS232 call RETUR call OKKUITTAUS decfsz VIRHE, f goto MICTASO return ;------------------------------------------------------------------------------ ;Saapuvan soiton numeron näyttö päälle. ;AT+CLIP=1 NUMERONAYTTO call AT call RETUR call OKKUITTAUS decfsz VIRHE, f goto NUMERONAYTTO call AT movlw A'+' movwf TIETO call LAHETYS232 movlw A'C' movwf TIETO call LAHETYS232 movlw A'L' movwf TIETO call LAHETYS232 movlw A'I' movwf TIETO call LAHETYS232 movlw A'P' movwf TIETO call LAHETYS232 movlw A'=' movwf TIETO call LAHETYS232 movlw A'1' movwf TIETO call LAHETYS232 call RETUR call OKKUITTAUS decfsz VIRHE, f goto NUMERONAYTTO ;------------------------------------------------------------------------------ ;Tähän aliohjelmaan tullaan kun halutaan ladata näyttöön joku teksti. SAAPUVASOITTOTEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. clrf TAULUKKO SAAPUVASOITTOTEKSTI1 call SAAPUVAPUHELUDB movwf TIETO movlw A'/' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EITULLUTKENOVIIVAA1 return ;Teksti ladattu RAM-muistiin. EITULLUTKENOVIIVAA1 call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto SAAPUVASOITTOTEKSTI1 return KATKAISITEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. clrf TAULUKKO KATKAISITEKSTI1 call KATKAISIDB movwf TIETO movlw A'/' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EITULLUTKENOVIIVAA2 return ;Teksti ladattu RAM-muistiin. EITULLUTKENOVIIVAA2 call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto KATKAISITEKSTI1 return EIKERKEATEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. clrf TAULUKKO EIKERKEATEKSTI1 call EIKERKEADB movwf TIETO movlw A'/' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EITULLUTKENOVIIVAA3 return ;Teksti ladattu RAM-muistiin. EITULLUTKENOVIIVAA3 call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto EIKERKEATEKSTI1 return STARTTEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. clrf TAULUKKO STARTTEKSTI1 call STARTDB movwf TIETO movlw A'/' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EITULLUTKENOVIIVAA4 return ;Teksti ladattu RAM-muistiin. EITULLUTKENOVIIVAA4 call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto STARTTEKSTI1 return TSITEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. clrf TAULUKKO TSITEKSTI1 call TSIDB movwf TIETO movlw A'/' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EITULLUTKENOVIIVAA5 return ;Teksti ladattu RAM-muistiin. EITULLUTKENOVIIVAA5 call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto TSITEKSTI1 return EIVASTANNUTTEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. clrf TAULUKKO EIVASTANNUTTEKSTI1 call EIVASTANNUTDB movwf TIETO movlw A'/' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EITULLUTKENOVIIVAA6 return ;Teksti ladattu RAM-muistiin. EITULLUTKENOVIIVAA6 call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto EIVASTANNUTTEKSTI1 return PUHELUTEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. clrf TAULUKKO PUHELUTEKSTI1 call PUHELUDB movwf TIETO movlw A'/' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EITULLUTKENOVIIVAA7 return ;Teksti ladattu RAM-muistiin. EITULLUTKENOVIIVAA7 call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto PUHELUTEKSTI1 return SOITTAVANUMEROTEKSTI call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. movlw 0x64 movwf TARKASTETAANMERKIT ;TARKASTETAANMERKIT rekisteriin. EKALAINAUSMERKKI decfsz TARKASTETAANMERKIT, f ;Estetään tarkastuslooppiin jäänti jos sattuu tulemaan merkkejä RS-232 väylästä. goto EKALAINAUSMERKKI1 goto EILOYTYNYTLAINAUSMERKKEJA EKALAINAUSMERKKI1 call LUKU3 movlw A'"' xorwf TIETO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli ". goto EKALAINAUSMERKKI ;Jollei tullut lainausmerkkiä takaisin kohtaan EKALAINAUSMERKKI. movlw 0x11 ;Kun eka lainausmerkki on löytynyt niin sen perään tulee puhelinnumero, jonka pituus voi olla korkeintaan sen mitä LCD-näytölle mahtuu. movwf TARKASTETAANMERKIT ;TARKASTETAANMERKIT rekisteriin. TOKALAINAUSMERKKI decfsz TARKASTETAANMERKIT, f ;Estetään tarkastuslooppiin jäänti jos sattuu tulemaan merkkejä RS-232 väylästä. goto TOKALAINAUSMERKKI1 goto EILOYTYNYTLAINAUSMERKKEJA TOKALAINAUSMERKKI1 call LUKU3 movlw A'"' xorwf TIETO,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli ". return ;Toka lainausmerkki tuli, joten poistutaan tästä aliohjelmasta. ;Tokaa lainausmerkkiä ei ole tullut, joten tallennetaan LUKU3 aliohjelmasta saatu merkki. call TALLENNAPUHMUMERO goto TOKALAINAUSMERKKI EILOYTYNYTLAINAUSMERKKEJA call PYYHIDATA ;Käydään pyyhkimässä data RAM-muistista ja alustetaan PAIKKA2 osoitin samalla. return ;------------------------------------------------------------------------------ ;Etsitään RS-232 väylästä tulleista merkeistä mahdollinen viesti. TARKASTAMERKIT movlw A'K' xorwf MERKKEJATULLUT,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. return ;Jos merkkejä ei tullut, niin poistutaan tästä aliohjelmasta. ;bcf INTCON,GIE ;Tarkastukset on pakko olla järjestyksessä ensin NO CARRIER ja sen jälkeen muut. Koska soiton saapuessa GSM-moduli tulostaa koko ajan RING viestiä. ;Ja jos puhelu katkee ilman että siihen keretään vastata tulee NO CARRIER viesti heti RING viestin jälkeen. ;Ja jos RING viesti luetaan eka niin ohjelma jää jumiin odottaan puhelua joka onkin jo katkaistu. ;Tarkastetaan onko hälytys NO CARRIER. movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. movlw 0x64 movwf TARKASTETAANMERKIT ;TARKASTETAANMERKIT rekisteriin. clrf TAULUKKO NOCARRIER call NOCARRIERDB movwf TEMP NOCARRIER1 call LUKU3 movf TEMP,W xorwf TIETO,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto NOCARRIER movlw A'/' xorwf TEMP,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto KATKAISI decfsz TARKASTETAANMERKIT, f ;Ohitetaan mahdolliset returnit yms ylimääräset kuulumattomat merkit. goto NOCARRIER1 ;Tarkastetaan onko hälytys BUSY. movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. movlw 0x64 movwf TARKASTETAANMERKIT ;TARKASTETAANMERKIT rekisteriin. clrf TAULUKKO BUSY call BUSYDB movwf TEMP BUSY1 call LUKU3 movf TEMP,W xorwf TIETO,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto BUSY movlw A'/' xorwf TEMP,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EIKERKEA decfsz TARKASTETAANMERKIT, f ;Ohitetaan mahdolliset returnit yms ylimääräset kuulumattomat merkit. goto BUSY1 ;Tarkastetaan onko hälytys NO ANSWER. movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. movlw 0x64 movwf TARKASTETAANMERKIT ;TARKASTETAANMERKIT rekisteriin. clrf TAULUKKO NOANSWER call NOANSWERDB movwf TEMP NOANSWER1 call LUKU3 movf TEMP,W xorwf TIETO,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto NOANSWER movlw A'/' xorwf TEMP,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto EIVASTANNUT decfsz TARKASTETAANMERKIT, f ;Ohitetaan mahdolliset returnit yms ylimääräset kuulumattomat merkit. goto NOANSWER1 ;Tarkastetaan onko hälytys RING. movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. movlw 0x64 movwf TARKASTETAANMERKIT ;TARKASTETAANMERKIT rekisteriin. clrf TAULUKKO RING call RINGDB movwf TEMP RING1 call LUKU3 movf TEMP,W xorwf TIETO,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto RING movlw A'/' xorwf TEMP,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto SOITTOSAAPUU decfsz TARKASTETAANMERKIT, f ;Ohitetaan mahdolliset returnit yms ylimääräset kuulumattomat merkit. goto RING1 goto EITASMANNYT ;------------------------------------------------------------------ ;Infotekstien esitys. SOITTOSAAPUU ;Jos tullaan tähän joku soittaa. ;call PYYHIRSDATA movlw A'E' ;Merkit luettu. movwf MERKKEJATULLUT SOITTOSAAPUU1 call SAAPUVASOITTOTEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK ;Tarkastetaan hylätäänkö vai vastatanko puheluun. btfsc PORTB,KUITTAUS goto VASTAA btfsc PORTB,PERUUTUS goto HYLKAA call PUOLISEK ;Tarkastetaan hylätäänkö vai vastatanko puheluun. btfsc PORTB,KUITTAUS goto VASTAA btfsc PORTB,PERUUTUS goto HYLKAA call SOITTAVANUMEROTEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK ;Tarkastetaan hylätäänkö vai vastatanko puheluun. btfsc PORTB,KUITTAUS goto VASTAA btfsc PORTB,PERUUTUS goto HYLKAA call PUOLISEK ;Tarkastetaan hylätäänkö vai vastatanko puheluun. btfsc PORTB,KUITTAUS goto VASTAA btfsc PORTB,PERUUTUS goto HYLKAA bsf INTCON,GIE movlw A'K' xorwf MERKKEJATULLUT,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto SOITTOSAAPUU1 ;Jos merkkejä ei tullut, niin poistutaan tästä aliohjelmasta. goto TARKASTAMERKIT return ;Tulevan puhelun toimenpiteet alkaa. ;Vastaa puheluun. VASTAA call ATA call PUHELUTEKSTI call NAYTTO_PAIVITYS1 movlw A'T' ;Asetetaan puhelun tila T niinkuin tuleva puhelu. movwf PUHELUNTILA VASTATTU ;Kytkinvärähtelyn poisto. call PUOLISEK btfsc PORTB,KUITTAUS goto VASTATTU PUHELUNTILANNE btfsc PORTB,PERUUTUS ;Jos painetaan peruutusnappia niin hylätään myös puhelu. goto HYLKAA ;Tarkastetaan tuleeko NO CARRIER sanomaa, jos tulee puhelu on katkennut. movlw A'K' xorwf MERKKEJATULLUT,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto PUHELUNTILANNE movlw A'E' ;Merkit luettu. movwf MERKKEJATULLUT ;Tarkastetaan tulleet merkit. movlw 0x10 ;Lataa ensinmäisen vapaan muistipaikan osoite pankki3:ssa movwf PAIKKA3 ;PAIKKA3 rekisteriin. call LUKU3 ;Ohitetaan kaksi ensinmäistä tavua, koska niissä on rivinvaihto ja return ohjaukset. call LUKU3 clrf TAULUKKO NOCARRIERSANOMA call LUKU3 call NOCARRIERDB movwf TEMP xorwf TIETO,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto NOCARRIERSANOMA movlw A'/' xorwf TEMP,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto PUHELUNTILANNE ;Tästä käskystä yli jos puhelu menee poikki itsestään. ;Katkaise puhelu. HYLKAA movlw A'E' ;Asetetaan puhelun tila. movwf PUHELUNTILA call ATH ;Tulevan puhelun toimenpiteet päättyy. KATKAISI ;Jos tullaan tähän yhteyttä ei saatu tai se katkaistiin. call KATKAISITEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK call KATKAISITEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK call KATKAISITEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK movlw A'L' ;Onko kysymyksessä lähtevä puhelu? xorwf PUHELUNTILA,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LAHTEVAPUHELU ;Jos kysymyksessä lähtevä puhelu niin hypätään kohtaan LAHTEVAPUHELU. ;Jos tullaan tähän puhelu oli tuleva puhelu niin tulostetaan puhelun katkettua TSI teksti näyttöön. call PYYHIDATA call TSITEKSTI call NAYTTO_PAIVITYS1 LAHTEVAPUHELU movlw A'E' ;Asetetaan puhelun tila. movwf PUHELUNTILA movlw A'E' ;Merkit luettu. movwf MERKKEJATULLUT return EIKERKEA ;Jos tullaan tähän yhteyttä ei saatu. ;call PYYHIRSDATA movlw A'E' ;Merkit luettu. movwf MERKKEJATULLUT movlw A'E' ;Asetetaan puhelun tila. movwf PUHELUNTILA call EIKERKEATEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK call EIKERKEATEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK call EIKERKEATEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK bsf INTCON,GIE return EIVASTANNUT ;call PYYHIRSDATA movlw A'E' ;Merkit luettu. movwf MERKKEJATULLUT movlw A'E' ;Asetetaan puhelun tila. movwf PUHELUNTILA call EIVASTANNUTTEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK call EIVASTANNUTTEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK call EIVASTANNUTTEKSTI call NAYTTO_PAIVITYS1 call PUOLISEK call PYYHIDATA call NAYTTO_PAIVITYS1 call PUOLISEK bsf INTCON,GIE return EITASMANNYT ;call PYYHIRSDATA movlw A'E' ;Merkit luettu. movwf MERKKEJATULLUT bsf INTCON,GIE return ;****************************************************************************************** ;Pääohjelma ;****************************************************************************************** MAIN call ALUSTUS call MICTASO call NUMERONAYTTO call PUOLISEK call PYYHIRSDATA call PYYHIDATA call STARTTEKSTI ;call NAYTTO_PAIVITYS1 call PUOLISEK call PUOLISEK call PUOLISEK call PUOLISEK call AT call RETUR call PUOLISEK call NAYTTO_PAIVITYS1 call AT call RETUR call PUOLISEK call NAYTTO_PAIVITYS1 call AT call RETUR call PUOLISEK call NAYTTO_PAIVITYS1 call PUOLISEK call PUOLISEK call PUOLISEK call PUOLISEK call PYYHIDATA goto TEESEITSEGSM LOOPKIERROS call NAYTTO_PAIVITYS1 ;HUOM. Tämä on pakko olla tässä, koska RAM-muistia luetaan ja kirjoitetaan samalla TIETO rekisterillä. ;Ja se tyhjenee joka kerta kun tämäaliohjlam suoritetaan. Joka johtaa siihen, että ei saada tietoa talteen RAM-muistiin. call ADMUUNNOSTALTEEN call NUMEROT call KIRJOITUS2 movlw A'K' xorwf MERKKEJATULLUT,W ; btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli Z. goto NAYTONSAASTO ;Jos merkkejä oli tullut, niin mennään NAYTONSAASTO kohtaan. call VIIVE15MS; call VIIVE15MS; call VIIVE15MS; btfss PORTB,KUITTAUS ;Hypätään seuraavan käskyn yli jos kuittausnappia painetaan. goto LOOPKIERROS KYTKINVARAHTELYPOISTO call VIIVE15MS; call VIIVE15MS; call VIIVE15MS; btfsc PORTB,KUITTAUS goto KYTKINVARAHTELYPOISTO call VIIVE15MS; call VIIVE15MS; call VIIVE15MS; ;Tarkastetaan mitä KUITTAUS kytkimen painamisen jälkeen halutaan tehdä. ;Pyyhitäänkö annettu numero pois numero kerrallaan? movlw A'C' xorwf NUMERO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto SOITETAANKO call PYYHIPUHNUMERO ;Käydään pyyhkimässä numero kerrallaan pois. ;Jos PAIKKA2 rekisterin arvo on A3 ja NUMERO rekisteristä löytyy C-kirjain niin näyttöön tulee TEE SE ITSE GSM teksti. movlw 0xA3 xorwf PAIKKA2,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LOOPKIERROS goto TEESEITSEGSM SOITETAANKO ;Vai soitetaanko jo annettuun numeroon? movlw A'R' xorwf NUMERO,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TALLENNANUMERO ;Tarkastetaan onko annettu numeroa. movlw 0xA4 xorwf PAIKKA2,W btfsc STATUS,Z goto TEESEITSEGSM ;Numero annettu, joten kutsutaan ATD-komento, joka lähettää annetun numeron nyt RS232-väylään. call ATD call PUHELUTEKSTI call NAYTTO_PAIVITYS1 movlw A'L' ;Asetetaan puhelun tila. movwf PUHELUNTILA ;Lähtevän puhelun toiminnot. LAHTEVAPUHELUMENOSSA ;Tarkastetaan onko puhelu menossa tai katkaistu vastaanottajan toimesta tai muuten vain mennyt poikki. movlw A'L' xorwf PUHELUNTILA,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TEESEITSEGSM call TARKASTAMERKIT ;Tarkastetaan RS-232 mahdollisesti merkit jos niissä oli tieto katkenneesta puhelusta ja joka näkyisi Katkaisi tekstinä näytössä. ;Ja samalla PUHELUNTILA rekisterin arvo muutetaan tilaa vastaavaksi. btfss PORTB,PERUUTUS ;Jos painetaan peruutusnappia niin hylätään puhelu. goto LAHTEVAPUHELUMENOSSA call HYLKAA ;Käydään katkaisemassa puhelu samalla Katkaistu teksti esittäen näytössä. goto TEESEITSEGSM TALLENNANUMERO call TALLENNAPUHMUMERO ;Tallenne numero RAM-muistiin odottomaan valintaa AT-komennolla ATD. goto LOOPKIERROS ;Jos puhelinnumero on kokonaan pyyhitty tai ei ole mitään numeroita annettu kun painetaan kuittausnappia. Niin näyttöön tulee "Tee se itse GSM" teksti . TEESEITSEGSM call PYYHIDATA call TSITEKSTI call NAYTTO_PAIVITYS1 NAYTONSAASTO ;Pyöritään tässä kunnes painetaan taas KUITTAUS-nappia. call TARKASTAMERKIT ;Tarkastetaan merkit siltä varalta, että on tulossa puhelu. btfss PORTB,KUITTAUS ;Hypätään seuraavan käskyn yli jos kuittausnappia painetaan. goto NAYTONSAASTO NAYTONSAASTO1 call VIIVE15MS; call VIIVE15MS; call VIIVE15MS; btfsc PORTB,KUITTAUS goto NAYTONSAASTO1 call VIIVE15MS; call VIIVE15MS; call VIIVE15MS; call PYYHIDATA goto LOOPKIERROS end