;*** GS+Marker RX s stiristevilcnim LCDjem - S53MV - 29/12/2004 *** ;*** Uporaba vrat PICa 16F84 *** ;GS vhod 90Hz=RA0 ;GS vhod 150Hz=RA1 ;neuporabljen izhod RA2 ;I2C vodilo: SCL=RA3, SDA=RA4 ;BACKPLANE=RB0 ;STROBE=RB1 ;DATA=RB2 ;CLOCK=RB3 ;tipka DESNO=RB4 ;tipka DOL=RB5 ;tipka GOR=RB6 ;tipka LEVO=RB7 ;*** Uporaba vrat TSA5512 ** ;VOLUME 3-bit D/A: P0-3 (2+3 vzporedno) ;SQUELCH izhod: P4 ;IM+OM vhod: P5 ;S-METER A/D vhod: P6 ;MM+OM vhod: P7 ;*** Uporaba RAMa *** ;0C LCDBIT, TXI2C, RXI2C, PRIKAZ, UNMARK, ILSGS ;0D LCDDAT, CAKAJ, TXI2C, RXI2C, PRIKAZ, ILSGS ;0E LCDDAT oscilator za BACKPLANE in utripanje stevilk ;0F TIPKE spomin prejsnjega stanja ;10,11,12,13 LCDDAT vsebina zaslona ;14,15 MODULO deljenja PLLja ;16 STANJE iz TSA5512 ;17 VRATA za TSA5512 ;18,19 rezultat meritve (negativen je neveljaven) ILSGS ;1A casovnik markerja UNMARK, VRATA ;1E,1F racunanje ILSGS ;20 stevilka spomina TIPKE, MEJE ;21,22,23,24 frekvenca TIPKE, MEJE ;25 squelch TIPKE, MEJE ;26 volume TIPKE, MEJE ;27 stikalo jakost TIPKE, MEJE, ILSGS ;*** Zacetek programa, inicializacije *** LIST P=16F84 ORG 0 CALL INIPIC ;inicializacija vrat PICa CLRF 1A ;casovnik markerja CLRF 20 ;zacetni kazalec CALL RMEM ;zacetni spomin GOTO GLAVNI ;*** Glavna zanka programa *** GLAVNI CALL STANJE ;precitaj stanje TSA5512 CALL MEJE ;preveri meje spremenljivk CALL KANAL ;izracunaj modulo PLLja iz kanala ali frekvence CALL VRATA ;izracunaj vrednosti vrat CALL CMDI2C ;nastavi modulo in vrata TSA5512 CALL PRIKAZ ;priprava podatkov prikaza CALL UNMARK ;preveri delovanje TSA5512 + prikazi Marker CALL LCDDAT ;poslji podatke v pomikalni register CALL ILSGS ;meritev GS CALL TIPKE ;izvedi ukaz s tipk GOTO GLAVNI ;*** Precitaj frekvenco, squelch in volume iz EEPROMa *** RMEM CALL MEJE ;preveri meje spremenljivk CALL KMEM ;doloci kazalce za prepisovanje CALL RMEM1 ;precitaj 4 bajte frekvence CALL RMEM1 CALL RMEM1 CALL RMEM1 CLRF 9 ;squelch in volume na zacetku EEPROMa CALL RMEM1 ;precitaj squelch CALL RMEM1 ;precitaj volume MOVLW 20 ;kazalec v RAMu MOVWF 4 RETURN RMEM1 BSF 3,5 ;postavi PAGE1 - precitaj bajt in povecaj stevca BSF 8,0 ;EECON1 RD BCF 3,5 ;postavi PAGE0 MOVF 8,0 MOVWF 0 INCF 4,1 ;povecaj stevca INCF 9,1 RETURN ;*** Doloci kazalce za prepisovanje EEPROMa *** KMEM MOVF 20,0 ;kazalec v EEPROMu MOVWF 9 ;pomnozi kazalec s 4 ADDWF 9,0 MOVWF 9 ADDWF 9,1 MOVLW 2 ;pristej 2 kazalcu - preskoci squelch in volume ADDWF 9,1 MOVLW 21 ;kazalec v RAMu MOVWF 4 RETURN ;*** Vpisi frekvenco, squelch in volume v EEPROM *** WMEM CALL MEJE ;preveri meje spremenljivk CALL KMEM ;doloci kazalce za prepisovanje CALL WMEM1 ;vpisi 4 bajte frekvence CALL WMEM1 CALL WMEM1 CALL WMEM1 CLRF 9 ;squelch in volume na zacetku EEPROMa CALL WMEM1 ;vpisi squelch CALL WMEM1 ;vpisi volume MOVLW 20 ;kazalec v RAMu MOVWF 4 RETURN WMEM1 BSF 3,5 ;postavi PAGE1 - primerjaj vsebino EEPROMa BSF 8,0 ;EECON1 RD BCF 3,5 ;postavi PAGE0 MOVF 8,0 SUBWF 0,0 BTFSC 3,2 GOTO WMEM3 MOVF 0,0 ;razlika - vpisi novo vsebino v EEPROM MOVWF 8 BSF 3,5 ;postavi PAGE1 BCF 8,3 ;EECON1 WRERR reset BSF 8,2 ;EECON1 WREN set MOVLW 55 MOVWF 9 ;EECON2 55 MOVLW 0AA MOVWF 9 ;EECON2 0AA BSF 8,1 ;EECON1 WR WMEM2 BTFSS 8,4 ;EECON1 EEIF test GOTO WMEM2 BCF 8,4 ;EECON1 EEIF reset BCF 8,2 ;EECON1 WREN reset BCF 3,5 ;postavi PAGE0 WMEM3 INCF 4,1 ;povecaj stevca INCF 9,1 RETURN ;*** Prikaz frekvence (21,22,23,24) ali volume (25) + squelch (26) ali *** ;*** spomina (20) ali rezultata (18,19) *** (10,11,12,13) PRIKAZ CLRF 10 ;pobrisi zaslon CLRF 11 CLRF 12 CLRF 13 MOVLW 0DB ;meja za prikaz spomina/frekvence? ADDWF 4,0 BTFSC 3,0 GOTO PRIKAZ3 ADDLW 5 ;prikazi stevilko spomina? BTFSC 3,2 COMF 6,0 ;poglej tipka pritisnjena? ANDLW 0F0 BTFSC 3,2 GOTO PRIKAZ1 MOVF 20,0 ;izpis stevilke spomina na prvo stevilko CALL LCDDEK MOVWF 10 RETURN PRIKAZ1 MOVF 21,0 ;prva stevilka frekvence - izpis frekvence CALL LCDDEK MOVWF 10 MOVF 22,0 ;druga stevilka frekvence CALL LCDDEK MOVWF 11 MOVF 23,0 ;tretja stevilka frekvence CALL LCDDEK MOVWF 12 MOVF 24,0 ;cetrta stevilka frekvence pomnozena z 2.5 ADDWF 24,0 BTFSC 24,1 ADDLW 1 CALL LCDDEK MOVWF 13 BTFSS 0E,4 ;utripanje stevilke, ki se jo nastavlja gor/dol? GOTO PRIKAZ2 MOVLW 21 SUBWF 4,0 ;prvi znak? BTFSC 3,2 CLRF 10 ADDLW 0FF ;drugi znak? BTFSC 3,2 CLRF 11 ADDLW 0FF ;tretji znak? BTFSC 3,2 CLRF 12 ADDLW 0FF ;cetrti znak? BTFSC 3,2 CLRF 13 PRIKAZ2 BSF 13,0 ;decimalno dvopicje za drugo stevilko RETURN PRIKAZ3 ADDLW 0FE ;meja za prikaz squelch/volume? BTFSC 3,0 GOTO GDILCD ;prikaz CDI na LCDju MOVF 16,0 ;prva stevilka S-meter ANDLW 7 SUBLW 4 CALL LCDDEK MOVWF 10 MOVF 25,0 ;squelch CALL LCDDEK MOVWF 11 MOVF 26,0 ;volume CALL LCDDEK MOVWF 13 BTFSS 0E,4 ;utripanje stevilke, ki se jo nastavlja gor/dol? GOTO PRIKAZ4 MOVLW 25 SUBWF 4,0 ;drugi znak? BTFSC 3,2 CLRF 11 ADDLW 0FF ;cetrti znak? BTFSC 3,2 CLRF 13 PRIKAZ4 RETURN ;*** Prikazi GS CDI za rezultat (18,19) na LCDju *** (0D,10,11,12,13) GDILCD CALL GDILCD1 ;prikazi CDI BTFSS 27,0 ;prikaz jakost sprejema na prvem znaku? RETURN MOVF 18,0 ANDLW 7F CALL LCDDEK MOVWF 10 RETURN GDILCD1 MOVF 19,0 ;prepisi rezultat v (0D) MOVWF 0D BTFSS 18,7 ;preveri veljavnost rezultata? GOTO GDILCD2 BTFSS 0E,3 ;zmigaj dvopicje za neveljavno BSF 13,0 RETURN GDILCD2 BSF 10,7 ;prizgi sredinske crtice BSF 11,7 BSF 12,7 BSF 13,7 MOVF 0D,0 ;prikazi CDI - razlika nic? BTFSC 3,2 RETURN BTFSC 0D,7 ;predznak rezultata? GOTO GDILCD3 BSF 13,4 ;prikazi pozitivne gornje palcke rastejo levo DECF 0D,1 BTFSC 3,2 RETURN BSF 13,6 DECF 0D,1 BTFSC 3,2 RETURN BSF 12,4 DECF 0D,1 BTFSC 3,2 RETURN BSF 12,6 DECF 0D,1 BTFSC 3,2 RETURN BSF 11,4 DECF 0D,1 BTFSC 3,2 RETURN BSF 11,6 DECF 0D,1 BTFSC 3,2 RETURN BSF 10,4 DECF 0D,1 BTFSC 3,2 RETURN BSF 10,6 DECF 0D,1 BTFSC 3,2 RETURN BSF 10,5 ;prizgi gornje crtice za preveliko BSF 11,5 BSF 12,5 BSF 13,5 RETURN GDILCD3 BSF 13,1 ;prikazi negativne spodnje palcke rastejo levo INCF 0D,1 BTFSC 3,2 RETURN BSF 13,3 INCF 0D,1 BTFSC 3,2 RETURN BSF 12,1 INCF 0D,1 BTFSC 3,2 RETURN BSF 12,3 INCF 0D,1 BTFSC 3,2 RETURN BSF 11,1 INCF 0D,1 BTFSC 3,2 RETURN BSF 11,3 INCF 0D,1 BTFSC 3,2 RETURN BSF 10,1 INCF 0D,1 BTFSC 3,2 RETURN BSF 10,3 INCF 0D,1 BTFSC 3,2 RETURN BSF 10,2 ;prizgi spodnje crtice za premajhno BSF 11,2 BSF 12,2 BSF 13,2 RETURN ;*** Prikazi marker, prisotnost TSA5512 in uklenitev PLLja *** (0C,16,1A) UNMARK CLRF 0C ;izlusci markerje v (0C) BTFSS 16,4 BSF 0C,0 BTFSS 16,5 BSF 0C,1 BTFSS 1A,7 ;znizaj casovnik markerja za 1 DECF 1A,1 MOVLW 20 ;postavi casovnik markerja=32 MOVF 0C,1 BTFSS 3,2 MOVWF 1A DECF 0C,1 ;IM na desni piki BTFSC 3,2 BSF 12,0 DECF 0C,1 ;MM na srednji piki BTFSC 3,2 BSF 11,0 DECF 0C,1 ;OM na levi piki BTFSC 3,2 BSF 10,0 MOVF 16,0 ;prisotnost TSA5512 in uklenitev PLLja XORLW 40 ANDLW 0C0 BTFSC 3,2 RETURN BSF 10,0 ;vkljuci vse decimalne pike na LCDju BSF 11,0 BSF 12,0 RETURN ;*** Preveri meje kazalca, spomina, frekvence, volume, squelch, stikalo *** MEJE MOVLW 0E0 ;spodnja meja kazalca ADDWF 4,1 BTFSS 3,0 CLRF 4 SUBWF 4,1 MOVLW 0D9 ;gornja meja kazalca ADDWF 4,1 BTFSC 3,0 CLRF 4 SUBWF 4,1 MOVLW 0E ;meje spomina BTFSC 20,7 MOVWF 20 MOVLW 0F1 ADDWF 20,1 BTFSS 3,0 SUBWF 20,1 BTFSS 24,7 ;spodnja meja cetrte (zadnje) stevilke frekvence (25kHz) GOTO MEJE1 MOVLW 3 MOVWF 24 DECF 23,1 ;prenos: znizaj tretjo stevilko MEJE1 MOVLW 4 ;gornja meja cetrte (zadnje) stevilke frekvence (25kHz) SUBWF 24,0 BTFSS 3,0 GOTO MEJE2 CLRF 24 INCF 23,1 ;prenos: zvisaj tretjo stevilko MEJE2 BTFSS 23,7 ;spodnja meja tretje stevilke frekvence (100kHz) GOTO MEJE3 MOVLW 9 MOVWF 23 DECF 22,1 ;prenos: znizaj drugo stevilko MEJE3 MOVLW 0A ;gornja meja tretje stevilke frekvence (100kHz) SUBWF 23,0 BTFSS 3,0 GOTO MEJE4 CLRF 23 INCF 22,1 ;prenos: zvisaj drugo stevilko MEJE4 BTFSS 22,7 ;spodnja meja druge stevilke frekvence (1MHz) GOTO MEJE5 MOVLW 9 MOVWF 22 DECF 21,1 ;prenos: znizaj prvo stevilko MEJE5 MOVLW 0A ;gornja meja druge stevilke frekvence (1MHz) SUBWF 22,0 BTFSS 3,0 GOTO MEJE6 CLRF 22 INCF 21,1 ;prenos: zvisaj prvo stevilko MEJE6 MOVLW 3 ;meje prve stevilke frekvence (10MHz) ANDWF 21,1 BTFSC 25,7 ;spodnja meja squelch CLRF 25 MOVLW 0FC ;gornja meja squelch ADDWF 25,1 BTFSC 3,0 CLRF 25 SUBWF 25,1 BTFSC 26,7 ;spodnja meja volume CLRF 26 MOVLW 0F8 ;gornja meja volume ADDWF 26,1 BTFSC 3,0 CLRF 26 SUBWF 26,1 BTFSC 27,7 ;spodnja meja stikalo jakost CLRF 27 MOVLW 0FF ;gornja meja stikalo jakost ADDWF 27,1 BTFSC 3,0 CLRF 27 SUBWF 27,1 RETURN ;*** Precitaj in izvedi ukaz s tipk *** (0F) TIPKE COMF 6,0 ;precitaj RB4-7 ANDLW 0F0 XORLW 90 ;Vpis v spomin za LEVO+DESNO? BTFSC 3,2 CALL WMEM ;vpisi v spomin COMF 6,0 ;precitaj RB4-7 ANDLW 0F0 MOVF 0F,1 ;prejsnje stanje vse tipke odpuscene? MOVWF 0F BTFSS 3,2 RETURN BTFSS 0F,5 ;Ukaz DOL? GOTO TIPKE1 DECF 0,1 GOTO TIPKE4 TIPKE1 BTFSS 0F,6 ;Ukaz GOR? GOTO TIPKE2 INCF 0,1 GOTO TIPKE4 TIPKE2 BTFSS 0F,4 ;Ukaz DESNO? GOTO TIPKE3 INCF 4,1 RETURN TIPKE3 BTFSS 0F,7 ;Ukaz LEVO? RETURN DECF 4,1 TIPKE4 MOVF 4,0 ;kazalec na spominu? SUBLW 20 BTFSC 3,2 CALL RMEM ;precitaj iz spomina RETURN ;*** Pretvori stevilko v 7-segmentni zapis *** (0C) LCDDEK MOVWF 0C INCF 0C,1 MOVLW 7E ;stevilka 0 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 12 ;stevilka 1 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0BC ;stevilka 2 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0B6 ;stevilka 3 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0D2 ;stevilka 4 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0E6 ;stevilka 5 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0EE ;stevilka 6 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 32 ;stevilka 7 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0FE ;stevilka 8 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0F6 ;stevilka 9 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0FA ;crka A DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0CE ;crka b DECF 0C,1 BTFSC 3,2 RETURN MOVLW 6C ;crka C DECF 0C,1 BTFSC 3,2 RETURN MOVLW 9E ;crka d DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0EC ;crka E DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0A4 ;crtice za napako RETURN ;*** Postavi podatke (10,11,12,13) v LCD pomikalni register *** (0D,0E) LCDDAT MOVF 13,0 ;(13) v pomikalni register MOVWF 0D BTFSS 0E,0 COMF 0D,1 CALL LCDBIT MOVF 12,0 ;(12) v pomikalni register MOVWF 0D BTFSS 0E,0 COMF 0D,1 CALL LCDBIT MOVF 11,0 ;(11) v pomikalni register MOVWF 0D BTFSS 0E,0 COMF 0D,1 CALL LCDBIT MOVF 10,0 ;(10) v pomikalni register MOVWF 0D BTFSS 0E,0 COMF 0D,1 CALL LCDBIT INCF 0E,1 ;obrni fazo za BACKPLANE=RB0 BCF 6,0 BTFSC 0E,0 BSF 6,0 BSF 6,1 ;impulz STROBE=RB1 NOP BCF 6,1 RETURN ;*** Poslji bajt (0D) v LCD pomikalni register *** (0C) LCDBIT MOVLW 8 ;zanka po 8 bitih MOVWF 0C LCDBIT1 BCF 6,2 ;postavi niclo DATA=RB2 RLF 0D,1 ;zavrti register BTFSC 3,0 BSF 6,2 ;postavi enico DATA=RB2 NOP BSF 6,3 ;taktni impulz CLOCK=RB3 NOP BCF 6,3 DECFSZ 0C,1 ;stevec zanke po 8 bitih GOTO LCDBIT1 RETURN ;*** Inicializacija vrat PICa *** INIPIC MOVLW 18 ;zacetno stanje vrat A MOVWF 5 MOVLW 0 ;zacetno stanje vrat B MOVWF 6 BSF 3,5 ;postavi PAGE1 MOVLW 3 ;port A: vhoda RA0-RA1 in izhodi RA2-4 MOVWF 5 ;vpisi TRISA MOVLW 0F0 ;port B: izhodi RB0-3, vhodi RB4-7 MOVWF 6 ;vpisi TRISB BCF 1,7 ;vkljuci /RBPU v OPTION_REG BCF 3,5 ;postavi PAGE0 RETURN ;*** Dvojna zanka cakanja 10ms, ko ne tece meritev *** (0D) CAKAJ MOVLW 96 MOVWF 0D CAKAJ1 CALL CAKAJ2 DECF 0D,1 BTFSS 3,2 GOTO CAKAJ1 RETURN CAKAJ2 MOVLW 14 CAKAJ3 NOP ADDLW 0FF BTFSS 3,2 GOTO CAKAJ3 RETURN ;*** Zacetek komunikacije na I2C vodilu *** ZACI2C BSF 5,4 NOP NOP BSF 5,3 NOP NOP BCF 5,4 NOP NOP BCF 5,3 RETURN ;*** Oddaja bajta iz W na I2C vodilu, potrditev v W *** (0C,0D) TXI2C MOVWF 0C MOVLW 8 MOVWF 0D TXI2C1 BSF 5,4 ;oddaja enega bita podatkov RLF 0C,1 BTFSS 3,0 BCF 5,4 NOP BSF 5,3 ;oddaja taktnega impulza NOP BCF 5,3 DECFSZ 0D,1 ;zanka po 8 podatkovnih bitih GOTO TXI2C1 BSF 5,4 ;oddaja taktnega impulza MOVLW 18 IORWF 5,1 CLRW BTFSC 5,4 ;preveri potrditev sprejema v W MOVLW 0FF BCF 5,3 RETURN ;*** Sprejem bajta na I2C vodilu v W *** (0C,0D) RXI2C MOVLW 8 MOVWF 0D RXI2C1 BSF 5,4 ;sprejem enega bita podatkov MOVLW 18 IORWF 5,1 RLF 0C,1 BCF 0C,0 BTFSC 5,4 BSF 0C,0 BCF 5,3 DECFSZ 0D,1 ;zanka po 8 podatkovnih bitih GOTO RXI2C1 BSF 5,4 ;oddaja taktnega impulza brez potrditve sprejema MOVLW 18 IORWF 5,1 NOP BCF 5,3 MOVF 0C,0 RETURN ;*** Postavi frekvenco in izhodne porte TSA5512 preko I2C *** CMDI2C CALL ZACI2C ;poslji ukaz TSA5512 MOVLW 0C2 CALL TXI2C MOVF 14,0 ;postavi gornji bajt frekvence ANDLW 7F CALL TXI2C MOVF 15,0 ;postavi spodnji bajt frekvence CALL TXI2C MOVLW 8E ;inicializiraj TSA5512 CALL TXI2C MOVF 17,0 ;postavi izhodne porte TSA5512 CALL TXI2C RETURN ;*** Izracunaj vrednost izhodnih vrat TSA5512 *** (17,1A) VRATA CLRF 17 MOVF 25,0 ;squelch uporablja casovnik markerja BTFSC 3,2 GOTO VRATA3 BTFSC 1A,7 GOTO VRATA1 VRATA3 MOVF 26,0 ;precitaj VOL BTFSC 3,2 ;VOL=0 izkljucen? GOTO VRATA1 SUBLW 8 ;obrni polariteto 8-VOL ANDLW 7 IORWF 17,1 BTFSC 17,2 ;ponovi MSB iz P2 na P3 BSF 17,3 MOVF 16,0 ;primerjaj SQL ANDLW 7 ADDWF 25,0 ADDLW 0FB BTFSS 3,0 ;squelch izkljuci NF? GOTO VRATA2 VRATA1 MOVLW 1F ;VOL na min in izklop NF IORWF 17,1 VRATA2 RETURN ;*** Precitaj port TSA5512 v (16) *** (16) STANJE CALL ZACI2C ;precitaj podatke iz TSA5512 MOVLW 0C3 CALL TXI2C CALL RXI2C MOVWF 16 RETURN ;*** Izracunaj modulo deljenja PLLja v (14,15) *** (0C,0D,14,15) MODULO CLRF 14 ;prva stevilka frekvence MOVF 21,0 MOVWF 15 CALL MODULO3 ;pomnozi z 10 CLRF 0C ;druga stevilka frekvence MOVF 22,0 MOVWF 0D CALL MODULO1 ;pristej drugo stevilko CALL MODULO3 ;pomnozi z 10 CLRF 0C ;tretja stevilka frekvence MOVF 23,0 MOVWF 0D CALL MODULO1 ;pristej tretjo stevilko CALL MODULO2 ;pomnozi s 4 CALL MODULO2 CLRF 0C ;cetrta stevilka frekvence MOVF 24,0 MOVWF 0D CALL MODULO1 ;pristej cetrto stevilko MOVLW 26 ;konstanta za 249.000MHz=9960=$26E8 MOVWF 0C MOVLW 0E8 MOVWF 0D CALL MODULO1 ;pristej 249.000MHz RETURN MODULO1 MOVF 0C,0 ;pristej (14,15) vsebino (0C,0D) ADDWF 14,1 MOVF 0D,0 ADDWF 15,1 BTFSC 3,0 INCF 14,1 RETURN MODULO2 MOVF 14,0 ;pomnozi (14,15) z 2 ADDWF 14,1 MOVF 15,0 ADDWF 15,1 BTFSC 3,0 INCF 14,1 RETURN MODULO3 CALL MODULO2 ;pomnozi (14,15) z 10 MOVF 14,0 MOVWF 0C MOVF 15,0 MOVWF 0D CALL MODULO2 CALL MODULO2 CALL MODULO1 RETURN ;*** Izracunaj modulo PLLja za kanal v (14,15) *** (0C,0D,14,15) KANAL BTFSC 21,1 ;kanal 0,1 ali prava frekvenca 2,3? GOTO MODULO ;modulo za pravo frekvenco 320.00-339.97 CLRF 0C ;pocisti zaporedno v (0C) MOVLW 0A ;prva stevilka: zaporedna*10 BTFSC 21,0 ADDWF 0C,1 MOVLW 5 ;druga stevilka: zaporedna*5 BTFSC 22,0 ADDWF 0C,1 MOVF 23,0 ;pristej tretjo stevilko/2 MOVWF 0D RRF 0D,0 ANDLW 7 ADDWF 0C,1 INCF 0C,1 CALL TABELA ;doloci kanal (W) iz zaporedne (0C) BTFSC 24,1 ;cetrta stevilka zniza kanal za 1? ADDLW 0FF CLRF 14 ;pomnozi kanal s 3*2=6 v (14,15) MOVWF 15 ADDWF 15,1 ADDWF 15,1 CALL MODULO2 MOVLW 2B ;konstanta za 278.000MHz=11120=$2B70 MOVWF 0C MOVLW 70 MOVWF 0D CALL MODULO1 ;pristej 278.000MHz RETURN ;*** Tabela GS kanalov iz (0C) v (W) *** TABELA MOVLW 26 ;108.1=334.7=K38=$26 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 22 ;108.3=334.1=K34=$22 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 6 ;108.5=329.5=K6=$6 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0A ;108.7=330.5=K10=$A DECF 0C,1 BTFSC 3,2 RETURN MOVLW 2 ;108.9=329.3=K2=$2 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 10 ;109.1=331.4=K16=$10 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 14 ;109.3=332.0=K20=$14 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 18 ;109.5=332.6=K24=$18 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 1C ;109.7=333.2=K28=$1C DECF 0C,1 BTFSC 3,2 RETURN MOVLW 20 ;109.9=333.8=K32=$20 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 24 ;110.1=334.4=K36=$24 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 28 ;110.3=335.0=K40=$28 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 4 ;110.5=329.6=K4=$4 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 8 ;110.7=330.2=K8=$8 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0C ;110.9=330.8=K12=$0C DECF 0C,1 BTFSC 3,2 RETURN MOVLW 12 ;111.1=331.7=K18=$12 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 16 ;111.3=332.3=K22=$16 DECF 0C,1 BTFSC 3,2 RETURN MOVLW 1A ;111.5=332.9=K26=$1A DECF 0C,1 BTFSC 3,2 RETURN MOVLW 1E ;111.7=333.5=K30=$1E DECF 0C,1 BTFSC 3,2 RETURN MOVLW 0E ;111.9=331.1=K14=$E RETURN ;*** Meritev jakosti 90Hz+150Hz *** (0C,0D,18,19,1E,1F,27) ILSGS MOVLW 0D9 ;vklop meritve? ADDWF 4,0 BTFSC 3,0 GOTO ILSGS1 CLRF 27 ;pobrisi zastavico jakosti CALL CAKAJ RETURN ILSGS1 BSF 6,1 ;izprazni kondenzator s STROBE=RB1 CALL CAKAJ BCF 6,1 CLRF 18 CLRF 19 CLRF 1F ILSGS2 MOVLW 10 ;cakanje zanke citanja casovnih vhodov RA0-1 ILSGS3 ADDLW 0FF BTFSS 3,2 GOTO ILSGS3 MOVF 5,0 ;precitaj RA v (0C) MOVWF 0C MOVF 1F,0 BTFSS 0C,1 ;RA1 izmeri jakost 150Hz MOVWF 18 BTFSS 0C,0 ;RA0 izmeri jakost 90Hz MOVWF 19 INCF 1F,1 BTFSS 3,2 GOTO ILSGS2 MOVF 18,0 ;jakost/2 vsote signalov 90Hz+150Hz v 0C ADDWF 19,0 MOVWF 0C RRF 0C,1 MOVLW 10 ;odmik nicle detektorjev $10=16 !!!!!!!!!!!!!!!!!!!!! SUBWF 0C,1 BTFSS 3,0 CLRF 0C MOVLW 0E8 ;preveri prag jakosti s konstanto $E8=256-24? ADDWF 0C,0 BTFSC 3,0 GOTO ILSGS4 CALL ILSGS7 ;jakost signala v (18) BSF 18,7 ;postavi neveljaven rezultat v (18) RETURN ILSGS4 MOVF 19,0 ;izracunaj razliko/2 150Hz-90Hz V (0D) SUBWF 18,0 MOVWF 0D RRF 0D,0 XORLW 80 MOVWF 0D CLRF 18 ;zanka deljenja razlike z jakostjo CLRF 19 CLRF 1E CLRF 1F ILSGS5 MOVF 0C,0 ;pristevaj jakost (1E,1F) ADDWF 1F,1 BTFSC 3,0 INCF 1E,1 BTFSC 1E,5 GOTO ILSGS6 MOVF 0D,0 ;pristevaj predznaceno razliko (19,18) ADDWF 18,1 BTFSC 3,0 INCF 19,1 BTFSC 0D,7 DECF 19,1 GOTO ILSGS5 ILSGS6 CALL ILSGS7 ;jakost signala v (18) RETURN ILSGS7 RRF 0C,1 ;izracunaj jakost signala v (18) RRF 0C,1 RRF 0C,0 ANDLW 1F MOVWF 18 RETURN ;*** Nastavi konfiguracijo PICa 16F84 *** ORG 2007 ;naslov konfiguracijske besede DW 1A ;CP=OFF, PWRTE=OFF, WDT=OFF, OSC=HS ;*** Nastavi zacetne vrednosti EEPROMa *** ORG 2100 DW 1 ;SQUELCH=1 DW 2 ;VOLUME=2 DW 3 ;spomin0: 330.000 DW 0 DW 0 DW 0 DW 0 ;spomin1: 108.500 DW 8 DW 5 DW 0 DW 0 ;spomin2: 108.900 DW 8 DW 9 DW 0 DW 0 ;spomin3: 109.100 DW 9 DW 1 DW 0 DW 0 ;spomin4: 109.300 DW 9 DW 3 DW 0 DW 0 ;spomin5: 109.500 DW 9 DW 5 DW 0 DW 0 ;spomin6: 109.700 DW 9 DW 7 DW 0 DW 1 ;spomin7: 110.100 DW 0 DW 1 DW 0 DW 1 ;spomin8: 110.300 DW 0 DW 3 DW 0 DW 1 ;spomin9: 110.500 DW 0 DW 5 DW 0 DW 1 ;spominA: 110.950 DW 0 DW 9 DW 2 DW 1 ;spominB: 111.100 DW 1 DW 1 DW 0 DW 1 ;spominC: 111.350 DW 1 DW 3 DW 2 DW 1 ;spominD: 111.500 DW 1 DW 5 DW 0 DW 1 ;spominE: 111.900 DW 1 DW 9 DW 0 END ;*** Konec programa ***