include include __CONFIG _PWRTE_ON & _WDT_OFF & _XT_OSC & _CP_OFF ;-------------------------------------------------------------------------- org 0x2100 ; tabulka v pameti EEPROM (64 bytu) de 0x00, 0x05, 0x05, 0x02, 0x05, 0x05, 0x00, 0xFF ; VFA de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0x00, 0x05, 0x07, 0x05, 0x07, 0x05, 0x00, 0xFF ; VFB de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF de 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF ; Vrit de 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF org 0 Start clrf STATUS ; Do initialization, Select bank 0 clrf INTCON ; Clear int-flags, Disable interrupts clrf PCLATH ; Keep in lower 2KByte clrf R3 clrf NUM6 clrf NUM1 clrf NUM0 movlw 5 movwf NUM5 movwf NUM4 movwf NUM2 movlw 2 movwf NUM3 clrf ResB clrf LowB clrf MidB clrf HigB clrf SW99 clrf SW98 clrf MOD movlw 3 movwf KROK bsf STATUS,RP0 movlw b'00011000' ; RA0..RA2 outputs movwf TRISA ; RA3,RA4 input movlw b'01111110' ; RB0,RB7 output, rest inputs movwf TRISB bsf OPTION_REG,NOT_RBPU ; Disable PORTB pull-ups bcf STATUS,RP0 clrwdt ;+---------------------------------------------------------------------+ ;| Set DDS to serial mode | ;+---------------------------------------------------------------------+ movlw 010h movwf HigB call SetDDS call Delay call SetDDS call Delay clrf HigB movlw 4 movwf MXKROK movlw 3 movwf MKROK goto Entry ;+---------------------------------------------------------------------+ ;| Tables of 3 bytes constants | ;+---------------------------------------------------------------------+ ;| Increment/decrement values | ;+---------------------------------------------------------------------+ Decades addwf PCL,F ; W + PCL -> PCL include ; table is included for convenience VRX addwf PCL,F retlw 0xE0 retlw 0xB0 retlw 0xE0 retlw 0xB0 VTX addwf PCL,F retlw 0xD0 retlw 0x70 retlw 0x70 retlw 0xD0 ;----------------------------------------------------------------------- ; prenos VFA to NUM ;----------------------------------------------------------------------- VFAtoN clrf INDEX aton movf INDEX,W movwf EADR call EE_read movwf Help movlw NUM0 addwf INDEX,W movwf FSR movf Help,W movwf INDF incf INDEX,F ; increment pointer movlw 7 bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure goto aton ;----------------------------------------------------------------------- ; prenos VFB to NUM ;----------------------------------------------------------------------- VFBtoN clrf INDEX bton movlw 0x10 addwf INDEX,W movwf EADR call EE_read movwf Help movlw NUM0 addwf INDEX,W movwf FSR movf Help,W movwf INDF incf INDEX,F ; increment pointer movlw 7 bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure goto bton ;----------------------------------------------------------------------- ; prenos Vrit to NUM ;----------------------------------------------------------------------- VrittoN clrf INDEX cton movlw 0x20 addwf INDEX,W movwf EADR call EE_read movwf Help movlw NUM0 addwf INDEX,W movwf FSR movf Help,W movwf INDF incf INDEX,F ; increment pointer movlw 7 bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure goto cton ;----------------------------------------------------------------------- ; prenos NUM to VFA ;----------------------------------------------------------------------- NtoVFA clrf INDEX nta movlw NUM0 addwf INDEX,W movwf FSR movf INDF,W movwf Help movf INDEX,W movwf EADR call EE_write incf INDEX,F ; increment pointer movlw 7 bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure goto nta ;----------------------------------------------------------------------- ; prenos NUM to VFB ;----------------------------------------------------------------------- NtoVFB clrf INDEX ntb movlw NUM0 addwf INDEX,W movwf FSR movf INDF,W movwf Help movlw 0x10 addwf INDEX,W movwf EADR call EE_write incf INDEX,F ; increment pointer movlw 7 bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure goto ntb ;----------------------------------------------------------------------- ; prenos NUM to Vrit ;----------------------------------------------------------------------- NtoVrit clrf INDEX ntc movlw NUM0 addwf INDEX,W movwf FSR movf INDF,W movwf Help movlw 0x20 addwf INDEX,W movwf EADR call EE_write incf INDEX,F ; increment pointer movlw 7 bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure goto ntc ;+---------------------------------------------------------------------+ ;| Addition of two 4-byte numbers, takes CARRY into account... | ;| | ;| ResB + R_B -> ResB | ;| LowB + L_B -> LowB | ;| MidB + M_B -> MidB | ;| HigB + H_B -> HigB | ;| | ;+---------------------------------------------------------------------+ Add32 clrf TEMP ; prepare storage for C movf R_B,W ; in W is lowest byte of 1. number bcf STATUS,C ; clear C addwf ResB,F ; R_B + ResB -> ResB btfss STATUS,C ; goto AddSecond ; if not overflowed then jump bcf STATUS,C ; clear C movlw 1 ; carry to higher order addwf LowB,F ; increment LowB btfss STATUS,C goto AddSecond ; if not overflowed then jump bcf STATUS,C movlw 1 addwf MidB,F ; Increment MidB btfss STATUS,C goto AddSecond ; if not overflowed then jump bcf STATUS,C movlw 1 addwf HigB,F ; Increment HigB btfss STATUS,C goto AddSecond ; if not overflowed then jump bsf TEMP,C ; save overflow bite AddSecond movf L_B,W ; into W 2nd byte bcf STATUS,C addwf LowB,F ; L_B + LowB -> LowB btfss STATUS,C goto AddThird bcf STATUS,C movlw 1 addwf MidB,F ; Increment MidB btfss STATUS,C goto AddThird bcf STATUS,C movlw 1 addwf HigB,F ; Increment HigB btfss STATUS,C goto AddThird bsf TEMP,C AddThird movf M_B,W ; into W 3rd byte bsf STATUS,C addwf MidB,F ; M_B + MidB -> MidB, btfss STATUS,C goto AddForth bcf STATUS,C movlw 1 addwf HigB,F ; Increment HigB btfss STATUS,C goto AddForth bsf TEMP,C AddForth movf H_B,W ; into W highest byte bsf STATUS,C addwf HigB,F ; H_B + HigB -> HigB, btfss STATUS,C goto ClearCF bsf STATUS,C goto Add32End ClearCF rrf TEMP,C ; C -> STATUS Add32End retlw 0 ;+---------------------------------------------------------------------+ ;| Addition of accumulator to 7-byte decimal number, takes CARRY | ;| into account. INDEX contains position. | ;| | ;| 10E6*D6+10E5*D5+10E4*D4+10E3*D3+10E2*D2+10*D1+D0 | ;| + W | ;| ------------------------------------------------- | ;| 10E6*D6+10E5*D5+10E4*D4+10E3*D3+10E2*D2+10*D1+D0 | ;| | ;+---------------------------------------------------------------------+ DecADD movwf TEMP ; push W (W comes with number to be added) movf INDEX,W ; INDEX contains pointer to decimal number movlw NUM0-1 ; NUM0 -> W addwf INDEX,W ; NUM0 + INDEX -> W movwf FSR ; NUM0 + INDEX -> FSR movf INDF,W ; decimal number to W movwf Help ; Help now contains decimal number movf TEMP,W ; pop W addwf Help,F ; Help + W -> Help bsf STATUS,C ; prepare for substraction test movlw 9 movwf TEMP ; 9 to TEMP movf Help,W ; Help to W subwf TEMP,W ; 9 - Help -> W btfss STATUS,C ; if Help was < 10 then C=0 (negative result) goto Proceed movf Help,W ; prepare Help for writting movwf INDF ; writte it to appropriate position return ; return from procedure Proceed movlw .10 subwf Help,W ; Help - 10 -> W movwf INDF ; writte it to appropriate position incf INDEX,F ; increment pointer movlw NUM0+7 ; prepare for test of position bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure movlw 1 ; overflowed bite to W goto DecADD ; process bite ;+---------------------------------------------------------------------+ ;| Substraction of accumulator from 7-byte decimal number, takes CARRY | ;| into account... | ;| | ;| 10E6*D6+10E5*D5+10E4*D4+10E3*D3+10E2*D2+10*D1+D0 | ;| - W | ;| ------------------------------------------------ | ;| 10E6*D6+10E5*D5+10E4*D4+10E3*D3+10E2*D2+10*D1+D0 | ;| | ;+---------------------------------------------------------------------+ DecSUB movwf TEMP ; push W (W comes with number to be substractedd) movf INDEX,W ; INDEX contains pointer to decimal number movlw NUM0-1 ; NUM0 -> W addwf INDEX,W ; NUM0 + INDEX -> W movwf FSR ; NUM0 + INDEX -> FSR movf INDF,W ; decimal number to W movwf Help ; Help now contains decimal number movf TEMP,W ; pop W bsf STATUS,C ; prepare for substraction subwf Help,W ; Help - W -> W btfss STATUS,C ; if result is negative then C=0 goto Makeit movwf INDF ; write W to appropriate position return ; return from procedure Makeit movlw .10 addwf Help,F movf TEMP,W ; pop W subwf Help,W ; Help - TEMP -> W movwf INDF ; write it to appropriate position incf INDEX,F ; increment pointer movlw NUM0+7 ; prepare for test of position bsf STATUS,C subwf INDEX,W ; INDEX - 7 -> W btfsc STATUS,C ; if INDEX < 7 then continue return ; else return from procedure movlw 1 ; underflowed bite to W goto DecSUB ; process bite ;+---------------------------------------------------------------------+ ;| SendIt | ;+---------------------------------------------------------------------+ ;| Procedure to send one byte in W to DDS. | ;+---------------------------------------------------------------------+ SendIt ; return movwf TEMP ; PUSH W clrf Count ; now starts sending procedure NextBite bcf STATUS,C ; prepare C to accept bite rrf TEMP,F ; rotate right bite to C ; (0th bite to C) clrf Help rlf Help,F ; C to 0th bite of Help movf Help,W nop movwf PORTA ; send bite, bsf PORTA,W_CLK nop nop nop nop bcf PORTA,W_CLK ; send clock incf Count,F movlw 8 bcf STATUS,Z subwf Count,W ; Count - 8 -> W btfss STATUS,Z goto NextBite retlw 0 ;+---------------------------------------------------------------------+ ;| SetDDS | ;+---------------------------------------------------------------------+ ;| Procedure to send one tuning word ResB..HigB to DDS | ;+---------------------------------------------------------------------+ SetDDS movf ResB,W ; 5 bytes are sent to DDS call SendIt movf LowB,W call SendIt movf MidB,W call SendIt movf HigB,W call SendIt movlw 0 ; 0 for 9850, 1 for 9851 if 6*CLOCK call SendIt ; is requited clrf PORTA nop bsf PORTA,FQ_UD ; send UPDATE FREQ command nop nop nop nop bcf PORTA,FQ_UD clrf Semaphore clrf PORTA clrf Help retlw 0 ;+---------------------------------------------------------------------+ ;| Get Switches to SW99 | ;+---------------------------------------------------------------------+ ;| RB0..RB6 inputs - | ;+---------------------------------------------------------------------+ Getswit movf PORTB,W ; read RB andlw b'01111110' ; filter out unsignificant bites movwf Help ; save result, in Help is SW99 NUMBER movf Help,W bcf STATUS,Z ; switch changed? subwf SW99,W ; SW99 - W -> W btfsc STATUS,Z ; jump if YES retlw 0 ; no change in Switches movf Help,W ; new SW99 is set! movwf SW99 ; set new value of the SW99 call Spli ; vymena VFOA-B retlw 1 ;+---------------------------------------------------------------------+ ;| Counter | ;+---------------------------------------------------------------------+ ;| It increments by each run through GetMouse routine provided the | ;| Semaphore[0] bite is set. | ;| It uses T1 and T2 registers | ;+---------------------------------------------------------------------+ Counter bsf STATUS,Z ; if T1 is FFh then next increment movlw 0FFh ; will give ZERO and higher byte should subwf T1,W ; be incremented (carry) btfss STATUS,Z ; if smaller, increment T1 goto GetCarry ; else process higher byte bsf STATUS,Z ; before incrementation test wheather movlw 0FFh ; both counter bytes aren't full subwf T2,W btfsc STATUS,Z ; if so, do nothing incf T1,F ; otherwise increment T1 return GetCarry bsf STATUS,Z ; if T2 is smaller than FF movlw 0FFh subwf T2,W btfsc STATUS,Z goto Finish incf T2,F clrf T1 Finish retlw 0 ;+---------------------------------------------------------------------+ ;| Get Mouse opto coupler signal | ;+---------------------------------------------------------------------+ ;| It tests bites RA3,4 and according their values it increments or | ;| decrements actual frequency, | ;| If no frequency change is needed it returns W=0, otherwise it | ;| returns W=1 | ;+---------------------------------------------------------------------+ GetMouse btfsc Semaphore,0 ; is Semaphore[0]=0? call Counter ; if yes increment Counter Gm movf PORTA,W ; read RA movwf Help movlw 0x64 movwf R1 decfsz R1,F goto $-1 movf PORTA,W ; read RA movwf TEMP ; save result bcf STATUS,Z ; clear ZERO flag subwf Help,W btfss STATUS,Z ; znak je stejny - toto je podstatny doplnek !!!! goto Gm movf TEMP,W bcf STATUS,Z ; clear ZERO flag andlw b'00011000' ; clear unsignificant bites btfss STATUS,Z ; if 00 then try to set FLAG's 2nd bite goto TestDir ; else test for 10,11,01 bcf STATUS,Z ; clear ZERO flag movf Semaphore,W ; is Semaphore=0? (all bites=0) btfss STATUS,Z ; if YES than set Semaphore 0-th bite retlw 0 ; else do nothing bsf Semaphore,0 retlw 0 TestDir btfss Semaphore,0 ; if Semaphore's 0-th bite is set then continue retlw 0 ; else do nothing movlw b'00011000' bcf STATUS,Z ; prepare test for 11 subwf TEMP,W ; TEMP - W -> W btfss STATUS,Z ; if 11 then do nothing goto UpDown ; else test 01 or 10 retlw 0 m10 bcf STATUS,Z movlw 0 subwf MOD,W btfss STATUS,Z decf MOD,1 goto Nav2 UpDown btfss TEMP,4 ; if Up (=10) increase frequency goto IsDown ; else it must be Down (=01) btfsc SW99,4 ; test zda se jedna o posun pozice goto Nav22 btfsc SW99,5 ; test zda se jedna o zmenu modu goto m01 plus movf KROK,W movwf INDEX movlw 1 clrf T1 clrf T2 call DecADD ; increase frequency movlw 6 ; test kdy pro VFO neni mozne F>5,99999 MHz bcf STATUS,Z subwf NUM5,W btfsc STATUS,Z goto Nav121 movf KROK,W movwf INDEX movlw 1 clrf T1 clrf T2 ; call DecSUBA ; - do promenych NAM ( VFO jde opacne !) Nav1 retlw 1 ; frequency update is needed Nav121 movf KROK,W movwf INDEX movlw 1 clrf T1 clrf T2 call DecSUB ; decrease frequency NUM kdyz se prekrocil rozsah goto Nav1 Nav11 incf KROK,1 bcf STATUS,Z movf MXKROK,W subwf KROK,W btfss STATUS,Z goto Nav1 movf MKROK,W movwf KROK goto Nav1 m01 incf MOD,1 bcf STATUS,Z movlw 4 subwf MOD,W btfss STATUS,Z goto Nav1 movlw 3 movwf MOD goto Nav1 IsDown btfsc SW99,4 goto Nav11 btfsc SW99,5 goto m10 minus movf KROK,W movwf INDEX movlw 1 clrf T1 clrf T2 call DecSUB ; decrease frequency goto Nav222 Nav2 retlw 1 ; frequency update is needed Nav222 movlw 4 ; test kdy neni mozne prekrocit dolni limit 5,50000 MHz bcf STATUS,Z subwf NUM4,W btfsc STATUS,Z goto Nav212 movf KROK,W movwf INDEX movlw 1 clrf T1 clrf T2 ; call DecADDA ; + do promenych NAM ( VFO jde opacne ) goto Nav2 Nav212 movf KROK,W movwf INDEX movlw 1 clrf T1 clrf T2 call DecADD ; + kdyz se prekrocil rozsah dolniho limitu goto Nav2 Nav22 decf KROK,1 bcf STATUS,Z movlw 0 subwf KROK,W btfss STATUS,Z goto Nav2 movlw 1 movwf KROK goto Nav2 ;---------------------------------------------------------------------- ; procedura k vytlaceni bytu na seriovy vystup ;---------------------------------------------------------------------- SetSER movf SW98,W call SendIt clrf PORTA nop bsf PORTB,Senable ; send UPDATE serial nop nop nop nop bcf PORTB,Senable clrf Semaphore clrf PORTA clrf Help retlw 0 ;|---------------------------------------------------------------------| ;| Entry point for the main cycle | ;|---------------------------------------------------------------------| Entry clrf SW98 bcf STATUS,Z ;naplneni SW98 hodnotou kroku bcf STATUS,C movlw 2 subwf KROK,W btfss STATUS,Z goto en01 movlw 2 movwf SW98 goto nnn en01 btfss STATUS,C goto en02 movlw 4 movwf SW98 goto nnn en02 movlw 1 movwf SW98 nnn movf MOD,W ; naplneni SW98 hodnotou MOD btfss SW99,1 goto n8 call VTX n7 addwf SW98,W movwf SW98 goto n9 n8 call VRX goto n7 n9 call SetSER call Convers ;+---------------------------------------------------------------------+ ;| DDS send data sequence (ResB..HigB contain tuning word) | ;+---------------------------------------------------------------------+ DDS call SetDDS goto Work ;+---------------------------------------------------------------------+ ;| Conversion of NUM0..NUM6 into DDS 4 byte tuning word | ;+---------------------------------------------------------------------+ ;| ResB,LowB,MidB and HigB should be filled according NUM0..NUM6 values| ;+---------------------------------------------------------------------+ Convers movlw 7 ; Set position of decimal number movwf NUMINDEX ; to NUMINDEX clrf ResB ; clear main registers clrf LowB clrf MidB clrf HigB NextNumber btfss SW98,0 goto Nxy movlw NUM0-1 ; NUM0 -> W (get memory address) Nxx addwf NUMINDEX,W ; NUM0 + NUMINDEX -> W movwf FSR ; W -> FSR movf INDF,W ; NUM(0..6) -> W bcf STATUS,Z movwf INDEX ; decimal number to INDEX movlw 0FFh andwf INDEX,W btfsc STATUS,Z ; if ZERO do nothing ... goto NextPos movf NUMINDEX,W movwf TEMP bcf STATUS,C rlf TEMP,F rlf TEMP,F ; multiply by 4 decf TEMP,F movf TEMP,W ; fill R_B...H_B with decades call Decades movwf H_B decf TEMP,F movf TEMP,W call Decades movwf M_B decf TEMP,F movf TEMP,W call Decades movwf L_B decf TEMP,F movf TEMP,W call Decades movwf R_B NextAdd call Add32 ; Dx times Add32 decade decfsz INDEX,F goto NextAdd goto NextPos Nxy movlw NUM0-1 goto Nxx NextPos decfsz NUMINDEX,F ; take next number goto NextNumber return ;---------------------------------------------------------------------- ; monitor modu ;---------------------------------------------------------------------- Monit call Delay movf SW98,W movwf HELL clrf SW98 movf MOD,W call VTX movwf SW98 call SetSER call Delay movf HELL,W movwf SW98 call SetSER return ;---------------------------------------------------------------------- ; split modu - vymena VF0 A za VFO B a opacne ;---------------------------------------------------------------------- Spli btfsc SW99,2 goto Si btfsc R3,4 goto Si01 return Si btfsc R3,4 return bsf R3,4 Si02 btfsc MOD,0 goto Si03 bsf MOD,0 call NtoVFA call VFBtoN return Si03 bcf MOD,0 call NtoVFB call VFAtoN return Si01 bcf R3,4 goto Si02 ;+---------------------------------------------------------------------+ ;| Ready to start interfaces checking | ;+---------------------------------------------------------------------+ Work call Getswit movwf Help btfsc Help,0 goto Entry ; otherwise set new frequency ; call Spli btfsc SW99,5 ; test na signal MOD goto W40 ; monitor modu bcf R3,1 btfsc SW99,1 ; test na signal TX goto W01 btfss SW99,6 ; test na log 0 - signal Rit goto W10 bcf R3,0 W20 call GetMouse movwf Help btfsc Help,0 ; no signal from optosensors goto W41 ; otherwise set new Mod goto Work W40 btfsc R3,1 goto W20 bsf R3,1 call Monit call Monit call Monit call Monit ; call Monit ; call Monit goto W20 W41 bcf R3,1 goto Entry W10 btfsc R3,0 goto W20 bsf R3,0 call NtoVrit goto W20 W01 btfsc R3,0 goto W30 btfsc MOD,0 goto W02 call NtoVFA goto W03 W02 call NtoVFB W03 bcf STATUS,Z movlw 2 subwf MOD,W btfsc STATUS,Z goto W04 bcf STATUS,Z movlw 3 subwf MOD,W btfsc STATUS,Z goto W05 goto W06 W04 call VFBtoN goto W06 W05 call VFAtoN W06 btfss SW99,3 ; test na log 0 pri CW goto W50 W06b call Convers call SetDDS W06a btfss SW99,1 goto W07 call Getswit goto W06a W07 btfsc MOD,0 goto W08 call VFAtoN goto W09 W08 call VFBtoN W09 goto Entry W30 btfsc MOD,0 goto W31 call NtoVFA goto W32 W31 call NtoVFB W32 call VrittoN goto W03 W50 movlw 2 ; pri TX a CW se posune F o + 800Hz movwf INDEX movlw 8 call DecADD ; increase frequency goto W06b ;+---------------------------------------------------------------------+ ;| Delay for DDS initialization | ;+---------------------------------------------------------------------+ Delay clrf R1 clrf R2 call LCycle retlw 0 ; 196 352 procesor cycles LCycle decfsz R2,F goto LCycle ; 3*256 decfsz R1,F ; 3*256+1 goto LCycle ;(3*256+2)*R1=770*R1 in procesor cycles return ;************************************************************************ ; EEPROM READ ROUTINE ; ; Input: read address in USER_EEADR also in w ; Output: data in USER_EEDATA also in w ;************************************************************************ EE_read bcf STATUS,RP0 ; Bank 0 movf EADR,w; EE address movwf EEADR ; Address to read bsf STATUS,RP0 ; Bank 1 bsf EECON1,RD ; EE Read bcf STATUS,RP0 ; Bank 0 movf EEDATA,w ; w = EEDATA ; movwf USER_EEDATA ; Data return ;************************************************************************ ; EEPROM WRITE ROUTINE ; ; Input: write address in EADR also in w ; data in Help also in w ; Output: - ;************************************************************************ EE_write movf EADR,0 movwf EEADR movf Help,0 movwf EEDATA bsf STATUS,RP0 ; Bank 1 bcf INTCON,GIE ; INTs disabled bsf EECON1,WREN ; Enable write ;-------------------------------------------------------- ; Magic macro with EEPROM save (see 16C84 manual) ;-------------------------------------------------------- movlw 55h movwf EECON2 movlw 0AAh movwf EECON2 bsf EECON1,WR ee_wr1 btfsc EECON1,WR ; is the write completed? goto ee_wr1 ; loop until completed bsf INTCON,GIE ; Enable INTs bcf STATUS,RP0 ; Bank 0 return ;+---------------------------------------------------------------------+ ;| End of the programme | ;+---------------------------------------------------------------------+ end