;*** Terminal za NMEA GPS - S53MV - 8/5/2005 *** ;*** Uporaba portov *** ;HD44780 E=RA0 1=aktiven ;HD44780 RS=RA1 1=data 0=cmd ;HD44780 R//W=RA2 1=read 0=write ;D7=RA3=RA4 ;prekinitev=RB0 ;D0=RB1, D1=RB2, D2=RB3, D3=RB4, D4=RB5, D5=RB6, D6=RB7 ;*** Uporaba RAMa *** ;0C NMEA, CAKAJ40, ZNAK, UKAZ ;0D PREKIN ;0E NMEA, GPGGA, GPRMC, GPVTG stanje ;0F NMEA, GPGGA, GPRMC, GPVTG stevec vejic ;10 GPGGA, GPRMC, GPVTG naslov zaslona (negativen neveljaven) ;11 NMEA, GPGGA, GPRMC, GPVTG stevec prvega vrivanja ;12 NMEA, GPGGA, GPRMC, GPVTG stevec drugega vrivanja ;13 GPGGA, GPRMC, GPVTG znak vrivanja ;*** Zacetek programa, tocno 4 ukazi, sledi PREKIN *** LIST P=16F84 ORG 0 CALL INIPIC CALL INILCD CLRF 0E ;reset stanja NMEA GOTO GLAVNI ;*** Prekinitveni program *** (0D) ORG 4 PREKIN CALL CAKAJP CLRF 0D ;start CALL CAKAJB BTFSS 6,0 ;bit 0 LSB BSF 0D,0 CALL CAKAJB BTFSS 6,0 ;bit 1 BSF 0D,1 CALL CAKAJB BTFSS 6,0 ;bit 2 BSF 0D,2 CALL CAKAJB BTFSS 6,0 ;bit 3 BSF 0D,3 CALL CAKAJB BTFSS 6,0 ;bit 4 BSF 0D,4 CALL CAKAJB BTFSS 6,0 ;bit 5 BSF 0D,5 CALL CAKAJB BTFSS 6,0 ;bit 6 BSF 0D,6 CALL CAKAJB BTFSS 6,0 ;bit 7 MSB BSF 0D,7 CALL NMEA ;dekodiranje bajta v NMEA BCF 0B,1 ;resetiraj INTF RETFIE ;*** CakaJ polovico/cel bit 4.8kbps,6144KHz >>> 160/320 ukazov *** CAKAJP MOVLW 27 GOTO CAKAJBP CAKAJB MOVLW 4E NOP NOP CAKAJBP ADDLW 0FF ;zanka 4 ukazi BTFSS 3,2 GOTO CAKAJBP RETURN ;*** Dekodiranje NMEA okvirjev, znak v 0D *** (0C,0E,0F,10,11,12) NMEA MOVLW 2A ;konec: cakanje * SUBWF 0D,0 BTFSS 3,2 GOTO NMEA1 CLRF 0E RETURN NMEA1 MOVF 0E,0 ;zacetek: cakanje $ BTFSS 3,2 GOTO NMEA2 INCF 0E,1 MOVLW 24 SUBWF 0D,0 BTFSS 3,2 CLRF 0E RETURN NMEA2 ADDLW 0FF ;cakanje G BTFSS 3,2 GOTO NMEA3 INCF 0E,1 MOVLW 47 SUBWF 0D,0 BTFSS 3,2 CLRF 0E RETURN NMEA3 ADDLW 0FF ;cakanje P BTFSS 3,2 GOTO NMEA4 INCF 0E,1 MOVLW 50 SUBWF 0D,0 BTFSS 3,2 CLRF 0E RETURN NMEA4 ADDLW 0FF ;preskoci en znak BTFSS 3,2 GOTO NMEA5 INCF 0E,1 RETURN NMEA5 ADDLW 0FF ;vrsta okvirja? BTFSS 3,2 GOTO NMEA6 CLRF 0F ;resetiraj stevec vejic in neveljaven naslov MOVLW 0FF MOVWF 10 CLRF 11 ;pobrisi vrivanje znakov CLRF 12 INCF 0E,1 ;okvir (G)G(A)? MOVLW 47 SUBWF 0D,0 BTFSC 3,2 RETURN INCF 0E,1 ;okvir (R)M(C)? MOVLW 4D SUBWF 0D,0 BTFSC 3,2 RETURN INCF 0E,1 ;okvir (V)T(G)? MOVLW 54 SUBWF 0D,0 BTFSC 3,2 RETURN CLRF 0E RETURN NMEA6 MOVWF 0C ;izpis znaka, ki ni vejica MOVLW 2C SUBWF 0D,0 BTFSC 3,2 GOTO NMEA7 MOVF 0D,0 BTFSC 10,7 RETURN CALL ZNAK DECF 11,1 ;vrivanje znaka BTFSS 3,2 RETURN CALL CAKAJP MOVF 13,0 CALL ZNAK MOVF 12,0 ;naslednji vrivek? MOVWF 11 CLRF 12 RETURN NMEA7 INCF 0F,1 ;povecaj stevec vejic in neveljaven naslov MOVLW 0FF MOVWF 10 CLRF 11 ;pobrisi vrivanje znakov CLRF 12 MOVF 0C,0 ADDLW 0FF BTFSC 3,2 GOTO GPGGA ;dekodiranje naslovov (G)G(A) ADDLW 0FF BTFSC 3,2 GOTO GPRMC ;dekodiranje naslovov (R)M(C) GOTO GPVTG ;dekodiranje naslovov (V)T(G) ;*** Postavi naslov v HD44780 in v (10) *** (10) NASLOV MOVWF 10 IORLW 80 CALL UKAZ RETURN ;*** Dekodiranje naslova GGA *** (0C,11,12,13) GPGGA MOVF 0F,0 MOVWF 0C MOVLW 2 ;ure, minute, sekunde MOVWF 11 MOVWF 12 MOVLW 3A MOVWF 13 MOVLW 60 DECF 0C,1 BTFSC 3,2 GOTO NASLOV MOVLW 2 ;zemljepisna sirina MOVWF 11 CLRF 12 MOVLW 0DF MOVWF 13 MOVLW 0B DECF 0C,1 BTFSC 3,2 GOTO NASLOV CLRF 11 ;sever/jug MOVLW 0A DECF 0C,1 BTFSC 3,2 GOTO NASLOV MOVLW 3 ;zemljepisna dolzina MOVWF 11 MOVLW 4A DECF 0C,1 BTFSC 3,2 GOTO NASLOV CLRF 11 ;vzhod/zahod MOVLW 49 DECF 0C,1 BTFSC 3,2 GOTO NASLOV DECF 0C,1 MOVLW 1 ;# satelitov MOVWF 11 MOVLW 23 MOVWF 13 MOVLW 1C DECF 0C,1 BTFSC 3,2 GOTO NASLOV CLRF 11 ;GDOP MOVLW 1E DECF 0C,1 BTFSC 3,2 GOTO NASLOV MOVLW 5 ;nadmorska visina MOVWF 11 MOVLW 6D MOVWF 13 MOVLW 22 DECF 0C,1 BTFSC 3,2 GOTO NASLOV RETURN ;*** Dekodiranje naslova RMC *** (0C,11,12,13) GPRMC MOVF 0F,0 MOVWF 0C DECF 0C,1 MOVLW 54 ;veljavnost DECF 0C,1 BTFSC 3,2 GOTO NASLOV DECF 0C,1 DECF 0C,1 DECF 0C,1 DECF 0C,1 DECF 0C,1 DECF 0C,1 MOVLW 2 ;dan, mesec, leto MOVWF 11 MOVWF 12 MOVLW 2F MOVWF 13 MOVLW 57 DECF 0C,1 BTFSC 3,2 GOTO NASLOV RETURN ;*** Dekodiranje naslova VTG *** (0C,11,13) GPVTG MOVF 0F,0 MOVWF 0C MOVLW 5 ;azimut MOVWF 11 MOVLW 0DF MOVWF 13 MOVLW 0 DECF 0C,1 BTFSC 3,2 GOTO NASLOV DECF 0C,1 DECF 0C,1 DECF 0C,1 CLRF 11 ;vozli MOVLW 14 DECF 0C,1 BTFSC 3,2 GOTO NASLOV DECF 0C,1 MOVLW 40 ;km/h DECF 0C,1 BTFSC 3,2 GOTO NASLOV RETURN ;*** Inicializacija portov *** (0E) INIPIC MOVLW 6 ;zacetno stanje porta A MOVWF 5 MOVLW 0 ;zacetno stanje porta B MOVWF 6 BSF 3,5 ;postavi PAGE1 MOVLW 10 ;port A: izhodi RA0-3 in vhod RA4 MOVWF 5 ;vpisi TRISA MOVLW 1 ;port B: vhod RB0 in izhodi RB1-7 MOVWF 6 ;vpisi TRISB BCF 3,5 ;postavi PAGE0 BCF 0B,1 ;resetiraj INTF BSF 0B,4 ;vklopi INTE RETURN ;*** Inicializacija HD44780 *** INILCD MOVLW 38 ;function set CALL UKAZ CALL CAKAJ40 MOVLW 38 ;function set CALL UKAZ CALL CAKAJP MOVLW 38 ;function set CALL UKAZ CALL CAKAJP MOVLW 8 ;display off CALL UKAZ CALL CAKAJP MOVLW 1 ;display clear CALL UKAZ CALL CAKAJ40 MOVLW 6 ;entry mode set CALL UKAZ CALL CAKAJP MOVLW 0C ;display on CALL UKAZ CALL CAKAJP MOVLW 0C5 ;napisi kmh CALL UKAZ CALL CAKAJP MOVLW 6B CALL ZNAK CALL CAKAJP MOVLW 6D CALL ZNAK CALL CAKAJP MOVLW 68 CALL ZNAK CALL CAKAJP MOVLW 99 ;napisi kt CALL UKAZ CALL CAKAJP MOVLW 6B CALL ZNAK CALL CAKAJP MOVLW 74 CALL ZNAK CALL CAKAJP RETURN ;*** Cakanje 4ms *** (0C) CAKAJ40 MOVLW 28 MOVWF 0C CAKAJ41 CALL CAKAJP DECFSZ 0C,1 GOTO CAKAJ41 RETURN ;*** Glavni program *** GLAVNI BSF 0B,7 ;vklopi GIE GOTO GLAVNI ;*** Znak ali ukaz iz W v HD44780 *** (0C) ZNAK BSF 5,1 ;postavi RS=1 za znak GOTO ZNUKAZ UKAZ BCF 5,1 ;postavi RS=0 za ukaz ZNUKAZ BCF 5,2 ;write R//W=0 BCF 5,3 ;premakni bajt podatkov MOVWF 0C RLF 0C,0 BTFSC 3,0 BSF 5,3 MOVWF 6 NOP BSF 5,0 ;impulz E NOP BCF 5,0 RETURN ;*** Nastavi konfiguracijo PICa 16F84 *** ORG 2007 ;naslov konfiguracijske besede DW 1A ;CP=OFF, PWRTE=OFF, WDT=OFF, OSC=HS END ;*** Konec programa ***