;*** TCAS+transponder - S53MV - 15.07.2006 *** ;*** Uporaba portov PIC 16F88 *** ;RA0 izhod - TX vklop ;RA1 izhod - TX impulzi ;RA2 analogni vhod - MPXA6115A analogni izhod ;RA3 izhod - ISD2560 /CE ;RA4 izhod - ISD2560 PD ;RA5 samo vhod - MB1502 unlock izhod ;RB0 vhod samo prekinitev - LM311 prekinitveni izhod ;RB1 vhod - LCD tipke izhod ;RB2 izhod - LCD clock + MB1502 clock ;RB3 izhod - LCD data + MB1502 data + ISD2560 A0/M0 ;RB4 izhod - LCD strobe ;RB5 izhod - LCD backplane ;RB6 izhod - MB1502 latchenable ;RB7 vhod s spominom - ISD2560 /EOM izhod ;*** Uporaba pomnilnika PIC 16F88 *** ;20 LCDDAT,LCDBIT,LCDDEK,PRIKAZ,LOGADC,RMEM,WMEM,PRTCAS,GRAY,DGRAY,TLAKFL,ALARM ;21 LCDBIT,CAKAJ,PRIKAZ,LOGADC,GRAY,TLAKFL,ALARM ;22 LCDDAT,BACKPL ;23 TIPKE ;24,25,26 GOVOR,ALARM ;27 LOGADC ;2C,2D,2E,2F NAKLUC izvor nakljucnega stevila ;30,31,32,33 LCDDAT,UNLOCK,PRIKAZ,TLAKFL ;30-34 PRTCAS ;40 TCAS izstevanje ;41,42,43,44 TCAS,SPREJEM,DGRAY,PRTCAS sprejeti odgovor +ALARM ;45 TCAS,TXPIKE oznaka TCAS oddaje ;46 TCAS,SPREJEM,ALARM izmerjena zakasnitev ;47,48 DGRAY,PRTCAS sprejeta visina ;49 TCAS stara meritev ;4A TCAS,SPREJEM,DGRAY,PRTCAS sprejeti SPI+X ;70 TIPKE,RWMEM zastavica EEPROM ;71,72,73,74 TIPKE,MEJE,AODDAJ koda ;75 TIPKE,PRTCAS,ALARM,TCAS stikalo 0=izklop/1=A/2=C ;76 TIPKE,MEJE,GRAY stikalo 0=Stby/1=C/2=A/3=E ;77,78,79 TIPKE,MEJE,GRAY,ALARM fl ;7A PREKIN,NAPAKA,INIPIC ;7B AODDAJ,CODDAJ,PLLTST stevec omejitve oddaje ;7C,7D CODDAJ,GRAY ;7E TXPIKE,ADDOAJ,CODDAJ oznaka odgovora ;7F INIPIC,TIPKE,IDENT,ADDOAJ,CODDAJ casovnik za ident ;*** Zacetek programa, tocno 4 ukazi, sledi PREKIN *** LIST P=16F88 ORG 0 CLRF 70 ;pobrisi zastavico beri/vpisi EEPROM CALL RMEM ;zacetne vrednosti spremenljivk CALL INIPIC GOTO GLAVNI ;*** Prekinitveni program (takt 22MHz) *** (7A) ORG 4 PREKIN BTFSC 7A,7 ;TCAS sprejem? GOTO SPREJEM ;1 zakasnitev P1-P2: 11 ukazov, Timpulza=1us NOP ;2 NOP ;3 NOP ;4 NOP ;5 NOP ;6 NOP ;7 NOP ;8 NOP ;9 NOP ;10 BTFSC 6,0 ;preveri "sidelobe suppression" impulz P2 pri 2us GOTO NAPAKA BSF 7A,3 ;zakasnitev P2-P3A: 2+(3*10)-1=31 ukazov BSF 7A,1 PREKIN1 DECFSZ 7A,1 GOTO PREKIN1 BTFSC 6,0 ;preveri "mode A interrogation" impulz P3 pri 8us GOTO AODDAJ BSF 7A,4 ;zakasnitev P3A-P3C: 5+(3*22)-1=70 ukazov BSF 7A,2 BSF 7A,1 NOP NOP PREKIN2 DECFSZ 7A,1 GOTO PREKIN2 BTFSC 6,0 ;preveri "mode C interrogation" impulz P3 pri 21us GOTO CODDAJ BSF 7A,5 ;cudno? zakasnitev 17.4us: 1+(3*32)-1=96 ukazov PREKIN3 DECFSZ 7A,1 GOTO PREKIN3 BCF 0B,1 ;RESET INTF RETFIE ;*** Mrtvi cas cakanja 35us po napacnem vprasanju (takt 22MHz) *** (7A) NAPAKA BSF 7A,6 ;zakasnitev 34.8us: 1+(3*64)-1=192 ukazov NAPAKA1 DECFSZ 7A,1 GOTO NAPAKA1 BCF 0B,1 ;RESET INTF RETFIE ;*** Oddaja odgovora "mode A" (takt 22MHz) *** (71,72,73,74,7B,7E,7F) AODDAJ BSF 5,0 ;vklop oddajnika in zakasnitev cca 3us NOP ;1 NOP ;2 NOP ;3 NOP ;zacetni impulz F1 - 0us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 73,0 ;impulz C1 - 1.45us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 71,0 ;impulz A1 - 2.9us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 73,1 ;impulz C2 - 4.35us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 71,1 ;impulz A2 - 5.8us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 73,2 ;impulz C4 - 7.25us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 71,2 ;impulz A4 - 8.7us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP NOP ;impulz X - 10.15us NOP NOP NOP NOP NOP NOP NOP BTFSC 72,0 ;impulz B1 - 11.6us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 74,0 ;impulz D1 - 13.05us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 72,1 ;impulz B2 - 14.5us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 74,1 ;impulz D2 - 15.95us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 72,2 ;impulz B4 - 17.4us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 74,2 ;impulz D4 - 18.85us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP NOP ;zakljucni impulz F2 - 20.3us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BSF 7E,7 ;zastavica oddaje na LCDju - 21.75us BSF 7E,6 BSF 7E,5 BSF 7E,4 BSF 7E,3 BSF 7E,2 BCF 7E,1 BCF 7E,0 NOP ;23.2us NOP NOP NOP NOP NOP NOP NOP BTFSC 7F,7 ;impulz SPI - 24.65us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP NOP BCF 5,0 ;izklop oddajnika - 26.1us BCF 0B,1 ;RESET INTF DECFSZ 7B,1 ;stevec omejitve oddaje RETFIE RETURN ;*** Oddaja odgovora "mode C" (takt 22MHz) *** (7B,7C,7D,7E,7F) CODDAJ BSF 5,0 ;vklop oddajnika in zakasnitev cca 3us NOP ;1 NOP ;2 NOP ;3 NOP ;zacetni impulz F1 - 0us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7D,2 ;7D bit 2: impulz C1 - 1.45us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7C,5 ;7C bit 5: impulz A1 - 2.9us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7D,1 ;7D bit 1: impulz C2 - 4.35us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7C,4 ;7C bit 4: impulz A2 - 5.8us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7D,0 ;7D bit 0: impulz C4 - 7.25us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7C,3 ;7C bit 3: impulz A4 - 8.7us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP NOP ;impulz X - 10.15us NOP NOP NOP NOP NOP NOP NOP BTFSC 7C,2 ;7C bit 2: impulz B1 - 11.6us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP NOP ;impulz D1 - 13.05us NOP NOP NOP NOP NOP NOP NOP BTFSC 7C,1 ;7C bit 1: impulz B2 - 14.5us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7C,7 ;7C bit 7: impulz D2 - 15.95us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7C,0 ;7C bit 0: impulz B4 - 17.4us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BTFSC 7C,6 ;7C bit 6: impulz D4 - 18.85us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP NOP ;zakljucni impulz F2 - 20.3us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP BSF 7E,7 ;zastavica oddaje na LCDju - 21.75us BSF 7E,6 BSF 7E,5 BSF 7E,4 BSF 7E,3 BSF 7E,2 BCF 7E,1 BCF 7E,0 NOP ;23.2us NOP NOP NOP NOP NOP NOP NOP BTFSC 7F,7 ;impulz SPI - 24.65us BCF 5,1 NOP NOP BSF 5,1 NOP NOP NOP NOP BCF 5,0 ;izklop oddajnika - 26.1us BCF 0B,1 ;RESET INTF DECFSZ 7B,1 ;stevec omejitve oddaje RETFIE RETURN ;*** Inicializacija PICa *** (7E,7F) INIPIC MOVLW 18 ;zacetno stanje RA0-5 00011000 MOVWF 5 MOVLW 0 ;zacetno stanje RB0-7 00000000 MOVWF 6 MOVLW 91 ;FOSC/32, RA2 in ADON MOVWF 1F ;vpisi ADCON0 BSF 3,5 ;postavi PAGE1 MOVLW 0E4 ;port A: vhodi RA2,5-7 in izhodi RA0-1,3-4 MOVWF 5 ;vpisi TRISA MOVLW 83 ;port B: vhodi RB0-1,7 in izhodi RB2-6 MOVWF 6 ;vpisi TRISB MOVLW 4 ;analogni vhod RA2, ostalo digitalno MOVWF 1B ;vpisi ANSEL MOVLW 80 ;ADFM=1, ADCS2=0, VCFG=00 BSF 1F,7 ;vpisi ADCON1 MOVLW 40 ;OPTION: /RBPU, INTEDG MOVWF 1 BCF 3,5 ;postavi PAGE0 MOVLW 30 ;zacetno cakanje TCAS MOVWF 40 CLRF 45 ;pobrisi TXPIKE TCAS CLRF 46 ;pobrisi novo in staro meritev CLRF 49 CLRF 7A ;resetiraj stevec cakanja CLRF 7E ;pobrisi TXPIKE transponder CLRF 7F ;pobrisi IDENT CALL PLLREF ;modulo reference 500kHz CALL PLL1090 ;modulo odgovora 1090MHz CALL CAKAJ ;cakanje 10ms CALL CAKAJ ;cakanje 10ms CALL CAKAJ ;cakanje 10ms BTFSC 5,5 ;preveri uklenitev PLLja? RETURN MOVLW 11 ;preizkus GOVOR ob vklopu - predvaja 17.sporocilo MOVWF 24 RETURN ;*** Glavna zanka programa *** GLAVNI CALL RWMEM ;beri/vpisi EEPROM CALL MEJE ;preveri meje spremenljivk CALL GRAY ;pretvori FL v Gray-evo kodo CALL PRIKAZ ;priprava podatkov prikaza CALL TXPIKE ;zastavica oddaje na LCDju CALL IDENT ;IDENT casovnik in utripanje CALL TCAS ;preklopi frekvence in izmeri TCAS CALL PLLTST ;preveri stanje PLLja CALL LCDDAT ;poslji podatke v pomikalni register CALL DGRAY ;dekodiraj GRAY v FL CALL LOGADC ;logaritemski ADC za FL v mode C CALL CAKAJ ;cakanje 10ms CALL NAKLUC ;izvor nakljucnega stevila CALL ALARM ;govorni alarm na majhni razdalji CALL GOVOR ;TCAS govor ISD2560 CALL TIPKE ;izvedi ukaz s tipk GOTO GLAVNI ;*** Govorni alarm na majhni razdalji *** (20,21,24,46,47,48,75,77,78,79) ALARM BTFSS 5,4 ;vmesnik za GOVOR prost? RETURN MOVF 46,0 ;veljavna meritev razdalje? BTFSC 3,2 RETURN CLRF 20 CALL ALARM1 MOVF 20,0 ADDWF 20,1 MOVF 20,0 ADDWF 20,0 ADDLW 0FD BTFSS 3,0 RETURN MOVWF 24 BTFSS 75,1 ;vkljucen nacin "C"? RETURN BTFSC 47,7 ;visina na razpolago v nacinu "C"? RETURN INCF 24,1 ;dodaj sporocilo "same level" INCF 24,1 CLRF 20 ;izracunaj lastni fl v (20,21) MOVF 77,0 ;stotice MOVWF 21 ;pomnozi z 10 BCF 3,0 RLF 21,1 RLF 21,1 ADDWF 21,1 BCF 3,0 RLF 21,1 MOVF 78,0 ;pristej desetice ADDWF 21,1 MOVF 21,0 ;pomnozi z 10 s prenosom BCF 3,0 RLF 21,1 RLF 20,1 RLF 21,1 RLF 20,1 ADDWF 21,1 BTFSC 3,0 INCF 20,1 BCF 3,0 RLF 21,1 RLF 20,1 MOVF 79,0 ;pristej enice fl s prenosom ADDWF 21,1 BTFSC 3,0 INCF 20,1 MOVF 48,0 ;odstej (47,48) od (20,21) SUBWF 21,1 BTFSS 3,0 DECF 20,1 MOVF 47,0 SUBWF 20,1 MOVLW 5 ;pristej 5 razliki (20,21) ADDWF 21,1 BTFSC 3,0 INCF 20,1 BTFSC 20,7 ;spremeni dodatek v "high"? INCF 24,1 MOVLW 0B ;odstej 11 od razlike (20,21) SUBWF 21,1 BTFSS 3,0 DECF 20,1 BTFSS 20,7 ;spremeni dodatek v "low"? DECF 24,1 RETURN ALARM1 INCF 20,1 ;doloci sporocilo razdalje ADDLW 0F3 ;13 BTFSS 3,0 RETURN INCF 20,1 ;13+5 ADDLW 0FB BTFSS 3,0 RETURN INCF 20,1 ;13+5+11 ADDLW 0F5 BTFSS 3,0 RETURN INCF 20,1 ;13+5+11+12 ADDLW 0F4 BTFSS 3,0 RETURN CLRF 20 RETURN ;*** Prikazi TCAS *** (20,21,22,30-34,41-44,46,47,48,4A,75) PRTCAS BTFSC 22,6 ;menjava izpisa? GOTO PRTCAS6 MOVF 46,0 ;veljaven rezultat? BTFSC 3,2 GOTO PRTCAS6 BTFSS 75,1 ;izpis kode ali fl? GOTO PRTCAS5 CLRF 30 ;crtice za neveljavno visino MOVLW 80 MOVWF 31 MOVWF 32 MOVWF 33 BTFSC 47,7 ;preveri oddajo visine? RETURN MOVF 47,0 MOVWF 32 MOVF 48,0 MOVWF 33 MOVLW 0A ;odstej 10 SUBWF 33,1 BTFSS 3,0 DECF 32,1 BTFSS 32,7 ;negativen fl? GOTO PRTCAS1 MOVLW 80 ;minus MOVWF 31 COMF 33,1 ;obrni predznak INCF 33,1 GOTO PRTCAS3 PRTCAS1 MOVLW 64 ;izracunaj stotice CLRF 31 PRTCAS2 INCF 31,1 SUBWF 33,1 BTFSS 3,0 DECF 32,1 BTFSS 32,7 GOTO PRTCAS2 ADDWF 33,1 DECF 31,0 ADDLW 0F6 ;tisocica? BTFSS 3,0 GOTO PRTCA12 BSF 30,1 BSF 30,4 ADDLW 0F6 PRTCA12 ADDLW 0A CALL LCDDEK MOVWF 31 PRTCAS3 MOVLW 0A ;desetice CLRF 32 PRTCAS4 INCF 32,1 SUBWF 33,1 BTFSS 33,7 GOTO PRTCAS4 ADDWF 33,1 DECF 32,0 CALL LCDDEK MOVWF 32 MOVF 33,0 ;enice CALL LCDDEK MOVWF 33 RETURN PRTCAS5 MOVF 41,0 ;prikazi sprejeto kodo CALL LCDDEK MOVWF 30 MOVF 42,0 CALL LCDDEK MOVWF 31 MOVF 43,0 CALL LCDDEK MOVWF 32 MOVF 44,0 CALL LCDDEK MOVWF 33 RETURN PRTCAS6 MOVF 75,0 ;prikazi stanje in zakasnitev MOVWF 20 MOVLW 7E ;TCAS izklopljen "0" DECF 20,1 BTFSC 3,2 MOVLW 0FA ;TCAS "A" DECF 20,1 BTFSC 3,2 MOVLW 6C ;TCAS "C" MOVWF 30 CLRF 31 CLRF 32 CLRF 33 MOVF 46,0 ;veljaven rezultat? BTFSC 3,2 RETURN MOVF 46,0 ;izracun in izpis izmerjene razdalje ADDLW 0F9 ;odstej zacetek 7 MOVWF 20 BTFSC 3,0 ;minus za negativno? GOTO PRTCAS9 MOVLW 80 MOVWF 31 COMF 20,1 INCF 20,1 PRTCAS9 MOVLW 71 ;konstanta za pretvorbo stevec>>>nm MOVWF 34 CLRF 21 CLRF 32 CLRF 33 PRTCA10 RRF 20,1 ;16-bitni premik v desno RRF 21,1 BCF 20,7 BTFSS 34,7 GOTO PRTCA11 MOVF 20,0 ADDWF 33,1 ;16-bitno pritevanje MOVF 21,0 ADDWF 32,1 BTFSC 3,0 INCF 33,1 PRTCA11 MOVF 34,0 ;8-bitni premik v levo ADDWF 34,1 BTFSS 3,2 GOTO PRTCA10 MOVLW 0A ;izracunaj enice in desetine CLRF 32 PRTCAS7 INCF 32,1 SUBWF 33,1 BTFSC 3,0 GOTO PRTCAS7 ADDWF 33,1 DECF 32,1 MOVLW 0A ;desetica? SUBWF 32,0 BTFSS 3,0 GOTO PRTCAS8 MOVWF 32 MOVLW 12 MOVWF 31 PRTCAS8 MOVF 32,0 ;enice CALL LCDDEK MOVWF 32 MOVF 33,0 ;desetine CALL LCDDEK MOVWF 33 BSF 32,0 ;decimalna pika BTFSC 4A,7 ;prikazi SPI? BSF 31,3 RETURN ;*** Izvor nakljucnega stevila 2**31-1 *** (2C,2D,2E,2F) NAKLUC RLF 2F,1 ;32-bitni pomikalni register RLF 2E,1 RLF 2D,1 RLF 2C,1 BCF 2F,0 MOVLW 1 ;izracunaj povratno vezavo X**31+X**28+1 BTFSC 2C,7 XORWF 2F,1 BTFSC 2C,4 XORWF 2F,1 MOVF 2F,1 ;preveri stanje samih nicel? BTFSS 3,2 RETURN MOVF 2E,1 BTFSS 3,2 RETURN MOVF 2D,1 BTFSS 3,2 RETURN MOVF 2C,1 BTFSS 3,2 RETURN MOVWF 2F ;vrini enico v stanje samih nicel RETURN ;*** Preklopi frekvence in izmeri TCAS *** (2F,40,41-44,45,46,49,4A,75,7A) TCAS DECFSZ 40,1 RETURN MOVF 2F,0 ;nakljucno cakanje 48...111 zank ANDLW 3F ADDLW 30 MOVWF 40 CLRF 41 ;resetiranje rezultata meritve CLRF 42 CLRF 43 CLRF 44 CLRF 46 CLRF 4A MOVF 75,0 ;TCAS vkljucen? BTFSS 3,2 CALL TCAS1 CALL PLLREF ;modulo reference 500kHz CALL PLL1090 ;modulo odgovora 1090MHz CLRF 7A ;resetiraj stevec cakanja CALL CAKPLL ;cakaj vnihanje PLLja RETURN TCAS1 BCF 0B,7 ;izkljuci prekinitve GIE CALL PLLREF ;modulo reference 500kHz CALL PLL1030 ;modulo vprasanja 1030MHz CALL CAKPLL ;cakaj vnihanje PLLja BTFSC 5,5 ;unlock PLLja? RETURN CALL CAKPLL ;cakaj dokoncno iznihanje PLLja BSF 5,0 ;vklop oddajnika + 1.1us MOVLW 0FC ;oznaka TCAS oddaje MOVWF 45 BSF 7A,7 ;preklopi prekinitev na TCAS SPREJEM NOP NOP BCF 5,1 ;prvi impulz 0.8us BSF 5,1 BCF 5,1 BSF 5,1 MOVLW 9 ;"A" zakasnitev 44=(9+2)*4=44 ukazov BTFSC 75,1 MOVLW 1B ;"C" zakasnitev (27+2)*4=116 ukazov MOVWF 46 TCAS2 NOP DECFSZ 46,1 GOTO TCAS2 INCF 46,1 ;zacetna vrednost stevca (46) na 1 BCF 5,1 ;drugi impulz 0.8us BSF 5,1 BCF 5,1 BSF 5,1 MOVLW 0 ;brisi W za izmerjeno zakasnitev NOP NOP BCF 5,0 ;izklop oddajnika (+zakasnitev stikal!!!!) BSF 0B,4 ;vkljuci INTE BCF 0B,1 ;RESET INTF BSF 0B,7 ;vkljuci prekinitve GIE TCAS3 INCFSZ 46,1 ;casovna merilna zanka s stevcem (46) GOTO TCAS3 BCF 0B,7 ;izkljuci prekinitve GIE MOVWF 46 ;izmerjena zakasnitev v (46) MOVF 49,1 ;preveri, ali je stara meritev veljavna? BTFSC 3,2 GOTO TCAS4 SUBWF 49,0 ;primerjava s staro meritvijo razdalje? BTFSS 3,0 SUBLW 0 ADDLW 0FA ;meja +/-5 (+/-0.2nmi) BTFSC 3,0 GOTO TCAS4 MOVF 46,0 ;resi staro (49) in (46) ostane veljaven MOVWF 49 RETURN TCAS4 MOVF 46,0 ;resi staro (49) in brisanje (46) MOVWF 49 CLRF 46 RETURN ;*** Dekodiraj GRAY v FL *** (20,41-44,47,48,4A) DGRAY MOVLW 0FF ;neveljaven rezultat v (47,48) MOVWF 47 MOVWF 48 BTFSC 44,0 ;preveri D1=0? RETURN BTFSC 4A,0 ;preveri X=0? RETURN MOVF 44,0 ;dodaj D2,D4 MOVWF 20 RRF 20,1 RRF 20,1 RLF 48,1 RRF 20,1 RLF 48,1 MOVF 41,0 ;dodaj A1,A2,A4 MOVWF 20 RRF 20,1 RLF 48,1 RRF 20,1 RLF 48,1 RRF 20,1 RLF 48,1 MOVF 42,0 ;dodaj B1,B2,B4 MOVWF 20 RRF 20,1 RLF 48,1 RRF 20,1 RLF 48,1 RRF 20,1 RLF 48,1 MOVLW 1 ;obrni bit 0? BTFSC 48,1 XORWF 48,1 MOVLW 3 ;obrni bita 0,1? BTFSC 48,2 XORWF 48,1 MOVLW 7 ;obrni bite 0-2? BTFSC 48,3 XORWF 48,1 MOVLW 0F ;obrni bite 0-3? BTFSC 48,4 XORWF 48,1 MOVLW 1F ;obrni bite 0-4? BTFSC 48,5 XORWF 48,1 MOVLW 3F ;obrni bite 0-5? BTFSC 48,6 XORWF 48,1 MOVLW 7F ;obrni bite 0-6? BTFSC 48,7 XORWF 48,1 CLRF 47 ;mnozenje s 5 v (47,48) MOVF 48,0 BCF 3,0 RLF 48,1 RLF 47,1 RLF 48,1 RLF 47,1 ADDWF 48,1 BTFSC 3,0 INCF 47,1 MOVF 43,0 ;dekodiranje C1,C2,C4 MOVWF 20 MOVLW 1 ;obrni bit 0 BTFSC 20,1 XORWF 20,1 MOVLW 3 ;obrni bita 0,1 BTFSC 20,2 XORWF 20,1 DECF 20,1 ;popravek za GRAY5 BTFSC 20,2 BCF 20,1 MOVF 20,0 SUBLW 4 ;izlocanje slabega rezultata BTFSS 3,0 MOVLW 0 BTFSC 48,0 ;obrni? SUBLW 4 ADDWF 48,1 ;pristej dekodirano BTFSC 3,0 INCF 47,1 MOVLW 2 ;odstej konstanto 2 SUBWF 48,1 BTFSS 3,0 DECF 47,1 RETURN ;*** Sprejem TCAS odgovora (takt 22MHz) *** (41,42,43,44,45,46) SPREJEM NOP ;zacetna zakasnitev 6 ukazov NOP ;2 NOP ;3 NOP ;4 NOP ;5 NOP ;6 BTFSC 6,0 ;impulz C1 - 1.45us BSF 43,0 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz A1 - 2.9us BSF 41,0 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz C2 - 4.35us BSF 43,1 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz A2 - 5.8us BSF 41,1 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz C4 - 7.25us BSF 43,2 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz A4 - 8.7us BSF 41,2 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz X - 10.15us BSF 4A,0 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz B1 - 11.6us BSF 42,0 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz D1 - 13.05us BSF 44,0 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz B2 - 14.5us BSF 42,1 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz D2 - 15.95us BSF 44,1 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz B4 - 17.4us BSF 42,2 NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz D4 - 18.85us BSF 44,2 NOP NOP NOP NOP NOP BCF 0B,1 ;RESET INTF BTFSS 6,0 ;preveri zakljucni impulz F2 - 20.3us RETURN NOP NOP NOP NOP NOP NOP NOP ;21.75us NOP NOP NOP NOP NOP NOP NOP NOP ;23.2us NOP NOP NOP NOP NOP NOP NOP BTFSC 6,0 ;impulz SPI - 24.65us BSF 4A,7 MOVF 46,0 ;izmerjena zakasnitev BCF 0B,1 ;RESET INTF RETURN ;*** Cakaj vnihanje PLLja okoli 0.5ms *** (21) CAKPLL MOVLW 9 MOVWF 21 CAKPLL1 CALL CAKPLL2 DECF 21,1 BTFSS 3,2 GOTO CAKPLL1 RETURN CAKPLL2 MOVLW 4B CAKPLL3 NOP ADDLW 0FF BTFSS 3,2 GOTO CAKPLL3 RETURN ;*** Unlock PLLja na LCD *** (30,31,32,76,7B) PLLTST MOVLW 18 ;povecaj stevec omejitve oddaje za 24=$18 ADDWF 7B,0 BTFSC 3,0 MOVLW 0FF MOVWF 7B MOVF 76,1 ;standby prva pika in izklop BTFSC 3,2 GOTO PLLTST2 BTFSC 5,5 ;unlock PLLja tri pike in izklop GOTO PLLTST1 BSF 0B,4 ;vkljuci INTE BTFSC 0B,7 ;GIE ze vkljucen? RETURN BCF 0B,1 ;RESET INTF BSF 0B,7 ;vkljuci prekinitve GIE RETURN PLLTST1 BSF 32,0 ;tri pikice na LCDju pri napaki PLLja BSF 31,0 PLLTST2 BSF 30,0 ;ena (prva) pikica na LCDju pri Stby BCF 0B,7 ;izkljuci prekinitve GIE v slucaju napake BCF 5,0 ;izklop oddajnika in impulzov BSF 5,1 RETURN ;*** IDENT casovnik in utripanje *** (22,7F,30-33) IDENT BTFSS 7F,7 ;IDENT? RETURN MOVLW 1 ;utripanje vseh stevilk LCDja brez pikic BTFSS 22,4 MOVLW 0FF BTFSS 22,5 MOVLW 0FF ANDWF 30,1 ANDWF 31,1 ANDWF 32,1 ANDWF 33,1 MOVF 22,0 ;BACKPLANE takt/16 ANDLW 0F BTFSC 3,2 INCF 7F,1 RETURN ;*** Zastavica oddaje na LCDju *** (31,33,45,7E) TXPIKE BTFSS 45,7 GOTO TXPIKE1 BSF 31,0 ;srednja pika na LCD INCF 45,1 TXPIKE1 BTFSS 7E,7 RETURN BSF 33,0 ;dvopicje na LCD INCF 7E,1 RETURN ;*** Preizkus A/D pretovrnika vhod RA2 *** (20,21,27,76,77,78,79) LOGADC BTFSC 76,1 ;vkljucen ADC? RETURN INCF 27,1 ;vsakih 7 glavnih zank (vsakih 70ms) MOVLW 7 SUBWF 27,0 BTFSS 3,0 RETURN CLRF 27 MOVF 1E,0 ;precitaj ADC v (20,21) MOVWF 20 BSF 3,5 ;postavi PAGE1 MOVF 1E,0 BCF 3,5 ;postavi PAGE0 MOVWF 21 BSF 1F,2 ;zacni naslednjo novo pretvorbo CALL TLAKFL ;logaritemska pretvorba v FL CLRF 77 ;pretvorba v BCD (77,78,79) CLRF 78 CLRF 79 MOVLW 64 ;stotice LOGADC1 INCF 77,1 SUBWF 21,1 BTFSS 3,0 DECF 20,1 BTFSS 20,7 GOTO LOGADC1 DECF 77,1 ADDWF 21,1 MOVLW 0A ;desetice LOGADC2 INCF 78,1 SUBWF 21,1 BTFSC 3,0 GOTO LOGADC2 DECF 78,1 ADDWF 21,0 ;enice MOVWF 79 RETURN ;*** Logaritemska pretvorba v FL *** (20,21,30-33) TLAKFL COMF 20,0 ;odstej od odmika 870=$367-1 ADDLW 3 MOVWF 30 COMF 21,0 ADDLW 67 BTFSC 3,0 INCF 30,1 MOVWF 31 RLF 31,1 ;pomnozi vrednost s 4 RLF 30,1 RLF 31,1 RLF 30,1 BCF 31,0 BCF 31,1 CLRF 20 ;pobrisi rezultat CLRF 21 BTFSC 30,7 ;izhod za negativen rezultat RETURN CALL TLAKFL1 CLRF 30 MOVWF 32 ;interpolacijski dodatek CLRF 33 TLAKFL3 RRF 32,1 ;deli dodatek z 2 RRF 33,1 BCF 32,7 BTFSC 31,7 CALL TLAKFL2 MOVF 31,0 ;premakni mnozitelj v levo ADDWF 31,1 BTFSS 3,2 ;konec s samimi niclami? GOTO TLAKFL3 RETURN TLAKFL2 MOVF 32,0 ;pristeje (32,33) vsoti (20,21,30) ADDWF 21,1 BTFSC 3,0 INCF 20,1 MOVF 33,0 ADDWF 30,1 BTFSS 3,0 RETURN INCF 21,1 BTFSC 3,2 INCF 20,1 RETURN TLAKFL1 INCF 30,1 ;zacetek FL-10, vrne odsek (20,21) in korak (W) MOVLW 13 ;+19>FL009 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 14 ;+20>FL029 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 15 ;+21>FL050 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 18 ;+24>FL074 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 1A ;+26>FL100 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 1C ;+28>FL128 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 1F ;+31>FL159 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 24 ;+36>FL195 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 2A ;+42>FL237 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 30 ;+48>FL285 DECF 30,1 BTFSC 3,2 RETURN INCF 20,1 ;prenos!!! ADDWF 21,1 MOVLW 3B ;+59>FL344 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 4C ;+76>FL420 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 MOVLW 69 ;+105>FL525 DECF 30,1 BTFSC 3,2 RETURN INCF 20,1 ;prenos!!! ADDWF 21,1 MOVLW 0AE ;+174>FL699 DECF 30,1 BTFSC 3,2 RETURN ADDWF 21,1 RETURN ;*** Precitaj kodo iz EEPROMa *** (20,71-78) RMEM MOVLW 71 ;kazalec v RAMu MOVWF 4 BSF 3,6 ;postavi PAGE2 CLRF 0D ;kazalec v EEPROMu MOVLW 9 ;prepisi 9 bajtov MOVWF 20 RMEM4 CALL RMEM1 DECFSZ 20,1 GOTO RMEM4 BCF 3,6 ;postavi PAGE0 MOVLW 70 ;kazalec v RAMu MOVWF 4 RETURN RMEM1 BSF 3,5 ;postavi PAGE3 - precitaj bajt in povecaj stevca BCF 0C,7 ;EECON1 EEPGD BSF 0C,0 ;EECON1 RD BCF 3,5 ;postavi PAGE2 MOVF 0C,0 MOVWF 0 INCF 4,1 ;povecaj stevca INCF 0D,1 RETURN ;*** Vpisi kodo v EEPROM *** (20,71-78) WMEM MOVLW 71 ;kazalec v RAMu MOVWF 4 BSF 3,6 ;postavi PAGE2 CLRF 0D ;kazalec v EEPROMu MOVLW 9 ;prepisi 9 bajtov MOVWF 20 WMEM4 CALL WMEM1 DECFSZ 20,1 GOTO WMEM4 BCF 3,6 ;postavi PAGE0 MOVLW 70 ;kazalec v RAMu MOVWF 4 RETURN WMEM1 BSF 3,5 ;postavi PAGE3 - primerjaj vsebino EEPROMa BCF 0C,7 ;EECON1 EEPGD BSF 0C,0 ;EECON1 RD BCF 3,5 ;postavi PAGE2 MOVF 0C,0 SUBWF 0,0 BTFSC 3,2 GOTO WMEM3 MOVF 0,0 ;razlika - vpisi novo vsebino v EEPROM MOVWF 0C BSF 3,5 ;postavi PAGE3 BCF 0C,7 ;EECON1 EEPGD BSF 0C,2 ;EECON1 WREN set MOVLW 55 MOVWF 0D ;EECON2 55 MOVLW 0AA MOVWF 0D ;EECON2 0AA BSF 0C,1 ;EECON1 WR WMEM2 BTFSC 0C,1 ;EECON1 WR test GOTO WMEM2 BCF 0C,2 ;EECON1 WREN reset BCF 3,5 ;postavi PAGE2 WMEM3 INCF 4,1 ;povecaj stevca INCF 0D,1 RETURN ;*** Beri/vpisi EEPROM *** (70) RWMEM MOVF 70,1 ;zastavica postavljena? BTFSC 3,2 RETURN BCF 0B,7 ;prepreci prekinitve BTFSC 70,7 ;beri EEPROM? CALL RMEM BTFSS 70,7 ;vpisi EEPROM? CALL WMEM CLRF 70 ;pobrisi zastavico RETURN ;*** Prikaz kode (71,72,73,74) ali FL (76,77,78,79) *** (4,20,21,22,30-33,70-79) PRIKAZ MOVLW 08B ;prikaz kode ali ALTstikala+FL? ADDWF 4,0 BTFSC 3,0 GOTO PRIKAZ1 MOVF 71,0 ;prva stevilka kode CALL LCDDEK MOVWF 30 MOVF 72,0 ;druga stevilka kode CALL LCDDEK MOVWF 31 MOVF 73,0 ;tretja stevilka kode CALL LCDDEK MOVWF 32 MOVF 74,0 ;cetrta stevilka kode CALL LCDDEK MOVWF 33 MOVLW 71 ;naslov prvega znaka - prva stevilka kode GOTO PRIKAZ6 PRIKAZ1 BTFSC 3,2 ;prikazi TCAS? GOTO PRTCAS MOVF 76,0 ;prikazi stikalo Stby/C/A/E MOVWF 20 MOVLW 0 ;stikalo Stby DECF 20,1 BTFSC 3,2 MOVLW 6C ;stikalo C DECF 20,1 BTFSC 3,2 MOVLW 0FA ;stikalo A DECF 20,1 BTFSC 3,2 MOVLW 0EC ;stikalo E MOVWF 30 MOVF 77,0 ;odstej -10 od desetic FL za prikaz na LCDju MOVWF 20 MOVF 78,0 MOVWF 21 DECF 21,1 BTFSS 21,7 ;prenos na stotice FL? GOTO PRIKAZ2 DECF 20,1 MOVLW 0A ADDWF 21,1 PRIKAZ2 BTFSC 20,7 ;preveri negativen FL? GOTO PRIKAZ3 MOVF 20,0 ;stotice pozitivni FL CALL LCDDEK MOVWF 31 MOVF 21,0 ;desetice pozitivini FL CALL LCDDEK MOVWF 32 MOVF 79,0 ;enice stevilka pozitivni FL CALL LCDDEK MOVWF 33 GOTO PRIKAZ5 PRIKAZ3 MOVLW 80 ;minus za negativni FL MOVWF 31 MOVLW 1 MOVWF 21 MOVF 79,0 BTFSC 3,2 ;posebnost FL=-10? GOTO PRIKAZ4 SUBLW 0A CLRF 21 PRIKAZ4 CALL LCDDEK ;enice negativni FL MOVWF 33 MOVF 21,0 CALL LCDDEK ;desetice negativni FL MOVWF 32 PRIKAZ5 MOVLW 76 ;naslov prvega znaka - stikala PRIKAZ6 BTFSS 22,4 ;utripanje znaka, ki se ga nastavlja gor/dol? RETURN SUBWF 4,0 ;prvi znak? BTFSC 3,2 CLRF 30 ADDLW 0FF ;drugi znak? BTFSC 3,2 CLRF 31 ADDLW 0FF ;tretji znak? BTFSC 3,2 CLRF 32 ADDLW 0FF ;cetrti znak? BTFSC 3,2 CLRF 33 RETURN ;*** Preveri meje kazalca in kode *** (4,71,72,73,74,75,76,77,78,79) MEJE MOVLW 090 ;spodnja meja kazalca ADDWF 4,1 BTFSS 3,0 CLRF 4 SUBWF 4,1 MOVLW 087 ;gornja meja kazalca (mode C ne nastavlja FL) BTFSS 76,1 MOVLW 08A ADDWF 4,1 BTFSC 3,0 CLRF 4 SUBWF 4,1 MOVLW 7 ;meje prve stevilke kode ANDWF 71,1 MOVLW 7 ;meje druge stevilke kode ANDWF 72,1 MOVLW 7 ;meje tretje stevilke kode ANDWF 73,1 MOVLW 7 ;meje cetrte stevilke kode ANDWF 74,1 BTFSS 79,7 ;spodnja meja tretje (zadnje) stevilke FL (100ft) GOTO MEJE1 MOVLW 9 MOVWF 79 DECF 78,1 ;prenos: znizaj drugo stevilko MEJE1 MOVLW 0A ;gornja meja tretje (zadnje) stevilke FL (100ft) SUBWF 79,0 BTFSS 3,0 GOTO MEJE2 CLRF 79 INCF 78,1 ;prenos: zvisaj drugo stevilko MEJE2 BTFSS 78,7 ;spodnja meja druge stevilke FL (1kft) GOTO MEJE3 MOVLW 9 MOVWF 78 DECF 77,1 ;prenos: znizaj prvo stevilko MEJE3 MOVLW 0A ;gornja meja druge stevilke FL (1kft) SUBWF 78,0 BTFSS 3,0 GOTO MEJE4 CLRF 78 INCF 77,1 ;prenos: zvisaj prvo stevilko MEJE4 BTFSS 77,7 ;spodnja meja prve stevilke FL (10kft) GOTO MEJE5 CLRF 77 ;postavi FL 000-10 CLRF 78 CLRF 79 MEJE5 MOVLW 0A ;gornja meja prve stevilke FL (10kft) SUBWF 77,0 BTFSS 3,0 GOTO MEJE6 MOVLW 9 ;postavi FL 999-10 MOVWF 77 MOVWF 78 MOVWF 79 MEJE6 BTFSC 76,7 ;spodnja meja stikala 0 CLRF 76 MOVLW 0FC ;gornja meja stikala 3 ADDWF 76,0 BTFSS 3,0 GOTO MEJE7 MOVLW 3 MOVWF 76 MEJE7 BTFSC 75,7 ;spodnja meja TCAS 0 CLRF 75 MOVLW 0FD ;gornja meja TCAS 2 ADDWF 75,0 BTFSS 3,0 GOTO MEJE8 MOVLW 2 MOVWF 75 MEJE8 RETURN ;*** Precitaj in izvedi ukaz s tipk *** (23,7F) TIPKE CALL BERTIP ;precitaj tipke XORLW 9 ;IDENT za LEVO+DESNO? BTFSS 3,2 GOTO TIPKE5 MOVLW 0A0 MOVWF 7F RETURN TIPKE5 XORLW 9 ;popravi tipke MOVF 23,1 ;prejsnje stanje vse tipke odpuscene? MOVWF 23 BTFSS 3,2 RETURN BTFSS 23,1 ;Ukaz DOL? GOTO TIPKE1 DECF 0,1 RETURN TIPKE1 BTFSS 23,2 ;Ukaz GOR? GOTO TIPKE2 INCF 0,1 RETURN TIPKE2 BTFSS 23,0 ;Ukaz DESNO? GOTO TIPKE3 INCF 4,1 RETURN TIPKE3 BTFSS 23,3 ;Ukaz LEVO? RETURN DECF 4,1 RETURN ;*** Krmiljenje govornega cipa ISD2560 *** (24,25,26) GOVOR INCF 26,1 ;vsake 3 glavne zanke (vsakih 30ms) MOVLW 3 SUBWF 26,0 BTFSS 3,0 RETURN CLRF 26 BTFSS 5,4 ;PD postavljen? GOTO GOVOR1 MOVF 24,0 ;nov ukaz? BTFSC 3,2 RETURN BCF 5,4 ;zagon PD RETURN GOVOR1 MOVF 24,0 ;nicla - predvajanje! BTFSC 3,2 GOTO GOVOR2 BSF 6,3 ;A0/M0=1 za preskok DECF 24,1 BTFSC 3,2 BCF 6,3 ;A0/M0=0 za predvajanje NOP ;ISD impulz /CE z zakasnitvami NOP NOP NOP BCF 5,3 NOP NOP NOP NOP BSF 5,3 CLRF 25 ;resetiraj kuzapazija (25) BCF 0B,0 ;resetiraj RBIF v INTCON RETURN GOVOR2 DECF 25,1 ;cakanje kuzapazija (25) BTFSC 3,2 BSF 5,4 ;konec - izklop PD BTFSC 0B,0 ;cakanje na konec RBIF BSF 5,4 ;konec - izklop PD RETURN ;*** Programiranje reference 500kHz za kristal 8MHz *** PLLREF BSF 6,3 ;SW=1=64/65 CALL TAKT BCF 6,3 ;R=16='00 0000 0001 0000' CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT BSF 6,3 CALL TAKT BCF 6,3 CALL TAKT CALL TAKT CALL TAKT CALL TAKT BSF 6,3 ;control=1 CALL TAKT CALL LATCH RETURN ;*** Programiranje modulo 1030*2=(64*32)+12 *** PLL1030 BCF 6,3 ;N=32='000 0010 0000' CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT BSF 6,3 CALL TAKT BCF 6,3 CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT BCF 6,3 ;A=12='000 1100' CALL TAKT CALL TAKT CALL TAKT BSF 6,3 CALL TAKT CALL TAKT BCF 6,3 CALL TAKT CALL TAKT BCF 6,3 ;control=0 CALL TAKT CALL LATCH RETURN ;*** Programiranje modulo 1090*2=(64*34)+4 *** PLL1090 BCF 6,3 ;N=17='000 0010 0010' CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT BSF 6,3 CALL TAKT BCF 6,3 CALL TAKT CALL TAKT CALL TAKT BSF 6,3 CALL TAKT BCF 6,3 CALL TAKT BCF 6,3 ;A=4='000 0100' CALL TAKT CALL TAKT CALL TAKT CALL TAKT BSF 6,3 CALL TAKT BCF 6,3 CALL TAKT CALL TAKT BCF 6,3 ;control=0 CALL TAKT CALL LATCH RETURN ;*** Latch enable za MB1502 *** LATCH NOP NOP NOP NOP BSF 6,6 NOP NOP NOP NOP BCF 6,6 RETURN ;*** Postavi podatke (30,31,32,33) v LCD pomikalni register *** (21,22) LCDDAT MOVF 33,0 ;(33) v pomikalni register MOVWF 21 BTFSS 22,0 COMF 21,1 CALL LCDBIT MOVF 32,0 ;(32) v pomikalni register MOVWF 21 BTFSS 22,0 COMF 21,1 CALL LCDBIT MOVF 31,0 ;(31) v pomikalni register MOVWF 21 BTFSS 22,0 COMF 21,1 CALL LCDBIT MOVF 30,0 ;(30) v pomikalni register MOVWF 21 BTFSS 22,0 COMF 21,1 CALL LCDBIT CALL BACKPL CALL STROBE RETURN ;*** Poslji bajt (21) v LCD pomikalni register *** (20,21) LCDBIT MOVLW 8 ;zanka po 8 bitih MOVWF 20 LCDBIT1 BCF 6,3 ;postavi niclo DATA=RB3 RLF 21,1 ;zavrti register BTFSC 3,0 BSF 6,3 ;postavi enico DATA=RB3 CALL TAKT DECFSZ 20,1 ;stevec zanke po 8 bitih GOTO LCDBIT1 RETURN ;*** Takt za LCD + MB1502 *** TAKT NOP NOP NOP NOP BSF 6,2 NOP NOP NOP NOP BCF 6,2 RETURN ;*** Strobe za LCD *** STROBE NOP NOP NOP NOP BSF 6,4 NOP NOP NOP NOP BCF 6,4 RETURN ;*** Obrni fazo za BACKPLANE=RB5 *** (22) BACKPL INCF 22,1 BCF 6,5 BTFSC 22,0 BSF 6,5 RETURN ;*** Preberi tipke v W *** BERTIP MOVLW 0 CALL TAKT8 ;vrini vsaj 30 nicel CALL TAKT8 CALL TAKT8 CALL TAKT8 BSF 6,3 ;vrini 2 enici in 6 nicel za veljavno tipko CALL TAKT8 BTFSS 6,1 ;tipka LEVO? IORLW 8 CALL TAKT8 ;vrini 8 nicel BTFSS 6,1 ;tipka GOR? IORLW 4 CALL TAKT8 ;vrini 8 nicel BTFSS 6,1 ;tipka DOL? IORLW 2 CALL TAKT8 ;vrini 8 nicel BTFSS 6,1 ;tipka DESNO? IORLW 1 RETURN ;*** Zaporedje 8 taktov s 2 niclami na koncu *** TAKT8 CALL TAKT CALL TAKT BCF 6,3 CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT CALL TAKT RETURN ;*** Pretvori stevilko v 7-segmentni zapis *** (20) LCDDEK MOVWF 20 INCF 20,1 MOVLW 7E ;stevilka 0 DECF 20,1 BTFSC 3,2 RETURN MOVLW 12 ;stevilka 1 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0BC ;stevilka 2 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0B6 ;stevilka 3 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0D2 ;stevilka 4 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0E6 ;stevilka 5 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0EE ;stevilka 6 DECF 20,1 BTFSC 3,2 RETURN MOVLW 32 ;stevilka 7 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0FE ;stevilka 8 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0F6 ;stevilka 9 DECF 20,1 BTFSC 3,2 RETURN MOVLW 0FA ;crka A DECF 20,1 BTFSC 3,2 RETURN MOVLW 0CE ;crka b DECF 20,1 BTFSC 3,2 RETURN MOVLW 6C ;crka C DECF 20,1 BTFSC 3,2 RETURN MOVLW 9E ;crka d DECF 20,1 BTFSC 3,2 RETURN MOVLW 0EC ;crka E DECF 20,1 BTFSC 3,2 RETURN MOVLW 0E8 ;crka F DECF 20,1 BTFSC 3,2 RETURN MOVLW 0A4 ;crtice za napako RETURN ;*** Dvojna zanka cakanja 10ms *** (21) CAKAJ MOVLW 88 MOVWF 21 CAKAJ1 CALL CAKAJ2 DECF 21,1 BTFSS 3,2 GOTO CAKAJ1 RETURN CAKAJ2 MOVLW 4B CAKAJ3 NOP ADDLW 0FF BTFSS 3,2 GOTO CAKAJ3 RETURN ;*** Pretvori FL v Gray-evo kodo *** (20,21,76-79,7C,7D) GRAY BTFSC 76,0 ;ALT stikalo A ali E/C? GOTO GRAY1 CLRF 7C ;ALT stikalo A - pobrisi vse podatke CLRF 7D RETURN GRAY1 MOVF 77,0 ;izracunaj FL/5 (An,Bn,Dn) v 20 MOVWF 20 BCF 3,0 ;pomnozi prvo stevilko FL z 10 RLF 20,1 RLF 20,1 ADDWF 20,1 RLF 20,1 MOVF 78,0 ;pristej drugo stevilko FL ADDWF 20,1 RLF 20,1 ;pomnozi vsoto z 2 MOVLW 2 ;tretja stevilka+2 v 21 (zamik -200ft) ADDWF 79,0 MOVWF 21 MOVLW 0A ;prenos tretje stevilke >9? SUBWF 21,0 BTFSS 3,0 GOTO GRAY2 MOVWF 21 ;tretja stevilka -10 INCF 20,1 ;pristej prenos +2 v 20 INCF 20,1 GRAY2 MOVLW 5 ;preveri tretja stevilka >=5? SUBWF 21,0 BTFSS 3,0 GOTO GRAY3 MOVF 21,0 ;obrni tretjo stevilko v 21 SUBLW 9 MOVWF 21 INCF 20,1 ;pristej prenos +1 v 20 GRAY3 MOVLW 2 ;popravi vsebino 21 za okrnjeni Gray(5) BTFSC 21,2 ADDWF 21,1 INCF 21,1 MOVLW 3 ;Gray pretvorba 21 bita 1-0 BTFSC 21,2 XORWF 21,1 MOVLW 1 ;Gray pretvorba 21 bit 0 BTFSC 21,1 XORWF 21,1 MOVLW 7F ;Gray pretvorba 20 biti 6-0 BTFSC 20,7 XORWF 20,1 MOVLW 3F ;Gray pretvorba 20 biti 5-0 BTFSC 20,6 XORWF 20,1 MOVLW 1F ;Gray pretvorba 20 biti 4-0 BTFSC 20,5 XORWF 20,1 MOVLW 0F ;Gray pretvorba 20 biti 3-0 BTFSC 20,4 XORWF 20,1 MOVLW 7 ;Gray pretvorba 20 biti 2-0 BTFSC 20,3 XORWF 20,1 MOVLW 3 ;Gray pretvorba 20 bita 1-0 BTFSC 20,2 XORWF 20,1 MOVLW 1 ;Gray pretvorba 20 bit 0 BTFSC 20,1 XORWF 20,1 MOVF 20,0 ;postavi impulze v 7C,7D MOVWF 7C MOVF 21,0 MOVWF 7D RETURN ;*** Nastavi konfiguracijo PICa 16F88 *** ORG 2007 ;naslov konfiguracijske besede DW 2942 ;CP=OFF, CCPMX=RB3, DEBUG=OFF, WRT=0000-0FFF, ; CPD=OFF, LVP=OFF, BOREN=ON, MCLRE=OFF, PWRTEN=ON, OSC=HS ;*** Nastavi zacetne vrednosti EEPROMa *** ORG 2100 DW 7 ;koda 7777 DW 7 DW 7 DW 7 DW 0 ;TCAS 0 DW 2 ;ALT A DW 0 ;FL 010 DW 2 DW 0 END ;*** Konec programa ***