;****************************************************************************** ; This file is a basic template for assembly code for a PIC18F2550. Copy * ; this file into your project directory and modify or add to it as needed. * ; * ; Refer to the MPASM User's Guide for additional information on the * ; features of the assembler. * ; * ; Refer to the PIC18Fx455/x550 Data Sheet for additional * ; information on the architecture and instruction set. * ; * ;****************************************************************************** ; * ; Filename: * ; Date: * ; File Version: * ; * ; Author: * ; Company: * ; TOIMII 15.8.2011 ;Toimivin 3.8.2011 ;Voi lähettää tekstiviestinä hostin H: polun P: ja tunnisteen T: * ;Sen jälkeen data tallentuu EEPROM-muistiin. ;Osaa laskea CONTEN LENGHT arvon, eikä sitä tarvitse enää itse lisätä. ;Lisätty nopeus, suunta ja helpommin PHP:ssa muokattava GPS-koordinaatti ;POST lomakkeeseen, myöhempää käyttöä varten. 13.8.2011 ;****************************************************************************** ; * ; Files Required: P18F2550.INC * ; * ;****************************************************************************** LIST P=18F2550 ;directive to define processor #include ;processor specific variable definitions ;****************************************************************************** ;Configuration bits ;Microchip has changed the format for defining the configuration bits, please ;see the .inc file for futher details on notation. Below are a few examples. config PLLDIV = 1 ;config CPUDIV = OSC3_PLL4 ;config USBDIV = 2 config FOSC = HS ;XT_XT ;config FCMEM = OFF ;config IESO = OFF config PWRT = ON ;Käyttöjännitteen ylös nousun odotus ON/OFF config BOR = OFF ;Programmable Brown-out Reset (BOR) ;config BORV = 21 config VREGEN = OFF ;USB regulaattori ON/OFF config WDT = OFF ;Vahtikoira ajastin, joka aktivoituu resetoimalla prosessorin jos prosessori jumiutuu. ON/OFF config WDTPS = 32768 ;Vahtikoiran ajastus. config MCLRE = OFF ;MCLRE Pää resetti pinnissä ON/OFF config LPT1OSC = OFF ;Oscillaattorin ajaminen pienellä teholla. Pieni teho altistaa helpommin häiriölle. ON/OFF config PBADEN = OFF config CCP2MX = OFF config STVREN = ON ;Pinon ylivuodon resetti. ON/OFF config LVP = OFF ;Matala jännite ohjelmointi. Jos päällä osa B-portin pinneistä ei toimi. ;config ICPRT = OFF ;config XINST = OFF config DEBUG = OFF ;Muistin luku/kirjoitussuojabittejä. config CP0 = OFF config CP1 = OFF config CP2 = OFF config CP3 = OFF config CPB = OFF config CPD = OFF config WRT0 = OFF config WRT1 = OFF config WRT2 = OFF config WRT3 = OFF config WRTB = OFF config WRTC = OFF config WRTD = OFF config EBTR0 = OFF config EBTR1 = OFF config EBTR2 = OFF config EBTR3 = OFF config EBTRB = OFF ;****************************************************************************** ;Variable definitions ; These variables are only needed if low priority interrupts are used. ; More variables may be needed to store other special function registers used ; in the interrupt routines. CBLOCK 0x080 WREG_TEMP ;variable used for context saving STATUS_TEMP ;variable used for context saving BSR_TEMP ;variable used for context saving ENDC CBLOCK 0x000 ;Väliaikaisia rekistereitä. TEMP TEMPPI VAARATMERKIT VAARATMERKIT1 ;LCD-näytön ohjaus rekistereitä. OHJAUSKASKY ;Tähän tulee kaikki ohjauskäskyt, jotka menee OHJAUSKOMENTO ja KIRJOITUSKOMENTO aliohjemmille. ENITENM4 ;Tähän jaetaan annetun tavun 4 eniten merkitsevää bittiä. VAHITENM4 ;Tähän jaetaan annetun tavun 4 vähiten merkitsevää bittiä. ;Jos tulee /-merkki, niin merkataan sen tuleminen tähän rekisteriin. PAATTYIMERKKI ;Viiveen rekisterit. d1 d2 d3 KELLOTAAJUUS ;Tällä säädetään LCD-näytön viiveet toimimaan suuremmilla kuin 1Mhz kellotaajuuksilla. TEMPKELLOTAAJUUS ;Väliaikainen rekisteri KELLOTAAJUUS rekisterin datalle. ;Sarjaliikenteen lukemisessa tapahtuva OK-viestin etsinnän rekisterit ja muut. OKVIESTITEMP ;Tähän tulee etsittävä kirjain. OKVIESTI ;Tähän tulee tieto, onko OK-viesti tullut sillä sarjaliikenne väylän lukukerralla vai ei. OKLASKURI ;Lasketaan OK 2 kirjainta, niin että ne tulee peräjälkeen eikä ensin yksi ja sitten joskus 100 merkin jälkeen K-kirjain. TAVU MERKKEJATULLUT VIRHE ;Tällä käynnistetään joku aliohjalma uudestaan jollei ole tullut asian mukaisia kuittauksia sen ajamisen jälkeen. VIKA ;Tähän tulee K-kirjain jos GPRS-yhteys ei onnistunut odotetusti. ; OKLOOPESTO ;Ikuiseen looppin joutumisen esto, jos odotettua tulosta ei tullutkaan. ;RAM-puskureiden osoitteet. ;Tekstiviestin RAM-puskurin osoiterekisterit. TEKSTIVIESTIRAMPUSKURIL TEKSTIVIESTIRAMPUSKURIH ;Sarjaliikenneväylän RAM-puskurimuistin osoiterekisterit. SARJALIIKENNERAMPUSKURIL SARJALIIKENNERAMPUSKURIH ;LCD-näytön RAM-puskurimuistin osoiterekisterit. LCDRAMPUSKURIL LCDRAMPUSKURIH ;GPS-datan RAM-puskurimuistin osoiterekisterit. GPSRAMPUSKURIL GPSRAMPUSKURIH ;Yleiskäyttöinen RAM-puskuri rekisterit. TYORAMPUSKURIL TYORAMPUSKURIH ;GPS-koordinaattien nettilinkki RAM-puskuri. LINKKIRAMPUSKURIL LINKKIRAMPUSKURIH ;EEPROM-muistin rekisterit. EEPROMOSOITE EEPROMOSOITETALTEEN ;Vertaile aliohjelman rekistereitä. ;Ohjelma pointterin talletusrekisterit. OHJELMAPOINTTERIU OHJELMAPOINTTERIH OHJELMAPOINTTERIL VERTAILUTASMASI ;Rekisteri johon tulee K-kirjain jos taulun ja RS-232 väylän data täsmäsi. ;Conten lenght laskurin rekisterit. YKKOSET KYMMENET SADAT TUHANNET ;GSM-modulilta saadut suunta ja nopeustiedot. ;Todellinen suunta ei magneettinen yhden desimaalin tarkuudella. SUUNTASADAT SUUNTAKYMMENET SUUNTAYKKOSET SUUNTAPILKKU SUUNTADESIMAALIT ;Nopeus kilometreinä tunnissa yhden desimaalin tarkkuudella. KMSADAT KMKYMMENET KMYKKOSET KMPILKKU KMDESIMAALIT ENDC ;LCD-näytön bitit. ;Bitit jotka tarvitaan LCD-näytön ohjailussa. ;Liittyy LCD-näytön portin LCDOHJAUSBITIT rekisterin määrittelyyn. E equ 3 RS equ 1 RW equ 2 LCDKIIREINEN equ 7 ;Lisäys ja poistonapit B-portissa. POISTA equ 2 LISAA equ 1 ;GSM-modulin käynnistys. GSM equ 4 ;GPS ja GSM modulien vaihto C-portissa PIC 18F2550 RS-232-väylän RC pinniin. GSMRX equ 0 GPSRX equ 1 ;LCD-näytön porttien määrittely kahteen eri porttiin. LCDKASKYTAVU equ PORTB ;Tähän ohjataan LCD-näytön 8 bittinen ohjauskäsky 2 osassa 4 bittinä. LCDOHJAUSBITIT equ PORTA ;Tähän ohjataan LCD-näytön ohjausbitit. LCDKASKYSUUNTAREKISTERI equ TRISB ;Suuntarekisterin määrittely uudelleen LCD-näytön aliohjelman takia. LCDOHJAUSSUUNTAREKISTERI equ TRISA ;Suuntarekisterin määrittely uudelleen LCD-näytön aliohjelman takia. ;****************************************************************************** ;EEPROM data ; Data to be programmed into the Data EEPROM is defined here ORG 0xf00000 DE " " ;****************************************************************************** ;Reset vector ; This code will start executing when a reset occurs. ORG 0x0000 goto PORTIT ;Porttien alustukseen. ;****************************************************************************** ;High priority interrupt vector ; This code will start executing when a high priority interrupt occurs or ; when any interrupt occurs if interrupt priorities are not enabled. ORG 0x0008 bra HighInt ;go to high priority interrupt routine ;****************************************************************************** ;Low priority interrupt vector and routine ; This code will start executing when a low priority interrupt occurs. ; This code can be removed if low priority interrupts are not used. ORG 0x0018 movff STATUS,STATUS_TEMP ;save STATUS register movff WREG,WREG_TEMP ;save working register movff BSR,BSR_TEMP ;save BSR register ; *** low priority interrupt code goes here *** movff BSR_TEMP,BSR ;restore BSR register movff WREG_TEMP,WREG ;restore working register movff STATUS_TEMP,STATUS ;restore STATUS register retfie ;****************************************************************************** ;High priority interrupt routine ; The high priority interrupt code is placed here to avoid conflicting with ; the low priority interrupt vector. HighInt: ;Sarjaportin lukemisen keskeytyksen aliohjelma alkaa tästä. SARJAPORTTILUKU ; Asetetaan puskurin osoite. call SARJALIIKENNERAMPOINT ; Viiverekisterien alustus. movlw 0xff movwf d1 movlw 0xff movwf d2 ;OK-viestin etsintä samalla, kun luetaan sarjaliikenneväylää. movlw 'O' ;OK-viestin eka kirjain, mitä etsitään. movwf OKVIESTITEMP movlw 'E' ;OK-viesti rekisteri merkitään ei löydetyksi OKVIESTI-rekisteriin E-kirjaimella. movwf OKVIESTI ;Koska sarjaportin lukeminen aloitetaan. movlw 0x2 movwf OKLASKURI ;Käytetään tätä OK-viestin etsinnässä apuna laskemaan tulleet kirjaimet. FIFOTAYSI movf RCREG,W movff RCREG,POSTINC0 ; Ladataan data puskuriin. movff RCREG,TAVU movlw 0xff movwf d1 movlw 0xff movwf d2 ;Tarkastetaan löytyykö OK-viestiä osuus. movf OKVIESTITEMP, W xorwf TAVU,W btfss STATUS,Z goto LATAAETSINTALASKURI ;Tähän tullaan kun löytyi O tai K-kirjain. decfsz OKLASKURI, f goto SEURAAVAKSITULTAVAK ;Tähän tullaan jos kyseessä oli K-kirjain ja OK-viesti on löytynyt. movlw 'K' ;OK-viesti merkitään löydetyksi OKVIESTI-rekisteriin K-kirjaimella. movwf OKVIESTI goto LATAAETSINTALASKURI LATAAETSINTALASKURI movlw 'O' ;OK-viestin eka kirjain, mitä etsitään, koska O-kirjain ei ole tullut. movwf OKVIESTITEMP movlw 0x2 movwf OKLASKURI ;Käytetään tätä OK-viestin etsinnässä apuna laskemaan tulleet kirjaimet. goto FIFOTYHJA SEURAAVAKSITULTAVAK movlw 'K' ;OK-viestin toka kirjain, mitä etsitään, koska O-kirjain on tullut. movwf OKVIESTITEMP ;Koska OK-viestiä ei ole vielä löytynyt. goto FIFOTYHJA ;OK-viestin etsintä osuus sarjaliikenne väylästä päättyy tähän. FIFOTYHJA btfsc PIR1,RCIF goto FIFOTAYSI decfsz d1, f goto FIFOTYHJA decfsz d2, f goto FIFOTYHJA movlw A'K' ; movwf MERKKEJATULLUT ;Nollataan kaikki virheet pois. movf RCREG,W ;Tyhjätään RCREG mahdollisesta turhasta tiedosta. movf RCREG,W banksel RCSTA bcf RCSTA, CREN ;Mahdolliset virheet nollataan. bsf RCSTA, CREN goto PALUUKESKEYTYKSESTA ;SARJAPORTIN keskeytys loppuu tähän. PALUUKESKEYTYKSESTA bcf PIR1, T0IF ;Reset flag that indicates interrupt movff BSR_TEMP,BSR ;restore BSR register movff WREG_TEMP,WREG ;restore working register movff STATUS_TEMP,STATUS ;restore STATUS register retfie FAST retfie FAST ;****************************************************************************** ;GSM-modulin alustamiseen GPRS-yhteyteen kuuluvia tauluja. ;GSM-modulin alustus GPRS-yhteyteyteen. GPRS1TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "AT+CGDCONT=1,´IP´,´INTERNET´!" ;Teskti täytyy päättää !-merkkiin. GPRS2TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "AT%CGPCO=1,´PAP,,´,1!" ;Teskti täytyy päättää !-merkkiin. GPRS3TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "AT$NOSLEEP=1!" ;Teskti täytyy päättää !-merkkiin. GPRS4TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "AT$DESTINFO=´!´,1,80, 1!" ;Teskti täytyy päättää !-merkkiin. ATD97TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "ATD*97#!" ;Teskti täytyy päättää !-merkkiin. ;HTTP-pyynnöt GPRS-yhteydelle. ;POST http://koti.mbnet.fi/catapult/projekti/pyynto/index.php HTTP/1.1 ;Host: http://koti.mbnet.fi ;Referer:http://koti.mbnet.fi/catapult/projekti/pyynto/index.php ;Content-Type:application/x-www-form-urlencoded ;Content-Length: 42 ;*****HUOM TAHAN TEKSTIN KOHTAAN PITAA JATTAA VALILYONTI MUUTEN EI TOIMI, ELI TAMA TEKSTI POIS ASTERISKEINEEN.********** ;id=18F2550&data=Mikro-ohjain testi! ;Eli lähetetään POST POSTTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "POST http://! HTTP/1.1!" ;Teskti täytyy päättää !-merkkiin. HOSTTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "Host: !" ;Teskti täytyy päättää !-merkkiin. REFERERTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "Referer:http://!" ;Teskti täytyy päättää !-merkkiin. CONTENTTYPETAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "Content-Type:application/x-www-form-urlencoded!" ;Teskti täytyy päättää !-merkkiin. CONTENTLENGTHTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "Content-Length:!" ;Teskti täytyy päättää !-merkkiin. Tähän tulee DATAPOSTTAULUN merkkien määrä. Voi olla näköjään myös joku noin +3 merkkiä yli sen määrän. DATAPOSTTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. db "id=!&data=!&nopeus=!&suunta=!&gpsphp=!" ;Teksti täytyy päättää !-merkkiin. ;GPRS-yhteyden informaatiotaulut. ;GPRS-yhteyden informaatiotaulut. MUUTAGPRSASETUKSIATAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-asetuksien muuttaminen... <" ;Tesktiviesti täytyy päättää <-merkkiin. ODOTETAANGPRSASETUKSIATAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-asetuksia odotetaan <" ;Tesktiviesti täytyy päättää <-merkkiin. ODOTETAANGPRSASETUKSIA1TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-asetuksia odotetaan. <" ;Tesktiviesti täytyy päättää <-merkkiin. ODOTETAANGPRSASETUKSIA2TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-asetuksia odotetaan.. <" ;Tesktiviesti täytyy päättää <-merkkiin. ODOTETAANGPRSASETUKSIA3TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-asetuksia odotetaan... <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSASETUKSETSAAPUNEETTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-asetukset saapuneet.... <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSALUSTUSTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-yhteys alustetaan <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSALUSTUS1TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-yhteys alustetaan. <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSALUSTUS2TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-yhteys alustetaan.. <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSALUSTUS3TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-yhteys alustetaan... <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSALUSTUSVALMISTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "GPRS-alustus valmis! <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSHTTPPYYNTOTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "HTTP-pyynto palvelimelle... <" ;Tesktiviesti täytyy päättää <-merkkiin. GPRSHTTPPYYNTOTEHTYTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "HTTP-pyynto palvelimelle OK! <" ;Tesktiviesti täytyy päättää <-merkkiin. SOITTAAGPRSTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "Avataan GPRS-yhteys. <" ;Tesktiviesti täytyy päättää <-merkkiin. VIKATAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "Vikatoiminto! Yhteys poikki! <" ;Tesktiviesti täytyy päättää <-merkkiin. ;GPS-tauluja. ;Nettiin meneviä tauluja. LINKKITAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "http://maps.google.fi/maps?q=#" ;Päätetään #-merkkiin. EILINKKIATAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "Ei linkkia#" ;Päätetään #-merkkiin. ;GPS-modulin sanoman tarkastustaulu. GPGGATAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "$GPGGA#" ;Päätetään #-merkkiin. GPVTGTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "$GPVTG#" ;Päätetään #-merkkiin. ;Informaatiotaulut GPS toiminnasta. EIGPSSIGNAALIATAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "Ei paikkatietoa. #" ;Informaatioviesti täytyy päättää #-merkkiin. ;Tekstiviestin informaatiotaulut. TEKSTIVIESTILAHTEETAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "Tekstiviesti lahetetaan... #" ;Päätetään #-merkkiin. TEKSTIVIESTILAHETETTYTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "Tekstiviesti lahetetty. #" ;Päätetään #-merkkiin. ;Käynnistyy taulut, jolla saadaan pieni animaatioefekti aikaiseksi LCD-näyttöön. KAYNNISTYYTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db " GPS-tagi kaynnistyy #" ;Informaatioviesti täytyy päättää #-merkkiin. KAYNNISTYY1TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db " GPS-tagi kaynnistyy. #" ;Informaatioviesti täytyy päättää #-merkkiin. KAYNNISTYY2TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db " GPS-tagi kaynnistyy.. #" ;Informaatioviesti täytyy päättää #-merkkiin. KAYNNISTYY3TAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db " GPS-tagi kaynnistyy...#" ;Informaatioviesti täytyy päättää #-merkkiin. ;GSM-modulin viestien tarkastustaulut. ERRORTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "ERROR#" ;Tarkastustaulut täytyy päättää #-merkkiin. RINGTAULU ;Tallennetaan ohjelmalaskurin tiedot. movff PCL,TBLPTRL movff PCLATH,TBLPTRH movff PCLATU,TBLPTRU return ;Itse teksti, joka löytyy taulusta. ; 12345678123456781234567812345678 LCD-näytön merkkien määrä. Ne joihin ei tule mitään täytyy jättää välilyönnillä tyhjäksi. db "RING#" ;Tarkastustaulut täytyy päättää #-merkkiin. ;****************************************************************************** PORTIT ;Kytketään toimintoja pois päältä pinneistä. clrf PORTA clrf LATA clrf PORTB clrf LATB clrf PORTC clrf LATC BANKSEL ADCON0 ; Select Bank of ADCON0 clrf ADCON0 BANKSEL ADCON1 ; Select Bank of ADCON1 movlw b'00001111' ; Configure all pins movwf ADCON1 ; as digital inputs movlw 07h ; Turn off movwf CMCON ; comparators ;configuration bit = 0); otherwise, read as ‘0’. ;3: Unimplemented in 28-pin devices; read as ‘0’. ;Keskeytykset pinneistä pois päältä. BANKSEL CCP1CON clrf CCP1CON ; CCP moduli off BANKSEL CCP2CON clrf CCP2CON ; CCP moduli off ;Lopuksi asetellaan porttien pinnit joko sisääntuloiksi tai ulostuloiksi. ;Portin pinni saadaan sisääntuloksi 1 ja ulostuloksi 0 . ;A-portti BANKSEL TRISA movlw b'11000001' ;Bitit 7,6,5,4,3,2,1,0 movwf TRISA ;B-portti BANKSEL TRISB movlw b'00000110' ;Bitit 7,6,5,4,3,2,1,0 movwf TRISB ;C-portti BANKSEL TRISC movlw b'11111100' ;Bitit 7,6,5,4,3,2,1,0 movwf TRISC BANKSEL PORTA bcf INTCON,GIE ;Estetään kaikki keskeytykset. goto MAIN ;****************************************************************************** ;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ä. ;***************************************** VIIVE15MILLISEKUNTTIA ;Viive 15ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE15MS ;3743 cycles movlw 0xEC movwf d1 movlw 0x03 movwf d2 VIIVE15MS_0 decfsz d1, f goto VIIVE15MS_0 decfsz d2, f goto VIIVE15MS_0 ;3 cycles nop nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE15MS ;Uusitaan viive. return ;**************************************************************************************** VIIVE4_2MILLISEKUNTTIA ;Viive 4,2ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE4_2MS ;1043 cycles movlw 0xD0 movwf d1 movlw 0x01 movwf d2 VIIVE4_2MS_0 decfsz d1, f goto VIIVE4_2MS_0 decfsz d2, f goto VIIVE4_2MS_0 ;3 cycles nop nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE4_2MS ;Uusitaan viive. return ;****************************************************************************************** VIIVE1MILLISEKUNTTIA ;Viive 1ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE1MS ;244 cycles movlw 0x51 movwf d1 VIIVE1MS_0 decfsz d1, f goto VIIVE1MS_0 ;2 cycles nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE1MS ;Uusitaan viive. return ;****************************************************************************************** VIIVE100MIKROSEKUNTTIA ;Viive 100ms. ;Viive mitoitettu 1Mhz kellotaajuuden mukaan. movf KELLOTAAJUUS,W ;Joten viive pitää uusia riittävän monta kertaa, movwf TEMPKELLOTAAJUUS ;että saadaan haluttu viiveen pituus mikro-ohjaimen taajuuden mukaan. VIIVE100US ;19 cycles movlw 0x06 movwf d1 VIIVE100US_0 decfsz d1, f goto VIIVE100US_0 ;2 cycles nop decfsz TEMPKELLOTAAJUUS, f goto VIIVE100US ;Uusitaan viive. return ;********************************************************************************************** LCDKAYNNISTYS movlw 0x64 ;Asetetaan KELLOTAAJUUS rekisteri. movwf KELLOTAAJUUS bcf LCDOHJAUSBITIT,RS ;RS-ohjausbitti nollaksi. bcf LCDOHJAUSBITIT,RW ;RW-ohjausbitti nollaksi. call VIIVE15MILLISEKUNTTIA ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. call PUOLISEK call PUOLISEK bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU CALL VIIVE15MILLISEKUNTTIA ;Odotetaan vähintään 15 ms virran kytkennän jälkeen. bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE1MILLISEKUNTTIA ;Odotetaan vähintään 1 ms. bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU ;Ja sitten käynnistetään LCD-moduli 4-bittisenä. Jos halutaan käynnistää 8-bittisenä, niin jätetään tämä kohta pois. call VIIVE1MILLISEKUNTTIA ;Odotetaan vähintään 1 ms. bsf LCDOHJAUSBITIT,E movlw b'00110000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bsf LCDOHJAUSBITIT,E movlw b'00100000' movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE15MILLISEKUNTTIA ;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. call RIVIMAARAJAMERKKIKOKO call VIIVE15MILLISEKUNTTIA ;Odotetaan vähintään 15 ms. ;Näyttö pitäisi olla toimintakunnossa. return ;**************************************************** ;OHJAUSKASKY ;ENITENM4 ;VAHITENM4 OHJAUSKOMENTO ;Muutetaan OHJAUSKASKY-rekisteri ENITENM4 ja VAHITENM4 rekistereihin. movf OHJAUSKASKY,W movwf VAHITENM4 swapf VAHITENM4 bcf VAHITENM4,0 bcf VAHITENM4,1 bcf VAHITENM4,2 bcf VAHITENM4,3 movf OHJAUSKASKY,W movwf ENITENM4 ;swapf ENITENM4 bcf ENITENM4,0 bcf ENITENM4,1 bcf ENITENM4,2 bcf ENITENM4,3 ;Neljä eniten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E movf ENITENM4,W movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA ;Neljä vähiten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E movf VAHITENM4,W movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call LCDVARATTU return ;***************************************** ;OHJAUSKASKY ;ENITENM4 ;VAHITENM4 KIRJOITUSKOMENTO ;Tarkastetaan onko tullut /-merkkiä PAATTYIMERKKI rekisteriin. movlw A'#' xorwf PAATTYIMERKKI,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIPAATTYMISMERKKIAVIELA goto PAATTYMISMERKKITULI ;Testataan onko /-merkkiä tullut OHJAUSKASKY rekisteriin. EIPAATTYMISMERKKIAVIELA movff OHJAUSKASKY, PAATTYIMERKKI movlw A'#' xorwf PAATTYIMERKKI,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIMISTAANPAATTYMISMERKKIAVIELA ;Päättymismerkki tullut joten ylikirjoitetaan seuraavaksi tulevat merkit. PAATTYMISMERKKITULI movlw A' ' movwf OHJAUSKASKY EIMISTAANPAATTYMISMERKKIAVIELA ;Muutetaan OHJAUSKASKY-rekisteri ENITENM4 ja VAHITENM4 rekistereihin. movf OHJAUSKASKY,W movwf VAHITENM4 swapf VAHITENM4 bcf VAHITENM4,0 bcf VAHITENM4,1 bcf VAHITENM4,2 bcf VAHITENM4,3 movf OHJAUSKASKY,W movwf ENITENM4 ;swapf ENITENM4 bcf ENITENM4,0 bcf ENITENM4,1 bcf ENITENM4,2 bcf ENITENM4,3 bsf LCDOHJAUSBITIT,RS ;Neljä eniten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E movf ENITENM4,W movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E clrf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA ;Neljä vähiten merkitsevää bittiä. bsf LCDOHJAUSBITIT,E movf VAHITENM4,W movwf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E bcf LCDOHJAUSBITIT,RS clrf LCDKASKYTAVU call VIIVE100MIKROSEKUNTTIA call LCDVARATTU return ;******************************************* ;Tämä aliohjelma odottaa kunnes LCD-näyttö on käsitellyt annetun käskyn/merkin. LCDVARATTU BANKSEL LCDKASKYSUUNTAREKISTERI bsf LCDKASKYSUUNTAREKISTERI,LCDKIIREINEN BANKSEL PORTA bsf LCDOHJAUSBITIT,RW POLLAUS call VIIVE100MIKROSEKUNTTIA bsf LCDOHJAUSBITIT,E call VIIVE100MIKROSEKUNTTIA btfss LCDKASKYTAVU,LCDKIIREINEN ;Tarkastetaan onko bitti LCDKIIREINEN nolla, jos ei ole niin hypätään seuraavn käskyn yli. goto MENINOLLAAN ;Hyppy kohtaan MENINOLLAAN. bcf LCDOHJAUSBITIT,E call VIIVE100MIKROSEKUNTTIA bsf LCDOHJAUSBITIT,E call VIIVE100MIKROSEKUNTTIA bcf LCDOHJAUSBITIT,E goto POLLAUS MENINOLLAAN bcf LCDOHJAUSBITIT,E bcf LCDOHJAUSBITIT,RW BANKSEL LCDKASKYSUUNTAREKISTERI bcf LCDKASKYSUUNTAREKISTERI,LCDKIIREINEN BANKSEL PORTA return ;********************************************** ;Tässä päivitetään näytön tekstit. GPS_NAYTTO_PAIVITYS call KURSORIKOTIASEMAAN ; Asetetaan puskurin osoite, mistä luetaan näyttöön dataa. call GPSRAMPOINT goto NAYTTOON NAYTTO_PAIVITYS call KURSORIKOTIASEMAAN ; Asetetaan puskurin osoite, mistä luetaan näyttöön dataa. call LCDRAMPOINT goto NAYTTOON NAYTTOON ;Luetaan puskuri LCD-näyttöön. movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movlw 0xA8 ;Toiselle riville movwf OHJAUSKASKY call OHJAUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO movf POSTINC1,W movwf OHJAUSKASKY call KIRJOITUSKOMENTO ;Poistetaan lopuksi vielä päättymismerkki PAATTYIMERKKI rekisteristä, koska se ei sieltä muuten poistu. movlw A' ' movwf PAATTYIMERKKI,W return ;************************************************* ;Ensinmäiset käskyt LCD-näytölle käynnistyksen jälkeen. ENSINMAISETKASKYTLCDLLE call SAMMUTANAYTTO call TYHJENNANAYTTO call MERKKIMUISTINOSOITIN call KURSORIKOTIASEMAAN call NAYTTOPAALLE1 return ;************************************************* ;Erilaisia käskyjä LCD-näytölle. ;Bittien merkitykset. HUOM! Bitit erotettu toisistaan pisteillä. Esim. 0.0.0.0.0.0.0.0 ; Bitti => Mitä tarkoittaa. ; 1 => Bitin tila aina. ; 0 => Bitin tila aina. ; * => Oletusasetus LCD-näytössä valmiina. ; x => Ei merkitystä ko. tilanteessa ; 1/D => *1=Lisäys/0=Vähennys ; R/L => Siirtosuunta *1=Oikealle/0=Vasemmalle ; S => Näytön siirto 1=Päällä/*0=Pois ; 8/4 => Dataväylän leveys *1=8 bit/0=4 bit ; D => Näyttö 1=Päällä/*0=Pois ; 2/1 => Näyttö 1=2 rivinen/*0=1 rivinen ; U => Kursori 1=Käytössä/*0=Pois ; 10/7 => Merkkikoko 1=5x10/*0=5x7 pistettä ; B => Kursori vilkutus 1=Päällä/*0=Pois ; D/C Siirto 1=Näyttö/*0=Kursori TYHJENNANAYTTO ; Tyhjennä näyttömuisti 0.0.0.0.0.0.0.1 movlw b'00000001' ; Tyhjennetään näyttö. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return KURSORIKOTIASEMAAN ; Näyttö ja kursori alkutilaan 0.0.0.0.0.0.1.x movlw b'00000010' ; Siirretään kursori kotia. Tähän voi joutua joissakin näytöissä laittaan 000000011, jotta kursori palaa kotiasemaan. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return MERKKIMUISTINOSOITIN ; Näyttömuistin osoitteen ominaisuudet. 1/D => *1=Lisäys/0=Vähennys, S => Näytön siirto 1=Päällä/*0=Pois ; 0.0.0.0.0.1.1/D.S movlw b'00000110' ; movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return SAMMUTANAYTTO ;Sammuta näyttö. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001000' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return NAYTTOPAALLE1 ;Kytketään moduli päälle ilman kursoria ja sen vilkkumista. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001100' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return NAYTTOPAALLE2 ;Kytketään moduli päälle kursorilla ja ilman sen vilkkumista. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001110' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return NAYTTOPAALLE3 ;Kytketään moduli päälle vilkkuvalla kursorilla. ; D = Moduli päälle(1) pois(0), U = Kursori käytössä(1) pois(0), B = Vilkutus käytössä(1) pois(0) ; 0.0.0.0.1.D.U.B movlw b'00001111' movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return RIVIMAARAJAMERKKIKOKO ;Asetetaan rivien määrä merkkimatriisin koko. ; 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. ; 0.0.1.1.2/1.10/7.x.x movlw b'00111000' ;2 rivinen näyttö 5x7 merkkimatriisi käyttöön. movwf OHJAUSKASKY call OHJAUSKOMENTO call VIIVE15MS return ;********************************************************************************************* ;Viive näytön käynnistymiseen 0,5s 4Mhz. PUOLISEK ;499994 cycles movlw 0x05 movwf TEMPPI PUOLISEK1 movlw 0x03 movwf d1 movlw 0x18 movwf d2 movlw 0x02 movwf d3 PUOLISEK_0 decfsz d1, f goto PUOLISEK_0 decfsz d2, f goto PUOLISEK_0 decfsz d3, f goto PUOLISEK_0 decfsz TEMPPI, f goto PUOLISEK1 ;Uusitaan viive. ;2 cycles ;goto $+1 ;4 cycles (including call) return ;************************************************* ;Viive tekstien näyttämiseen yms. KOLMESEKUNTTIA ;14999990 cycles movlw 0x87 movwf d1 movlw 0xB3 movwf d2 movlw 0x21 movwf d3 KOLMESEKUNTTIA_0 decfsz d1, f goto KOLMESEKUNTTIA_0 decfsz d2, f goto KOLMESEKUNTTIA_0 decfsz d3, f goto KOLMESEKUNTTIA_0 return ;****************************************************************************** ;****************************************************************************** ;Sarjaportin eli RS232-väylän alustus ja muut siihen liittyvät aliohjelmat. ;****************************************************************************** ;Sarjaliikenne väylän alustus C-portin pinneissä RC6 = TX, RC7 = RX . ;Nopeus 1200b/s 20Mhz kiteellä. SARJALIIKENNEALUSTUS banksel BAUDCON clrf BAUDCON banksel SPBRG movlw 0x1F ;Alusta siirtonopeuden määrittävä arvo SPBRG rekisteriin.Tämä arvo toimii 20Mhz kiteellä jolloin nopeus on 9600 . movwf SPBRG ; banksel TXSTA movlw b'00100000' ;CSRC, TX9, TXEN, SYNC, SENDB, BRGH, TRMT, TX9D movwf TXSTA ;Siirrä TXSTA rekisteriin. banksel RCSTA movlw b'10010000' ;SPEN RX9 SREN CREN ADDEN FERR OERR RX9D movwf RCSTA ;Siirrä RCSTA 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ä. banksel INTCON bsf INTCON,PEIE ;Sallitaan keskeytys. bsf INTCON,GIE ;Sallitaan kaikki keskeytykset. ;Nollataan kaikki virheet pois. movff RCREG,TAVU ;Tyhjätään RCREG mahdollisesta turhasta tiedosta. movff RCREG,TAVU banksel RCSTA bcf RCSTA, CREN bsf RCSTA, CREN call SARJALIIKENNERAMPOINT return ;****************************************************************************** ;Lahetysaliohjelma. LAHETYS232 ;Lasketaan HTTP-pyynnön Content lenght merkkien määrä. btfss TXSTA,TXEN ;Jos lähetysbitti on pois päältä niin lasketaan vain merkit. call LASKECONTENTLENGHT ;Lisätään Content lenght laskennassa laskuri +1, joka kerta kun tähän tullaan. btfss TXSTA,TXEN ;Jos lähetysbitti on pois päältä niin lasketaan vain merkit. return ;Jos tähän tullaan on kysymyksesä pelkästään HTTP-pyyntöön tulevan Content typen merkkien määrän laskenta. movf TAVU,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 ;****************************************************************************** ;********************************************************************************* ;GSM-modulin AT-ohjauskomennot ja niihin liittyvät aliohjelmat. ;********************************************************************************* ;AT-komento, joka tulee yleensä aina ensin. AT movlw A'A' movwf TAVU call LAHETYS232 movlw A'T' movwf TAVU call LAHETYS232 return ;********************************************************************************* ;Return napin painallus. ;Tämä tulee jakaisen annetun AT-komennon jälkeen. RETUR movlw 0x0d ;cr movwf TAVU call LAHETYS232 RIVINVAIHTO movlw 0x0A ;lf movwf TAVU call LAHETYS232 return ;******************************************************************************* ;Saapuvan soiton numeron näyttö päälle. ;AT+CLIP=1 NUMERONAYTTO call AT movlw A'+' movwf TAVU call LAHETYS232 movlw A'C' movwf TAVU call LAHETYS232 movlw A'L' movwf TAVU call LAHETYS232 movlw A'I' movwf TAVU call LAHETYS232 movlw A'P' movwf TAVU call LAHETYS232 movlw A'=' movwf TAVU call LAHETYS232 movlw A'1' movwf TAVU call LAHETYS232 call RETUR call OKKUITTAUS decfsz VIRHE, f return goto NUMERONAYTTO ;******************************************************************************* ;GSM-modulilta tuleva OK-kuittaus annetun AT-komennon jälkeen. OKKUITTAUS return ;***************************************************************************** ;Testiviestin lähettämiseen tarvittavat AT-komennot. ;Tämä alustus tehdään aina ensin kun tekstiviestiä lähetetään tai luetaan. CMGF1 call AT movlw A'+' movwf TAVU call LAHETYS232 movlw A'C' movwf TAVU call LAHETYS232 movlw A'M' movwf TAVU call LAHETYS232 movlw A'G' movwf TAVU call LAHETYS232 movlw A'F' movwf TAVU call LAHETYS232 movlw A'=' movwf TAVU call LAHETYS232 movlw A'1' movwf TAVU call LAHETYS232 call RETUR call PUOLISEK ;Odotellaan lopuksi OK-kuittausta ennen jatkoa. ;call OKKUITTAUS return ;---------------------------------------------------- CMGS? call AT movlw A'+' movwf TAVU call LAHETYS232 movlw A'C' movwf TAVU call LAHETYS232 movlw A'M' movwf TAVU call LAHETYS232 movlw A'G' movwf TAVU call LAHETYS232 movlw A'S' movwf TAVU call LAHETYS232 movlw A'=' movwf TAVU call LAHETYS232 movlw A'?' movwf TAVU call LAHETYS232 call RETUR call PUOLISEK ;Odotellaan lopuksi OK-kuittausta ennen jatkoa. ;call OKKUITTAUS return ;---------------------------------------------------- PUHNUMEROEEPROM movff EEPROMOSOITETALTEEN, EEPROMOSOITE ;Haetaan tekstiviestin numero EEPROM-muistista. PUHELINNUMEROPEEPROM call EEPROMLUE incf EEPROMOSOITE movlw A'O' ;Puhelinnumerot loppuu O-kirjaimeen EEPROM-muistissa ja alkaa N-kirjaimella. xorwf TAVU,W btfsc STATUS,Z return call LAHETYS232 goto PUHELINNUMEROPEEPROM PUHNUMEROSARJAVAYLASTA ;Haetaan soittava numero, jonne tekstiviesti lähtee. movlw 0x64 movwf VAARATMERKIT call SARJALIIKENNERAMPOINT ; EKALAINAUSMERKKI movff POSTINC0,TAVU ;Ladataan RS-232 väylästä tulleet merkit tarkasteluun. ;Tarkastetaan täsmääkö "-merkit. movlw A'"' xorwf TAVU,W btfsc STATUS,Z goto EKALAINAUSMERKKITASMASI decfsz VAARATMERKIT, f ;Tällä estetään ikuiseen silmukkaan jääminen jos toista "-merkkiä ei löydykään jostain syystä. goto EKALAINAUSMERKKI return EKALAINAUSMERKKITASMASI movlw 0x30 movwf VAARATMERKIT TOKALAINAUSMERKKI movff POSTINC0,TAVU ;Ladataan RS-232 väylästä tulleet merkit tarkasteluun. ;Tarkastetaan täsmääkö "-merkit. movlw A'"' xorwf TAVU,W btfsc STATUS,Z return ;Myös viimeinen eli toinen "-merkki löytyi ja numero on annettu RS-232 väylään, eli voidaan poistua tästä aliohjelmasta. call LAHETYS232 ;Nyt tulee todennäköisesti puhelinnumero, joten lähetetään se RS-232 väylään. decfsz VAARATMERKIT, f ;Tällä estetään ikuiseen silmukkaan jääminen jos toista "-merkkiä ei löydykään jostain syystä. goto TOKALAINAUSMERKKI return ;Tokaa lainausmerkkiä ei löytynyt joten pois tästä aliohjelmasta. ;---------------------------------------------------- CMGSNUMERO call AT movlw A'+' movwf TAVU call LAHETYS232 movlw A'C' movwf TAVU call LAHETYS232 movlw A'M' movwf TAVU call LAHETYS232 movlw A'G' movwf TAVU call LAHETYS232 movlw A'S' movwf TAVU call LAHETYS232 movlw A'=' movwf TAVU call LAHETYS232 movlw A'"' movwf TAVU call LAHETYS232 call PUHNUMEROEEPROM ;Annetaan numero jonne viesti lähetetään. movlw A'"' movwf TAVU call LAHETYS232 call RETUR call PUOLISEK ;Odotellaan lopuksi >-kuittausta ennen jatkoa, jonka jälkeen kirjoitetaan itse viesti. HAKAMERKINODOTUS call SARJALIIKENNERAMPOINT ;Alustetaan pointteri. movlw 0xC movwf d1 HAKAMERKINODOTUSLOOP2 decfsz d1, f goto HAKAMERKINODOTUSLOOP1 return HAKAMERKINODOTUSLOOP1 movff POSTINC0,TAVU ; Ladataan data puskurista TAVU-rekisteriin. movlw A'>' xorwf TAVU,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto HAKAMERKINODOTUSLOOP2 movlw A'E' ; movwf MERKKEJATULLUT return ;---------------------------------------------------- ;Itse tekstiviesti osuus tekstiviestissä. ;Ennen tähän aliohjelmaan tulo on pitänyt hakea sen taulun osoite, joka lähetetään ;Pointteri siirto. TAULUPOINTTERI movlw 0xC movwf d1 TEKSTIPOINTTERIKOHDALLE TBLRD*+ decfsz d1, f goto TEKSTIPOINTTERIKOHDALLE return KIRJOITAVIESTITAULUSTA TBLRD*+ ; Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. movff TABLAT, TAVU movlw A'<' xorwf TABLAT,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return call LAHETYS232 goto KIRJOITAVIESTITAULUSTA ;*********************************************************** KIRJOITAVIESTIRAM call TEKSTIVIESTIRAMPOINT TEKSTIVIESTINSEURAAVAMERKKI movff POSTINC1,TAVU ; Ladataan data puskurista TAVU-rekisteriin. movlw A'#' xorwf TAVU,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return call LAHETYS232 goto TEKSTIVIESTINSEURAAVAMERKKI ;************************************************** TEKSTIVIESTI call PUOLISEK ;Ennen viestiä pakko olla pieni viive, muuten ei toimi. call PUOLISEK ;Ennen viestiä pakko olla pieni viive, muuten ei toimi. call PUOLISEK ;Ennen viestiä pakko olla pieni viive, muuten ei toimi. ;Tähän kirjoitetaan itse tekstiviesti. ; movlw A' ' ; movwf TAVU ; call LAHETYS232 call KIRJOITAVIESTIRAM ;Lopuksi CTRL+Z call PUOLISEK movlw 0x1A ;CTRL+Z ascii-koodina movwf TAVU call LAHETYS232 call PUOLISEK ;Odotellaan loppukuittauksia. +CMGS: 0 ja OK:ta ;Odotellaan lopuksi OK-kuittausta ennen jatkoa. ;call OKKUITTAUS return ;---------------------------------------------------- TEKSTIVIESTILAHETYS ;Tekstiviestin lähetys. ;AT ;OK ;AT+CMGF=1 ;OK ;AT+CMGS=? ;OK ;AT+CMGS="0501234567" ;> Testiviesti kokeilu (Lopuksi Ctrl+Z) ;+CMGS: 0 ;OK ;LCD-näyttöön tekstiviestiä lähetetään viesti hetkeksi. call TEKSTIVIESTILAHTEETAULU call LCDPUSKURIIN call NAYTTO_PAIVITYS call KOLMESEKUNTTIA ;Tämä toimii samalla pienenä viiveenä ennen tekstiviestin lähetystä. ;Jotta tekstiviestin lähetys toimisi. ;Tekstiviestin lähetykseen tarvittava AT-komennot. call CMGF1 call CMGS? call CMGSNUMERO call TEKSTIVIESTI ;LCD-näyttöön tekstiviesti lähetetty viesti hetkeksi. call TEKSTIVIESTILAHETETTYTAULU call LCDPUSKURIIN call NAYTTO_PAIVITYS call KOLMESEKUNTTIA call KOLMESEKUNTTIA return ;------------------------------------------------------------------------------ ;Tekstiviestin lukeminen. ;AT+CMGR=1 LUETEKSTIVIESTI CMGR1 call AT movlw A'+' movwf TAVU call LAHETYS232 movlw A'C' movwf TAVU call LAHETYS232 movlw A'M' movwf TAVU call LAHETYS232 movlw A'G' movwf TAVU call LAHETYS232 movlw A'R' movwf TAVU call LAHETYS232 movlw A'=' movwf TAVU call LAHETYS232 movlw A'1' ;Tämä numero kertoo minkä muistipaikan tekstiviesti luetaan. Eli numeroa voi vaihtaa 1-> vaikka 99 asti tai niin pitkäle kuin muistipaikkoja piisaa. movwf TAVU call LAHETYS232 call RETUR return ;------------------------------------------------------------------------------ ;Tekstiviestien tuhoaminen 1 kerrallaan ;AT+CMGF=1 ;OK ;AT+CMGD=3 ;OK TUHOATEKSTIVIESTI call CMGF1 call KOLMESEKUNTTIA call KOLMESEKUNTTIA movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TUHOATEKSTIVIESTI CMGD call AT movlw A'+' movwf TAVU call LAHETYS232 movlw A'C' movwf TAVU call LAHETYS232 movlw A'M' movwf TAVU call LAHETYS232 movlw A'G' movwf TAVU call LAHETYS232 movlw A'D' movwf TAVU call LAHETYS232 movlw A'=' movwf TAVU call LAHETYS232 movlw A'1' ;Tämä numero kertoo minkä muistipaikan tekstiviesti luetaan. Eli numeroa voi vaihtaa 1-> vaikka 99 asti tai niin pitkäle kuin muistipaikkoja piisaa. movwf TAVU call LAHETYS232 call RETUR ;Odotellaan lopuksi OK-kuittausta ennen jatkoa. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA movlw A'K' ; xorwf OKVIESTI,W btfsc STATUS,Z ; Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return call ERRORTAULU call VERTAILE movlw A'K' ; Jollei OK-kuittausta tule, niin tekstiviesti paikka on jo tyhjä ja viesti onkin ERROR. xorwf VERTAILUTASMASI,W btfss STATUS,Z ; Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TUHOATEKSTIVIESTI return ;------------------------------------------------------------------------------ ;ATA-komento, joka vastaa puheluun. ATA call AT movlw A'A' movwf TAVU call LAHETYS232 call RETUR return ;------------------------------------------------------------------------------ ;ATH-komento, joka katkaisee yhteyden. ATH call AT movlw A'H' movwf TAVU call LAHETYS232 call RETUR return ;------------------------------------------------------------------------------ ;****************************************************************************** ;Osoittimet RAM-muistiin. ;****************************************************************************** LINKKIRAMPOINT movlw 0x01 ; Asetetaan puskurin osoite. movwf LINKKIRAMPUSKURIH movlw 0x00 movwf LINKKIRAMPUSKURIL movff LINKKIRAMPUSKURIH,FSR1H movff LINKKIRAMPUSKURIL,FSR1L return ;****************************************************************************** TYORAMPOINT movlw 0x02 ; Asetetaan puskurin osoite. movwf TYORAMPUSKURIH movlw 0x00 movwf TYORAMPUSKURIL movff TYORAMPUSKURIH,FSR0H movff TYORAMPUSKURIL,FSR0L return ;****************************************************************************** SARJALIIKENNERAMPOINT movlw 0x03 ; Asetetaan puskurin osoite. movwf SARJALIIKENNERAMPUSKURIH movlw 0x00 movwf SARJALIIKENNERAMPUSKURIL movff SARJALIIKENNERAMPUSKURIH,FSR0H movff SARJALIIKENNERAMPUSKURIL,FSR0L return ;****************************************************************************** LCDRAMPOINT movlw 0x05 ; Asetetaan puskurin osoite. movwf LCDRAMPUSKURIH movlw 0x00 movwf LCDRAMPUSKURIL movff LCDRAMPUSKURIH,FSR1H movff LCDRAMPUSKURIL,FSR1L return ;****************************************************************************** GPSRAMPOINT movlw 0x06 ; Asetetaan puskurin osoite. movwf GPSRAMPUSKURIH movlw 0x00 movwf GPSRAMPUSKURIL movff GPSRAMPUSKURIH,FSR1H movff GPSRAMPUSKURIL,FSR1L return ;****************************************************************************** TEKSTIVIESTIRAMPOINT GPSPHPLLERAMPOINT ;Tähän tehdään PHP:lle sopiva GPS-koordinaatti, joka on helppo purkaa osiin. movlw 0x07 ; Asetetaan puskurin osoite. movwf TEKSTIVIESTIRAMPUSKURIH movlw 0x00 movwf TEKSTIVIESTIRAMPUSKURIL movff TEKSTIVIESTIRAMPUSKURIH,FSR1H movff TEKSTIVIESTIRAMPUSKURIL,FSR1L return ;****************************************************************************** ;Informaatiotekstien tulostus aliohjelmat. ;****************************************************************************** ;Luetaan taulu RAM-muistiin josta sitten lopuksi LCD-näytölle. ;Sitä ennen on pitänyt käydä lukemassa LCD-näyttöön halutun taulun osoite "call tauluosoite". ;Sieltä missä taulu sijaitsee. ;Lopuksi luetaan taulu RAM-muistiin. LCDPUSKURIIN call LCDRAMPOINT ;Haetaan RAM-muistin pointteri. movlw 0xC movwf d1 POINTTERIKOHDALLEEN TBLRD*+ decfsz d1, f goto POINTTERIKOHDALLEEN LUETAVU1 TBLRD*+ ; Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. ;movff TABLAT, TAVU movlw A'#' xorwf TABLAT,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto KENOVIIVAKINPUSKURIIN movff TABLAT,POSTINC1; Varastoidaan data puskuriin. goto LUETAVU1 KENOVIIVAKINPUSKURIIN movff TABLAT,POSTINC1; Varastoidaan data puskuriin. return ;****************************************************************************** ;Luetaan taulu RAM-muistiin josta sitten lopuksi LCD-näytölle. ;Sitä ennen on pitänyt käydä lukemassa LCD-näyttöön halutun taulun osoite "call tauluosoite". ;Sieltä missä taulu sijaitsee. ;Lopuksi luetaan taulu RAM-muistiin. TYOPUSKURIIN call TYORAMPOINT ;Haetaan RAM-muistin pointteri. movlw 0xC movwf d1 TYOPOINTTERIKOHDALLEEN TBLRD*+ decfsz d1, f goto TYOPOINTTERIKOHDALLEEN TYOLUETAVU1 TBLRD*+ ; Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. ;movff TABLAT, TAVU movlw A'#' xorwf TABLAT,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TYOKENOVIIVAKINPUSKURIIN movff TABLAT,POSTINC0; Varastoidaan data puskuriin. goto TYOLUETAVU1 TYOKENOVIIVAKINPUSKURIIN movff TABLAT,POSTINC0; Varastoidaan data puskuriin. return ;****************************************************************************** ;Luetaan taulu RAM-muistiin josta sitten lopuksi LCD-näytölle. ;Sitä ennen on pitänyt käydä lukemassa LCD-näyttöön halutun taulun osoite "call tauluosoite". ;Sieltä missä taulu sijaitsee. ;Lopuksi luetaan taulu RAM-muistiin. GPSPUSKURIIN call GPSRAMPOINT ;Haetaan RAM-muistin pointteri. movlw 0xC movwf d1 GPSPOINTTERIKOHDALLEEN TBLRD*+ decfsz d1, f goto GPSPOINTTERIKOHDALLEEN GPSLUETAVU1 TBLRD*+ ; Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. ;movff TABLAT, TAVU movlw A'#' xorwf TABLAT,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPSKENOVIIVAKINPUSKURIIN movff TABLAT,POSTINC1; Varastoidaan data puskuriin. goto GPSLUETAVU1 GPSKENOVIIVAKINPUSKURIIN movff TABLAT,POSTINC1; Varastoidaan data puskuriin. return ;****************************************************************************** ;Luetaan taulu RAM-muistiin josta sitten lopuksi tekstiviestiin. ;Sitä ennen on pitänyt käydä lukemassa LCD-näyttöön halutun taulun osoite "call tauluosoite". ;Sieltä missä taulu sijaitsee. ;Lopuksi luetaan taulu RAM-muistiin. LINKKIPUSKURIIN call LINKKIRAMPOINT ;Haetaan RAM-muistin pointteri. movlw 0xC movwf d1 LINKKIPOINTTERIKOHDALLEEN TBLRD*+ decfsz d1, f goto LINKKIPOINTTERIKOHDALLEEN LINKKILUETAVU1 TBLRD*+ ; Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. ;movff TABLAT, TAVU movlw A'#' xorwf TABLAT,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return movff TABLAT,POSTINC1; Varastoidaan data puskuriin. goto LINKKILUETAVU1 return ;****************************************************************************** ;****************************************************************************** ;RS-232-väylän merkkien tarkastelu. ;****************************************************************************** ;Vertaillaan taulua ja RS-232 väylästä tullutta dataa. ;Vertailu käy läpi koko RS232-väylän puskurin etsien sieltä taulussa olevaa merkkisarjaa. VERTAILE ;Asetaan pointterit. call SARJALIIKENNERAMPOINT ; ;Sitten säädetään aikaisemmin annetun taulun pointteri kohdalleen. movlw 0xC movwf d1 POINTTERIKOHDALLEEN1 TBLRD*+ decfsz d1, f goto POINTTERIKOHDALLEEN1 ;Taulun osoite osoite talteen. movf TBLPTRU, W movwf OHJELMAPOINTTERIU movf TBLPTRH, W movwf OHJELMAPOINTTERIH movf TBLPTRL, W movwf OHJELMAPOINTTERIL ;Asetaan VAARATMERKIT rekisterit, joiden avulla kelataan yli väärät merkit. movlw 0xFF movwf VAARATMERKIT movlw 0x3 movwf VAARATMERKIT1 ;Otetaan pointteri talteen jos oikeat merkit tuleekin heti, niin pointteria ei enää oteta talteen myöhemmin. movff FSR0H, SARJALIIKENNERAMPUSKURIH movff FSR0L, SARJALIIKENNERAMPUSKURIL TBLRD*+ ;Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. movff TABLAT, TAVU ;Ladataan taulun eka merkki tarkasteluun. goto MERKKIEITASMAA ;Ja kohtaan MERKKIEITASMAA ensin. ;Voidaan aloittaa tarkastus. MERKKITASMAA TBLRD*+ ;Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. movff TABLAT, TAVU ;Ladataan taulun eka merkki tarkasteluun. MERKKIEITASMAA movf POSTINC0,W ;Ladataan RS-232 väylästä tullut eka merkki tarkasteluun. ;Tarkastetaan täsmääkö merkit. xorwf TAVU,W btfsc STATUS,Z goto MERKKITASMAA ;Jos merkki täsmäsi niin oletetaan että loputkin täsmää. movlw A'#' xorwf TAVU,W btfsc STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto KENOMERKKITASMAA ;Jos /-merkki ei täsmännyt niin jatketaan tarkastusta. ;Otetaan se kohta talteen mistä löytyi viimeisin ei täsmäävä merkki, koska sen jälkeen voi alkaa oikeat merkit, eikä tähän kohtaan enää tulla. ;Tätä kohtaa tarvitaan joissakin aliohjelmissa. movff FSR0H, SARJALIIKENNERAMPUSKURIH movff FSR0L, SARJALIIKENNERAMPUSKURIL ;Aina kun tulee väärä merkki palautetaan TAULU:n osoite takaisin alkuun. ;Jonka jälkeen aletaan taas etsimään oikeaa merkkisarjaa. movf OHJELMAPOINTTERIU, W movwf TBLPTRU movf OHJELMAPOINTTERIH, W movwf TBLPTRH movf OHJELMAPOINTTERIL, W movwf TBLPTRL TBLRD*+ ;Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. movff TABLAT, TAVU ;Ladataan taulun eka merkki tarkasteluun. decfsz VAARATMERKIT, f goto MERKKIEITASMAA decfsz VAARATMERKIT1, f goto MERKKIEITASMAA movlw A'E' movwf VERTAILUTASMASI return KENOMERKKITASMAA movlw A'K' movwf VERTAILUTASMASI return ;****************************************************************************** EEPROMLUE MOVFF EEPROMOSOITE, EEADR BCF EECON1, EEPGD ; Point to DATA memory BCF EECON1, CFGS ; Access EEPROM BSF EECON1, RD ; EEPROM Read ODOTALUEEEPROM BTFSC EECON1, WR goto ODOTALUEEEPROM MOVFF EEDATA, TAVU ; EEDATA TAVU rekisteriin. return ;------------------------------------------------------------------------------- EEPROMKIRJOITA MOVFF EEPROMOSOITE, EEADR ; Lower bits of Data Memory Address to write MOVFF TAVU, EEDATA ; TAVU rekisteri EEDATA rekisteriin. BCF EECON1, EEPGD ; Point to DATA memory BCF EECON1, CFGS ; Access EEPROM BSF EECON1, WREN ; Enable writes BCF INTCON, GIE ; Disable Interrupts MOVLW 55h ; MOVWF EECON2 ; Write 55h MOVLW 0AAh ; MOVWF EECON2 ; Write 0AAh BSF EECON1, WR ; Set WR bit to begin write ODOTAKIRJOITAEEPROM BTFSC EECON1, WR goto ODOTAKIRJOITAEEPROM BSF INTCON, GIE ; Enable Interrupts ; User code execution BCF EECON1, WREN ; Disable writes on write complete (EEIF set) return ;****************************************************************************** ;Lasketaan contentypelle merkkienmäärä. ALUSTALASKECONTENTLENGTH movlw A'0' ;Ladataan w rekisteriin luku 0. movwf YKKOSET ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf KYMMENET ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf SADAT ;Ladataan w rekisterin arvo rekisteriin. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf TUHANNET ;Ladataan w rekisterin arvo rekisteriin. return LASKECONTENTLENGHT incf YKKOSET movlw A':' xorwf YKKOSET,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLI ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf YKKOSET ;Ladataan w rekisterin arvo rekisteriin. incf KYMMENET movlw A':' xorwf KYMMENET,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLI ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf KYMMENET ;Ladataan w rekisterin arvo rekisteriin. incf SADAT movlw A':' xorwf SADAT,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLI ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf SADAT ;Ladataan w rekisterin arvo rekisteriin. incf TUHANNET movlw A':' xorwf TUHANNET,W ; btfss STATUS,Z ;Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIYLI ;Ei yli 9. movlw A'0' ;Ladataan w rekisteriin luku 0. movwf TUHANNET ;Ladataan w rekisterin arvo rekisteriin. EIYLI return ;Paluu tästä aliohjelmasta. ;****************************************************************************** ;Kirjoitetaan GPS-linkki ja koordinaatit HTTP-pyyntöön. ;id=!&data=!&nopeus=!&suunta=! Luetaan DATAPOSTTAULU: aina seuraavaan !=merkkiin asti. Ja sen jälkeen laitetaan !-merkin jälkeen haluttu data ja taas luetaan seuraavan !-merkkiin jne... HTTPPOSTDATATIEDOT call DATAPOSTTAULU ; Tässä taulussa sijaitsee kaikki muuttujat, kuten id ja data. call GPRSPOINTTERIKOHDALLEEN ;Luetaan ensinmäiseen !-merkkiin asti. goto JATKAPOSTLOMAKETTA1 ;Luetaan ID-tunniste. JATKAPOSTLOMAKETTA1 call LUETUNNUSEEPROMISTA ;Tunniste löytyy EEPROM-muistista, jonne se on tullut tekstiviestissä. call GPRSLUETAVU1 ; Luetaan DATAPOSTTAULU:a seuraavaan !-merkkiin. goto POSTLOMAKE1VALMIS POSTLOMAKE1VALMIS ;Seuvaaksi GPS-data Google mapsin linkin muodossa. call LINKKIRAMPOINT ;Haetaan GPS-linkin RAM-muistin pointteri. goto JATKAPOSTLOMAKETTA2 GPSDATA call LAHETYS232 JATKAPOSTLOMAKETTA2 movff POSTINC1,TAVU movlw A'#' ; Linkki päättyy #-merkkiin. xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPSDATA call GPRSLUETAVU1 ; Luetaan DATAPOSTTAULU:a seuraavaan !-merkkiin. goto POSTLOMAKE2VALMIS POSTLOMAKE2VALMIS ;Seuraavaksi luetaan nopeus. movff KMSADAT,TAVU call LAHETYS232 movff KMKYMMENET,TAVU call LAHETYS232 movff KMYKKOSET,TAVU call LAHETYS232 movff KMPILKKU,TAVU call LAHETYS232 movff KMDESIMAALIT,TAVU call LAHETYS232 call GPRSLUETAVU1 ; Luetaan DATAPOSTTAULU:a seuraavaan !-merkkiin. goto POSTLOMAKE3VALMIS POSTLOMAKE3VALMIS ;Seuraavaksi luetaan suuntatieto, joka on todellinen ei magneettinen. movff SUUNTASADAT,TAVU call LAHETYS232 movff SUUNTAKYMMENET,TAVU call LAHETYS232 movff SUUNTAYKKOSET,TAVU call LAHETYS232 movff KMPILKKU,TAVU call LAHETYS232 movff SUUNTADESIMAALIT,TAVU call LAHETYS232 call GPRSLUETAVU1 goto POSTLOMAKE4VALMIS POSTLOMAKE4VALMIS ;Lähetetään PHP:lle helposti muokattava GPS-koordinaatti. ;Jos voi tehdä helposti erilaisia laskelmia PHP:lla. call GPSPHPLLERAMPOINT goto JATKAPOSTLOMAKETTA4 GPSPHPDATA call LAHETYS232 JATKAPOSTLOMAKETTA4 movff POSTINC1,TAVU movlw A'#' ; Linkki päättyy #-merkkiin. xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPSPHPDATA return ;Jos tuli lisää dataa jatkettaisi näin => ;call GPRSLUETAVU1 ; Luetaan DATAPOSTTAULU:a seuraavaan !-merkkiin. ;Ja sen jälkeen sitten goto POSTLOMAKE5VALMIS jne... ;Kaikki data on tällä erää laitettu POST-lomakkeeseen, joka lähtee WEB-palvelimelle internettiin. ;Joten voidaan palata takaisin tästä aliohjelmasta. ;****************************************************************************** ;Alustetaan GPRS-yhteys päälle. GPRSPOINTTERIKOHDALLEEN movlw 0xC movwf d1 GPRSPOINTTERIKOHDALLEEN1 TBLRD*+ decfsz d1, f goto GPRSPOINTTERIKOHDALLEEN1 GPRSLUETAVU1 TBLRD*+ ; Luetaan TABLAT-rekisteri ja lisätään osoitinta sen jälkeen. movlw A'!' xorwf TABLAT,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return movlw A'´' xorwf TABLAT,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPRSLAINAUSMERKKI movlw A'"' movwf TAVU goto GPRSLAINAUSMERKKI1 GPRSLAINAUSMERKKI movff TABLAT,TAVU; Varastoidaan data bufferiin. call LAHETYS232 goto GPRSLUETAVU1 GPRSLAINAUSMERKKI1 movf TABLAT,W; Ohitetaan ´-merkki koska sen tilalle tuli laitettiin "-merkki. call LAHETYS232 goto GPRSLUETAVU1 return ;************************************************************************************** LUEHOSTIEEPROMISTA movlw 0x00 ;Hostin osoite EEPROM-muistissa. movwf EEPROMOSOITE goto LUETAANEEPROMIA LUEPOLKUEEPROMISTA movlw 0x64 ;Polun osoite EEPROM-muistissa. movwf EEPROMOSOITE goto LUETAANEEPROMIA LUETUNNUSEEPROMISTA movlw 0xC8 ;Tunnuksen osoite EEPROM-muistissa. movwf EEPROMOSOITE goto LUETAANEEPROMIA LUETAANEEPROMIA movlw 0xFF movwf d1 LUETAANEEPROMIA2 ;Estetään ikuiseen looppiin joutuminen, jos !-merkkiä ei tulekaan vastaan EEPROM-muistissa. ;Johon on yleensä syynä se, että ei ole lähetetty asetuksia tekstiviestinä. decfsz d1, f goto LUETAANEEPROMIA1 return LUETAANEEPROMIA1 call EEPROMLUE incf EEPROMOSOITE movlw A'!' xorwf TAVU,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. return call LAHETYS232 goto LUETAANEEPROMIA2 ;************************************************************************************** ;AT+CGDCONT=1,"IP","INTERNET" <=Tämä AT-komento löytyy taulusta GPRS1TAULU . ;AT%CGPCO=1,"PAP,,",1 <=Tämä AT-komento löytyy taulusta GPRS2TAULU . ;AT$NOSLEEP=1 <=Tämä AT-komento löytyy taulusta GPRS3TAULU . ;AT$DESTINFO="koti.mbnet.fi",1,80, 1 <=Tämä AT-komento löytyy taulusta GPRS4TAULU . ;ATD*97# <=Tämä AT-komento löytyy taulusta ATD97TAULU . ;GPRS-yhteyden alustus päälle tehdään tästä. GPRSALUSTUS movlw 0x5 ;Estetään ikuiseen looppiin joutuminen virhetilanteissa. movwf OKLOOPESTO ;Tulostetaan näyttöön teksti. call GPRSALUSTUSTAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA GPRSALUSTUS1 decfsz OKLOOPESTO, f ;Tehdään tästä ikuisen loopin estävä toiminto vikatilanteessa. goto JATKETAANGPRSALUSTUSTA ;Tulostetaan näyttöön teksti. ;Mahdollinen vikatilanne syntynyt. call VIKATAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA movlw 'K' ;Estetään ikuiseen looppiin joutuminen virhetilanteissa. movwf VIKA ;Laitetaan VIKA rekisteriin K-kirjain kertomaan viasta. ;Keskeytetään mahdollinen GPRS-yhteys. call GPRSTAUKO call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA ;Ja lopuksi katkaistaan mahdollinen toimimaton GPRS-yhteys poikki. call ATH call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA return JATKETAANGPRSALUSTUSTA ;Ensinmäinen GPRS-yhteyden alustuskäsky GSM-modulille. call GPRS1TAULU call GPRSPOINTTERIKOHDALLEEN call RETUR ;Tarkastetaan onko OK-viestiä tullut? call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA call GPRSALUSTUS1TAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPRSALUSTUS1 ; Jos ei ole tullut, niin kaikki alusta, koska jotain on mennyt pieleen. Eli ehkä tieto ei ole välittynyt oikein tms. movlw A'E' movwf OKVIESTI ;Toinen GPRS-yhteyden alustuskäsky GSM-modulille. call GPRS2TAULU call GPRSPOINTTERIKOHDALLEEN call RETUR ;Tarkastetaan onko OK-viestiä tullut? call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA call GPRSALUSTUS2TAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPRSALUSTUS1 ; Jos ei ole tullut, niin kaikki alusta, koska jotain on mennyt pieleen. Eli ehkä tieto ei ole välittynyt oikein tms. movlw A'E' movwf OKVIESTI ;Kolmas GPRS-yhteyden alustuskäsky GSM-modulille. call GPRS3TAULU call GPRSPOINTTERIKOHDALLEEN call RETUR ;Tarkastetaan onko OK-viestiä tullut. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA call GPRSALUSTUS3TAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPRSALUSTUS1 ; Jos ei ole tullut, niin kaikki alusta, koska jotain on mennyt pieleen. Eli ehkä tieto ei ole välittynyt oikein tms. movlw A'E' movwf OKVIESTI ;Neljäs GPRS-yhteyden alustuskäsky GSM-modulille. call GPRS4TAULU call GPRSPOINTTERIKOHDALLEEN ;Laitetaan Hosti seuraavaksi EEPROM-muistista. call LUEHOSTIEEPROMISTA ;Ja sitten loputmerkit HOST-taulusta vielä. call GPRSLUETAVU1 call RETUR ;Tarkastetaan onko OK-viestiä tullut. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA call GPRSALUSTUSTAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPRSALUSTUS1 ; Jos ei ole tullut, niin kaikki alusta, koska jotain on mennyt pieleen. Eli ehkä tieto ei ole välittynyt oikein tms. movlw A'E' movwf OKVIESTI ;Tulostetaan näyttöön teksti. call GPRSALUSTUSVALMISTAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA return SOITAGPRS ;Kun halutaan vain soittaa uudelleen GPRS-yhteyteen. Kun se on katkennut automaattisesti tai katkaistu itse. movlw 0x6 ;Estetään ikuiseen looppiin joutuminen virhetilanteissa. movwf OKLOOPESTO SOITAGPRS1 movlw 0xA ;Estetään ikuiseen looppiin joutuminen virhetilanteissa. movwf d1 ;OK-kuittausta odotellessa. ;Tulostetaan näyttöön teksti. call SOITTAAGPRSTAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call ATD97TAULU call GPRSPOINTTERIKOHDALLEEN call RETUR decfsz OKLOOPESTO, f ;Tehdään tästä ikuisen loopin estävä toiminto vikatilanteessa. goto SOITAGPRS2 ;Soita uudestaan. ;Mahdollinen vikatilanne syntynyt. ;Tulostetaan näyttöön teksti. call VIKATAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA movlw 'K' ;Estetään ikuiseen looppiin joutuminen virhetilanteissa. movwf VIKA ;Laitetaan VIKA rekisteriin K-kirjain kertomaan viasta. ;Keskeytetään mahdollinen GPRS-yhteys. call GPRSTAUKO call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA ;Ja lopuksi katkaistaan mahdollinen toimimaton GPRS-yhteys poikki call ATH call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA return SOITAGPRS2 ;Odotellaan OK-kuittausta tietty aika. decfsz d1, f goto SOITAGPRS3 goto SOITAGPRS1 ;Soitetaan uudelleen. SOITAGPRS3 call KOLMESEKUNTTIA movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. call SOITAGPRS2 movlw A'E' movwf OKVIESTI return ;Jos tähän tultiin, niin GPRS-yhteys on alustettu ja valmis lähettämään esimerkiksi HTTP-pyyntöjä palvelimelle. ;*********************** GPRSTAUKO ;GPRS-yhteyden saa tauolle kolmella +-merkillä sarjaliikenneväylään. ;Kun GPRS-yhteys on tauolla, voidaan sarjaliikenneväylään kirjoittaa AT-komentoja. movlw A'+' movwf TAVU call LAHETYS232 ;Lähetetään sarjaliikenne väylään kolme +_merkkiä yhtäsoittoa. call LAHETYS232 call LAHETYS232 return GRPRTAUKOOHI call AT movlw A'O' movwf TAVU call LAHETYS232 ;Lähetetään sarjaliikenne väylään kolme +_merkkiä yhtäsoittoa. ;Tarkastetaan onko OK-viestiä tullut. call KOLMESEKUNTTIA movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto GPRSALUSTUS ; Jos ei ole tullut, niin kaikki alusta, koska jotain on mennyt pieleen. Eli ehkä tieto ei ole välittynyt oikein tms. return ; Tauko on päätetty onnistuneesti ja datan lähetys GPRS-linjaan voidaan jatkaa. ;************************** KIRJOITAHTTP ; HTTP-pyynnön lähetys, jossa kirjoitetaan GPRS-linjaan haluttu data, ; jonka ottaa vastaan vaikka joku PHP-sivun POST-käsittelijä. ;POST http://koti.mbnet.fi/catapult/projekti/pyynto/index.php HTTP/1.1 ;Host: http://koti.mbnet.fi ;Referer:http://koti.mbnet.fi/catapult/projekti/pyynto/index.php ;Content-Type:application/x-www-form-urlencoded ;Content-Length: 42 ;*****HUOM TAHAN TEKSTIN KOHTAAN PITAA JATTAA VALILYONTI MUUTEN EI TOIMI, ELI TAMA TEKSTI POIS ASTERISKEINEEN.********** ;id=18F2550&data=Mikro-ohjain testi! ;Eli lähetetään POST-toiminnolla id eli laitteen tunnus jokan on nyt 18F2550 ja itse laitten antama data. KIRJOITAHTTP1 ;Tulostetaan näyttöön teksti. call GPRSHTTPPYYNTOTAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. ;HTTP-pyynnön tulostus. call POSTTAULU call GPRSPOINTTERIKOHDALLEEN call LUEPOLKUEEPROMISTA ;Ja sitten loputmerkit POST-taulusta vielä. call GPRSLUETAVU1 call RETUR call HOSTTAULU call GPRSPOINTTERIKOHDALLEEN call LUEHOSTIEEPROMISTA call RETUR call REFERERTAULU call GPRSPOINTTERIKOHDALLEEN call LUEPOLKUEEPROMISTA call RETUR call CONTENTTYPETAULU call GPRSPOINTTERIKOHDALLEEN call RETUR ;Seuraavaksi Conten lenght eli lähetettävien merkkien määrä POST-lomakkeessa. ;Lasketaan ensin CONTENLENGT:lle merkkien määrä, ennen sen väylään lähettämistä. ;Jos tätä ei laskettaisi, niin esimerkiksi POST-lomakkeessaa lähetetyt tiedot ei näy välttämättä oikein WEB-palvelimella eikä myös sivulla. bcf TXSTA,TXEN ;Jos lähetysbitti on pois päältä niin lasketaan vain merkit. call ALUSTALASKECONTENTLENGTH ;Alustetaan laskuriin 0000 arvo. ;Seuraavaksi aliohjelmat, jotka tuottaa laskettavatmerkit ja joista ne nyt lasketaan. call HTTPPOSTDATATIEDOT bsf TXSTA,TXEN ;Jos lähetysbitti takaisin päälle, koska laskenta on suoritettu. ;Laskennan jälkeen sitten Content lenght väylään. call CONTENTLENGTHTAULU call GPRSPOINTTERIKOHDALLEEN ;Content lenghille äsken laskettu lukema väylään. movlw A'0' xorwf TUHANNET,W btfss STATUS,Z goto TUHATMUKAAN movlw A'0' xorwf SADAT,W btfss STATUS,Z goto SADATMUKAAN movlw A'0' xorwf KYMMENET,W btfss STATUS,Z goto KYMMENETMUKAAN movlw A'0' xorwf YKKOSET,W btfss STATUS,Z goto YKKOSETMUKAAN TUHATMUKAAN movff TUHANNET,TAVU call LAHETYS232 SADATMUKAAN movff SADAT,TAVU call LAHETYS232 KYMMENETMUKAAN movff KYMMENET,TAVU call LAHETYS232 YKKOSETMUKAAN movff YKKOSET,TAVU call LAHETYS232 call RETUR call RIVINVAIHTO ; Ja rivinvaihdon jälkeen vasta itse data. HUOM! Jos tätä ei ole, niin homma ei toimi. ;Tähän kohtaan kaikki se data mitä anturilta tms on tullut. call HTTPPOSTDATATIEDOT ;Käydään kirjoittamassa kaikki POST-data tiedot. call RETUR HTTPDATAKUITTAUSODOTUTUS ;Tarkastetaan onko OK-viestiä tullut. call KOLMESEKUNTTIA movlw 0x20 ;Estetään ikuiseen looppiin joutuminen virhetilanteissa. movwf OKLOOPESTO HTTPDATAKUITTAUSODOTUTUS1 ;Tarkastetaan onko OK-viestiä tullut. decfsz OKLOOPESTO, f ;Tehdään tästä ikuisen loopin estävä toiminto vikatilanteessa. goto HTTPDATAKUITTAUSODOTUTUS2 ;Kokeillaan vielä jos HTTP-pyynnön lähetys onnistuisi. ;Mahdollinen vikatilanne syntynyt. ;Tulostetaan näyttöön teksti. call VIKATAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. movlw 'K' ;Estetään ikuiseen looppiin joutuminen virhetilanteissa. movwf VIKA ;Laitetaan VIKA rekisteriin K-kirjain kertomaan viasta. ;Keskeytetään mahdollinen GPRS-yhteys. call GPRSTAUKO call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA ;Ja lopuksi katkaistaan mahdollinen toimimaton GPRS-yhteyspoikki call ATH call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA return HTTPDATAKUITTAUSODOTUTUS2 call KOLMESEKUNTTIA movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto HTTPDATAKUITTAUSODOTUTUS1 movlw A'E' movwf OKVIESTI ;Tulostetaan näyttöön teksti. call GPRSHTTPPYYNTOTEHTYTAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA return ;HTTP-pyyntö mennyt läpi todennäköisesti, tarkasta kumminkin sarjaväylään tullut ;raakadata ja etsi sieltä esim lukua 200, joka on yleensä palvelimen vastaus onnistuneeseen HTTP-pyyntöön. ;******************** ;Tämä osuus koodista ei ole käytössä. LUEHTTP ; HTTP-pyynnön lähetys, jolla pyydetään palvelimelta jonkun sivun tai tiedoston raakadata. ; Jossa voi olla käsky tehdä mikro-ohjaimelle jotain. Esim käynnistää moottori tms. ; Käsky tiedostoon tai sivulle on voitu taas antaa nettisivulla jonkun toimesta. ;POST http://koti.mbnet.fi/catapult/projekti/pyynto/index.php HTTP/1.1 ;Host: http://koti.mbnet.fi ;HTTP-pyynnön tulostus. call POSTTAULU call GPRSPOINTTERIKOHDALLEEN call RETUR call HOSTTAULU call GPRSPOINTTERIKOHDALLEEN call RETUR HTTPLUKUKUITTAUSODOTUTUS ;Tarkastetaan onko OK-viestiä tullut. call KOLMESEKUNTTIA movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto HTTPLUKUKUITTAUSODOTUTUS return ;Sarjaväylään tullut data on todennäköisesti saapunut ja sen voi tarkastaa. ;****************************************************************************** ;GPS-koordinaattien lukemisen aliohjelmat. ;****************************************************************************** ;Valitaan moduli mitä luetaan. LUETAAN_GSM_MODULIA ;Luetaan merkkejä RS-22 väylästä GSM-modulilta. bsf PORTC, GSMRX ;equ 5 bcf PORTC, GPSRX ;equ 4 return LUETAAN_GPS_MODULIA ;Luetaan merkkejä RS-22 väylästä GPS-modulilta. bcf PORTC, GSMRX ;equ 5 bsf PORTC, GPSRX ;equ 4 return LUEGPS ;Tätä kohtaa kutsutaan kun aletaan lukemaan GPS-koordinaatteja. call LUETAAN_GPS_MODULIA movlw A'E' movwf MERKKEJATULLUT LUETAANGPS movlw A'K' xorwf MERKKEJATULLUT,W ; Tarkastetaan onko RS-232 väylään tullut merkkejä. btfss STATUS,Z ; Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LUETAANGPS movlw A'E' movwf MERKKEJATULLUT LUETAANGPS1 movlw A'K' xorwf MERKKEJATULLUT,W ; Tarkastetaan onko RS-232 väylään tullut merkkejä. btfss STATUS,Z ; Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LUETAANGPS1 ;Estetään keskeytys RS-232 väylästä vertailun ajaksi, jotta vertailu ei menisi pieleen, kun väylästä tulisi puskuriin uusia merkkejä kesken vertailun. bcf PIE1,RCIE ;Jos halutaan vastaanoton keskeytys päälle niin aseta RCIE bitti ykköseksi PIE1 rekisterissä. ;Luetaan RS-232 väylään tulleet merkit LCD.näytön puskuriin. call SARJALIIKENNERAMPOINT ;Etsitään oikeita aloitusmerkkejä GPS-datasta, ennen kuin aloitetaan lukeminen. call GPGGATAULU call VERTAILE movlw A'K' xorwf VERTAILUTASMASI,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIGPSSIGNAALIA ;Sopivat merkit tuli ladataan nyt haluttu data muistiin. ;Etsitään E-kirjainta, josta eteenpäin +2, niin vastaan tulee tieto, onko GPS-signaalia löytynyt. movlw 0x48 ;Luku 72 W-rekisteriin. movwf d1 movff SARJALIIKENNERAMPUSKURIH, FSR0H movff SARJALIIKENNERAMPUSKURIL, FSR0L ETSIE decfsz d1, f goto ETSIE1 goto EIGPSSIGNAALIA ETSIE1 movff POSTINC0,TAVU movlw A'E' xorwf TAVU,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto ETSIE ;Tarkastetaan onko numero nolla. Jos on niin signaalia ei ole löytynyt. TARKASTASIGNAALI movff POSTINC0,W ;Pilkun yli. movff POSTINC0,TAVU ;Nyt pitäisi olla TAVU rekisterissä joku numero. movlw A'0' ;Jos numero on nolla, niin paikkatietoa ei ole löytynyt. xorwf TAVU,W ; btfsc STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIGPSSIGNAALIA ;GPS-signaali löytynyt otetaan haluttu GPS-data talteen. ;Takaisin siihen kohtaan josta etsitty NMEA-sanoma alkoi. movff SARJALIIKENNERAMPUSKURIH, FSR0H movff SARJALIIKENNERAMPUSKURIL, FSR0L ;Etsitään 2 pilkkua, joiden jälkeen alkaa itse GPS-koordinaatit. movlw 0x2 ;Luku 2 W-rekisteriin. movwf d1 PILKUT movff POSTINC0,TAVU ;Nyt pitäisi olla TAVU rekisterissä joku numero. movlw A',' xorwf TAVU,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto PILKUT decfsz d1, f goto PILKUT PILKUTLASKETTU call GPSRAMPOINT ;GPRMS-viestin GPS-koordinaattien luku. ;Luetaan viesti RAM-muistiin niin, että se sopii sellaisenaan LCD-näyttöön. movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movlw A'°' movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan pilkku. movff POSTINC0,POSTINC1 ;N-kirjain. movlw A' ' movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movf POSTINC0,W ;Ohitetaan pilkku. movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movlw A'°' movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan pilkku. movff POSTINC0,POSTINC1 ;E-kirjain. movlw A' ' movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movwf POSTINC1 movlw A'#' ;Päätetään kenoviivaan RAM-muistiin kirjoitus, jotta voidaan tietää mihin loppui data. movwf POSTINC1 ;Muodostetaan vielä nettilinkki, josta sen voi likata auki ainakin älykännyöissä ja nähdä siinä olevassa nettiselaimessa koordinaatit kartalla. ;Takaisin siihen kohtaan josta etsitty NMEA-sanoma alkoi. movff SARJALIIKENNERAMPUSKURIH, FSR0H movff SARJALIIKENNERAMPUSKURIL, FSR0L ;Etsitään 2 pilkkua, joiden jälkeen alkaa itse GPS-koordinaatit. movlw 0x2 ;Luku 2 W-rekisteriin. movwf d1 PILKUTLINKKI movff POSTINC0,TAVU ;Nyt pitäisi olla TAVU rekisterissä joku numero. movlw A',' xorwf TAVU,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto PILKUTLINKKI decfsz d1, f goto PILKUTLINKKI PILKUTLASKETTULINKKI call LINKKITAULU ;Tähän laitetaan taulukin valmiiksi, koska tähän puskuriin tulee pelkkä linkki. call LINKKIPUSKURIIN ;Linkin alkuosa puskuriin ennen koordinaatteja. ;Luetaan viesti RAM-muistiin niin, että se sopii sellaisenaan linkkiin. movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movlw A'°' movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan viimeinen desimaali pois. movf POSTINC0,W ;Ohitetaan pilkku. movff POSTINC0,POSTINC1 ;N-kirjain. ;Toinen osa GPS-koordinaateista. movf POSTINC0,W ;Ohitetaan pilkku. movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movlw A'°' movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan viimeinen desimaali pois. movf POSTINC0,W ;Ohitetaan pilkku. movff POSTINC0,POSTINC1 ;E-kirjain. movlw A'#' ;Päätetään risuaitaan RAM-muistiin kirjoitus, jotta voidaan tietää mihin loppui linkki data. movwf POSTINC1 ;Linkki on valmis ja sijaitsee LINKKIRAMPUSKURI:ssa ;Muodostetaan PHP:lle helposti käsiteltävä GPS-koordinaatti. ;Takaisin siihen kohtaan josta etsitty NMEA-sanoma alkoi. movff SARJALIIKENNERAMPUSKURIH, FSR0H movff SARJALIIKENNERAMPUSKURIL, FSR0L ;Etsitään 2 pilkkua, joiden jälkeen alkaa itse GPS-koordinaatit. movlw 0x2 ;Luku 2 W-rekisteriin. movwf d1 PILKUTPHP movff POSTINC0,TAVU ;Nyt pitäisi olla TAVU rekisterissä joku numero. movlw A',' xorwf TAVU,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto PILKUTPHP decfsz d1, f goto PILKUTPHP PILKUTLASKETTUPHP call GPSPHPLLERAMPOINT ;Luetaan viesti RAM-muistiin niin, että se sopii sellaisenaan linkkiin. movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movlw A'*' movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan piste. movlw A'*' ;Ja pisteen tilalle asteriski. movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan viimeinen desimaali pois. movf POSTINC0,W ;Ohitetaan pilkku. movlw A'*' ;Ja pilkun tilalle asteriski. movwf POSTINC1 movff POSTINC0,POSTINC1 ;N-kirjain. ;Erotetaan P ja E osat toisistaan kaksoispisteellä. movlw A':' ; movwf POSTINC1 ;Erotetaan P ja E osat toisistaan kaksoispisteellä. ;Toinen osa GPS-koordinaateista. movf POSTINC0,W ;Ohitetaan pilkku. movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movlw A'*' movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan piste. movlw A'*' ;Ja pisteen tilalle asteriski. movwf POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movff POSTINC0,POSTINC1 movf POSTINC0,W ;Ohitetaan viimeinen desimaali pois. movf POSTINC0,W ;Ohitetaan pilkku. movlw A'*' ;Ja pilkun tilalle asteriski. movwf POSTINC1 movff POSTINC0,POSTINC1 ;E-kirjain. movlw A'#' ;Päätetään risuaitaan RAM-muistiin kirjoitus, jotta voidaan tietää mihin loppui linkki data. movwf POSTINC1 ;PHP:lle oma GPS-koordinaatti on valmis ja sijaitsee GPSPHPLLERAMPOINT:ssa goto LUENOPEUSJASUUNTA ;**************************************' LUENOPEUSJASUUNTA ;Etsitään seuraavaksi NMEA-viesteistä nopeus ja suunta minne edetään. ;Luetaan RS-232 väylään tulleet merkit LCD.näytön puskuriin. call SARJALIIKENNERAMPOINT ;Etsitään oikeita aloitusmerkkejä GPS-datasta, ennen kuin aloitetaan lukeminen. call GPVTGTAULU call VERTAILE movlw A'K' xorwf VERTAILUTASMASI,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto EIGPSSIGNAALIA ;Sopivat merkit tuli ladataan nyt haluttu data muistiin. ;Takaisin siihen kohtaan josta etsitty NMEA-sanoma alkoi. movff SARJALIIKENNERAMPUSKURIH, FSR0H movff SARJALIIKENNERAMPUSKURIL, FSR0L ;Etsitään N-kirjain, jonka jälkeen tulee Km/h nopeus. movlw 0x1 ;Luku W-rekisteriin. movwf d1 NKIRJAIN movff POSTINC0,TAVU ;Nyt pitäisi olla TAVU rekisterissä joku numero. movlw A'N' xorwf TAVU,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto NKIRJAIN decfsz d1, f goto NKIRJAIN NKIRJAINLOYTYI ;Luetaan Km/h nopeus talteen. movf POSTINC0,w ;Ohitetaan pilkku. movff POSTINC0,KMSADAT movff POSTINC0,KMKYMMENET movff POSTINC0,KMYKKOSET movff POSTINC0,KMPILKKU movff POSTINC0,KMDESIMAALIT ;Km/h nopeus luettu talteen. ;************************************ ;Luetaan seuraavaksi suunta. ;Takaisin siihen kohtaan josta etsitty NMEA-sanoma alkoi. movff SARJALIIKENNERAMPUSKURIH, FSR0H movff SARJALIIKENNERAMPUSKURIL, FSR0L ;Etsitään pilkku, jonka jälkeen tulee todellinen suunta ei siis magneettinen. movlw 0x1 ;Luku W-rekisteriin. movwf d1 SUUNTAALKUPILKKU movff POSTINC0,TAVU ;Nyt pitäisi olla TAVU rekisterissä joku numero. movlw A',' xorwf TAVU,W ; btfss STATUS,Z ;Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto SUUNTAALKUPILKKU decfsz d1, f goto SUUNTAALKUPILKKU SUUNTALOYTYI movff POSTINC0,SUUNTASADAT movff POSTINC0,SUUNTAKYMMENET movff POSTINC0,SUUNTAYKKOSET movff POSTINC0,SUUNTAPILKKU movff POSTINC0,SUUNTADESIMAALIT ;Todellinen suunta ei magneettiinen luettu talteen. movlw A'E' movwf MERKKEJATULLUT call GPS_NAYTTO_PAIVITYS call KOLMESEKUNTTIA movlw A'E' movwf MERKKEJATULLUT goto GPSLUETTU EIGPSSIGNAALIA call EILINKKIATAULU ;Tässä taulussa ei ole kenoviivaa päättämässä kirjoitusta vaan kaariviiva. ;Koska itse linkissä käytetään kenoviivaa niin sitä ei voi käyttää päättämään linkkiä. call LINKKIPUSKURIIN ;Linkkia ei tule kun ei ole koordinaatteja. movlw A'#' ;Päätetään risuaitaan RAM-muistiin kirjoitus, jotta voidaan tietää mihin loppui data. movwf POSTINC1 call EIGPSSIGNAALIATAULU;Haetaan tämän taulun osoite. call GPSPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call GPS_NAYTTO_PAIVITYS call KOLMESEKUNTTIA movlw A'E' movwf MERKKEJATULLUT goto GPSLUETTU GPSLUETTU call LUETAAN_GSM_MODULIA ;Nollataan kaikki virheet pois RS-232 vastaanotosta. movf RCREG,W ;Tyhjätään RCREG mahdollisesta turhasta tiedosta. movf RCREG,W banksel RCSTA bcf RCSTA, CREN ;Mahdolliset virheet nollataan. bsf RCSTA, CREN bcf PIR1,RCIF ;Lopuksi varmistetaan, että keskeytyksen lippubitti on pois päältä. ;Ettei tule heti uutta keskeytystä kun palataan tästä aliohjelmasta. ;Sallitaan keskeytys RS-232 väylästä jälleen, kun vertailu on suoritettu. bsf PIE1,RCIE ;Jos halutaan vastaanoton keskeytys päälle niin aseta RCIE bitti ykköseksi PIE1 rekisterissä. return ;****************************************************************************** ;Hostin, polun ja tunnuksen asetus tekstiviestillä aliohjelmat. POLKULCDPUSKURIIN call LCDRAMPOINT ;Haetaan RAM-muistin pointteri. movlw A'P' movwf POSTINC1 movlw A':' movwf POSTINC1 goto LUELISAAEEPROMISTA HOSTILCDPUSKURIIN call LCDRAMPOINT ;Haetaan RAM-muistin pointteri. movlw A'H' movwf POSTINC1 movlw A':' movwf POSTINC1 goto LUELISAAEEPROMISTA TUNNUSLCDPUSKURIIN call LCDRAMPOINT ;Haetaan RAM-muistin pointteri. movlw A'T' movwf POSTINC1 movlw A':' movwf POSTINC1 goto LUELISAAEEPROMISTA LUELISAAEEPROMISTA call EEPROMLUE incf EEPROMOSOITE movlw A'!' xorwf TAVU,W btfsc STATUS,Z ; Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LOPUKSITYHJAA ; Varmistetaan, että loput paikat LCD-puskurissa on tyhjiä ja näkyy näin ollen näytössä myös tyhjinä paikkoina. movff TAVU,POSTINC1 ; Varastoidaan data puskuriin. goto LUELISAAEEPROMISTA LOPUKSITYHJAA movlw 0x20 movwf TEMP LISAATYHJAT movlw A' ' movwf POSTINC1 decfsz TEMP, f goto LISAATYHJAT return ;***************** ;Tekstiviestissä tulleiden asetuksien asennus. ASETUKSET call MUUTAGPRSASETUKSIATAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call TUHOATEKSTIVIESTI ;Tuhotaan vanha tekstiviesti oli siellä mitä tahansa uuden asetukset sisältävän tekstiviestin tieltä. ASETUKSETNAPPI call PUOLISEK btfsc PORTB,LISAA goto ASETUKSETNAPPI movlw 0x03 movwf VIRHE LUETAAN movlw A'E' movwf OKVIESTI ;Käynnistetään tekstiviestin lukeminen. call CMGF1 movlw A'E' movwf MERKKEJATULLUT call CMGR1 ;Pyöritetään animaatiota näytössä, kun odotetaan tekstiviestiä saapuvaksi. call ODOTETAANGPRSASETUKSIATAULU;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK btfsc PORTB,LISAA return call ODOTETAANGPRSASETUKSIA1TAULU;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK btfsc PORTB,LISAA return call ODOTETAANGPRSASETUKSIA2TAULU;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK btfsc PORTB,LISAA return call ODOTETAANGPRSASETUKSIA3TAULU;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK btfsc PORTB,LISAA return call KOLMESEKUNTTIA movlw A'K' xorwf OKVIESTI,W btfss STATUS,Z ; Testataan Z-lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LUETAAN ;Jotain oli tullut, kun tähän tultiin. Eli luetaan tekstiviesti ja tehdään asetukset jos niitä löytyy. movlw A'E' movwf OKVIESTI movlw A'E' movwf MERKKEJATULLUT decfsz VIRHE, f goto LUETAAN ;Luetaan tekstiviesti pari kertaa varmuuden vuoksi. call GPRSASETUKSETSAAPUNEETTAULU;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA ;Aletaan lukemaan asetuksia. call SARJALIIKENNERAMPOINT movlw 0xA1 ;165 movwf VIRHE movlw 0x8 ;8 movwf TEMP ;Suodatetaan tekstiviestistä turhaa otsikkotietoa pois lainausmerkkejä laskemalla. UUSILAINAUSMERKKI movff POSTINC0,TAVU movlw A'"' xorwf TAVU,W btfss STATUS,Z goto UUSILAINAUSMERKKI decfsz TEMP, f goto UUSILAINAUSMERKKI movlw 0xFF ;255 movwf TEMP goto LUELISAA ;Tästä alkaa tekstiviestin tutkiminen. UUSIMERKKI movff POSTINC0,TAVU decfsz VIRHE, f return movlw 0x1 ;255 movwf TEMP return LOPPUMERKKIEEPROMIIN movlw A'!' movwf TAVU call EEPROMKIRJOITA return LUELISAA decfsz TEMP, f goto HOO clrf TEMP incf TEMP return ;Tähän tultiin jos tekstiviesti päättyi. HOO ;Tutkitaan alkaako hosti. call UUSIMERKKI movlw A'H' xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto PEE ;H-kirjain löyty, joka tarkoittaa Hostia, joten jos H-kijaimen jälkeen tulee vielä kaksoispiste luetaan sen jälkeen tuleva hosti talteen EEPROM muistiin. call UUSIMERKKI movlw A':' xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto PEE movlw 0x00 movwf EEPROMOSOITE HOOKELAA call UUSIMERKKI movlw A' ' xorwf TAVU,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto HOSTINFORMAATIO call EEPROMKIRJOITA incf EEPROMOSOITE decfsz TEMP, f goto HOOKELAA incf TEMP return ;Jos tähän tultiin tekstiviesti loppui. HOSTINFORMAATIO call LOPPUMERKKIEEPROMIIN movlw 0x00 movwf EEPROMOSOITE call HOSTILCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA goto LUELISAA PEE ;Tutkitaan alkaako polku. movlw A'P' xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TEE call UUSIMERKKI movlw A':' xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TEE movlw 0x64 movwf EEPROMOSOITE PEEKELAA call UUSIMERKKI movlw A' ' xorwf TAVU,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto POLKUINFORMAATIO call EEPROMKIRJOITA incf EEPROMOSOITE decfsz TEMP, f goto PEEKELAA incf TEMP return ;Jos tähän tultiin tekstiviesti loppui. POLKUINFORMAATIO call LOPPUMERKKIEEPROMIIN movlw 0x64 movwf EEPROMOSOITE call POLKULCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA goto LUELISAA TEE ;Tutkitaan alkaako tunnus. movlw A'T' xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LUELISAA call UUSIMERKKI movlw A':' xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto LUELISAA movlw 0xC8 movwf EEPROMOSOITE TEEKELAA call UUSIMERKKI movlw A' ' xorwf TAVU,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto TUNNUSINFORMAATIO call EEPROMKIRJOITA incf EEPROMOSOITE decfsz TEMP, f goto TEEKELAA incf TEMP return ;Jos tähän tultiin tekstiviesti loppui. TUNNUSINFORMAATIO call LOPPUMERKKIEEPROMIIN movlw 0xC8 movwf EEPROMOSOITE call TUNNUSLCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA goto LUELISAA ;****************************************************************************** ;****************************************************************************** ALUSTUKSET call LUETAAN_GSM_MODULIA ;LCD-näytön alustukset. call LCDKAYNNISTYS ;Käynnistää näytön 4-bititillä ohjattavaksi. call ENSINMAISETKASKYTLCDLLE ;Sarjaliikenteen alustus. call SARJALIIKENNEALUSTUS call SARJALIIKENNERAMPOINT ;GSM-modulin alustukset. movlw 0x7 ;Käynnistys viiveen asettelu. movwf TEMP ; ;GSM-modulin alustus. ;Odotellaan ensin hetki Käynnistyy tekstiä näyttäen, että myös GSM-moduli ehtii käynnistyä. ;Muuten se ei vastaa AT-komentoihin OK:lla. ;Tehdään pieni animaation LCD-näytöön, jotta käynnistys mäyttäisi etenevän. KAYNNISTYY bcf PORTA,GSM ;GSM-modulin käynnistys, eli laitetaan GSM-pinni nollaksi jolloin GSM-moduli käynnistyy. call KAYNNISTYYTAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK call KAYNNISTYY1TAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK call KAYNNISTYY2TAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK call KAYNNISTYY3TAULU ;Haetaan tämän taulun osoite. call LCDPUSKURIIN ;Kirjoitetaan viesti RAM-muistiin. call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call PUOLISEK decfsz TEMP, f goto KAYNNISTYY call AT call RETUR call PUOLISEK call PUOLISEK call OKKUITTAUS call PUOLISEK call AT call RETUR call PUOLISEK call PUOLISEK call OKKUITTAUS call PUOLISEK call NUMERONAYTTO return ;****************************************************************************** ;Pääohjelma MAIN call ALUSTUKSET ;Jos nappi on painettuna, niin mennään odottaman asetustekstiviestejä. call KOLMESEKUNTTIA btfsc PORTB,LISAA call ASETUKSET goto MAINGPRSALUSTUS ;********************* MAINGPRSALUSTUS ;Nollataan kaikki uudelleen asetusta varten. call KOLMESEKUNTTIA call GPRSTAUKO ; Kolme plusmerkkiä väylään. call KOLMESEKUNTTIA ; Niin saadaan varmistettua, että GSM-moduli ottaa vastaan AT-komentoja. call ATH ; Katkaistaan mahdollinen GPRS-yhteys. call KOLMESEKUNTTIA movlw A'E' movwf VIKA btfsc PORTB,LISAA call ASETUKSET ;Odotetaan mahdollisia uusia asetuksia tekstiviestinä. movlw A'E' movwf VIKA call GPRSALUSTUS ;Yritetään alustaa GSM-moduli GPRS-yhteyteen. call KOLMESEKUNTTIA ;Tarkastetaan menikö GPRS-alustus pieleen. movlw A'K' xorwf VIKA,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto MAINGPRSALUSTUS; GPRS-alustus meni pieleen. Haetaan EEPROM-muistista uudestaan GSM-modulin alustusdata. ;********************* LOOPPI ;Lue GPS-koordinaatit. call LUEGPS ;Alusta GPRS-yhteys soittamalla soittosarjaan. call SOITAGPRS ; ATD*97# sarjaliikkenne väylään. movlw A'K' xorwf VIKA,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto MAINGPRSALUSTUS; Haetaan EEPROM-muistista uudestaan GSM-modulin alustusdata. movlw A'E' ; Jos tähän tultiin, niin soittaminen soittosarjaan onnistui. movwf VIKA ;Lähetetään GPS-kordinaatit nettiin call KIRJOITAHTTP ;Tarkastetaan onnistuiko HTTP-pyynnön lähetys palvelimelle internettiin. movlw A'K' xorwf VIKA,W btfsc STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto MAINGPRSALUSTUS; Haetaan EEPROM-muistista uudestaan GSM-modulin alustusdata. movlw A'E' movwf VIKA ;************************** ;Ylimääräinen hienous... ;Etsitään sarjaliikeen puskuriin tulleesta datasta mahdollista tekstiä, joka laitetaan näyttöön hetkeksi. call SARJALIIKENNERAMPOINT movlw 0xFF movwf VAARATMERKIT movlw 0x3 movwf VAARATMERKIT1 ETSIKISSANHANTAA ;Etsitään @-merkkiä, jonka jälkeen alkaa teksti. decfsz VAARATMERKIT, f goto ETSLISAAKISSANHANTAA decfsz VAARATMERKIT1, f goto ETSLISAAKISSANHANTAA goto LOOPPI ;Merkkiä @ ei löytynyt. ETSLISAAKISSANHANTAA movff POSTINC0,TAVU movlw A'@' xorwf TAVU,W btfss STATUS,Z ; Testataan Z lippu STATUS rekisteristä.Jos se on yksi merkki oli se mitä etsittiin. goto ETSIKISSANHANTAA ;Merkki @ löytyi. call LCDRAMPOINT movlw 0x21 movwf VAARATMERKIT TEKSTINAYTTOON movff POSTINC0,POSTINC1 decfsz VAARATMERKIT, f goto TEKSTINAYTTOON movlw 0x21 movwf VAARATMERKIT TYHJAALOPUKSI movlw A' ' movwf POSTINC1 decfsz VAARATMERKIT, f goto TYHJAALOPUKSI call NAYTTO_PAIVITYS ;Käydään päivittämässä LCD-näyttö. call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA call KOLMESEKUNTTIA goto LOOPPI ;****************************************************************************** ;End of program END