TITLE 'FREQUENCEMETRE 30/1200Mhz' ;F1GLT/F1UKQ/F4BJR/F6HEO@F5KCH.FBFC.FRA.EU 05/02/2001' LIST P=16F84,F=INHX8M,R=HEX __CONFIG B'11111111111001' ;----- Register Definitions------------------ W EQU 00 F EQU 01 RAM_BASE EQU 0C ;----- Register Files------------------------ TMR0 EQU 01 STATUS EQU 03 FSR EQU 04 PORTA EQU 05 PORTB EQU 06 OPTION_REG EQU 01 TRISA EQU 05 TRISB EQU 06 INDF EQU 00 PCL EQU 02 EEDATA EQU 08 EEADR EQU 09 PCLATH EQU 0A INTCON EQU 0B EECON1 EQU 08 EECON2 EQU 09 EEIF EQU 04 WRERR EQU 03 WREN EQU 02 WR EQU 01 RD EQU 00 GIE EQU 07 EEIE EQU 06 T0IE EQU 05 INTE EQU 04 RBIE EQU 03 T0IF EQU 02 INTF EQU 01 RBIF EQU 00 ;----- STATUS Bits -------------------------- RP0 EQU 05 Z EQU 02 DC EQU 01 C EQU 00 ;******************************************** #DEFINE RS PORTA,00 #DEFINE ENA PORTA,01 #DEFINE RESET PORTB,01 #DEFINE INC PORTB,02 #DEFINE GATE PORTB,03 #DEFINE INC1 PORTB,07 #DEFINE BANK1 STATUS,RP0 ;******************************************** CBLOCK RAM_BASE R0,R1,R2,R3,CHR,TEMP,MEMO COUNT,COUNT1,COUNT2,COUNT3 H_BYTE,M_BYTE,L_BYTE,MEM ENDC ;******************************************** ORG 2100 DE " F1GLT JN16RV " ORG 00 GOTO START ;*******BOUCLE DE DELAIS 100MS ************** MS100 MOVLW 2D MOVWF COUNT1 L1 MOVLW 0C MOVWF COUNT2 L2 MOVLW 3C MOVWF COUNT3 L3 DECFSZ COUNT3,F GOTO L3 DECFSZ COUNT2,F GOTO L2 DECFSZ COUNT1,F GOTO L1 MOVLW 96 MOVWF COUNT1 LP99 DECFSZ COUNT1,F GOTO LP99 NOP NOP RETURN ;*******BOUCLE DE DELAIS 40MS************** MS40 MOVLW 11 MOVWF COUNT1 L11 MOVLW 0D MOVWF COUNT2 L21 MOVLW 3A MOVWF COUNT3 L31 DECFSZ COUNT3,F GOTO L31 DECFSZ COUNT2,F GOTO L21 DECFSZ COUNT1,F GOTO L11 MOVLW 0C5 MOVWF COUNT1 LP991 DECFSZ COUNT1,F GOTO LP991 NOP NOP RETURN ;*******BOUCLE DE DELAIS 200 MICRO SEC.**** DELAY MOVLW 42 MOVWF COUNT1 NXT5 DECFSZ COUNT1,F GOTO NXT5 RETURN ;******** BOUCLE DE DELAIS 2MS *************** MS2 MOVLW 0A MOVWF COUNT1 LP15 MOVLW 42 MOVWF COUNT2 LP16 DECFSZ COUNT2,F GOTO LP16 DECFSZ COUNT1,F GOTO LP15 RETURN ;*ECRITURE DES DONNEES ET COMMANDES DANS LCD* STROBE BCF ENA BCF RS GOTO CM DATS BCF ENA BSF RS CM MOVWF MEM BCF STATUS,C MOVLW 08 MOVWF COUNT ROTA RLF MEM,F RRF CHR,F DECFSZ COUNT,F GOTO ROTA MOVF CHR,W MOVWF PORTB BSF ENA NOP BCF ENA CALL DELAY CALL DELAY SWAPF CHR,W MOVWF PORTB BSF ENA NOP BCF ENA CALL DELAY CALL DELAY RETURN ;*******DEBUT DU PROGRAMME********** ;*******INITIALISE PORTS ********** START CLRF STATUS BSF BANK1 MOVLW B'10110111' MOVWF OPTION_REG MOVLW B'11100' MOVWF TRISA MOVLW B'11110000' MOVWF TRISB BCF BANK1 CLRF PORTA CLRF PORTB ;*******INITIALISE MODULE LCD EN MODE 4 BITs **** CALL MS100 BCF RS BCF ENA MOVLW B'00000100' MOVWF PORTB BSF ENA NOP BCF ENA CALL DELAY MOVLW B'00001100' ;AFFICHEUR ON CALL STROBE CALL MS2 MOVLW B'00101000' ;FONCTIONS SET CALL STROBE CALL MS2 MOVLW B'00000001' CALL STROBE CALL MS2 ;*******LIT EEPROM ET AFFICHE LE TEXT****** TEXT1 MOVLW 0C0 ;POSITIONNE CALL STROBE ;LE CURSEUR SUR 2e LIGNE CALL MS2 CLRF MEMO EEP MOVF MEMO,W MOVWF EEADR BSF BANK1 BSF EECON1,RD BCF BANK1 MOVF EEDATA,W CALL DATS INCF MEMO,F BTFSS MEMO,04 GOTO EEP ;*******AFFICHE Mhz************* MOVLW 8C ;POSITIONNE CALL STROBE ;LE CURSEUR CALL MS2 MOVLW 'M' CALL DATS MOVLW 'h' CALL DATS MOVLW 'z' CALL DATS ;***********DEBUT DU COMPTAGE**************** COMPT CLRF PORTB BSF RESET CLRF H_BYTE MOVLW 0FF MOVWF M_BYTE MOVWF L_BYTE CLRF TMR0 BCF RESET BSF INC BSF GATE CALL MS100 CALL MS100 CALL MS100 CALL MS100 CALL MS100 CALL MS100 CALL MS40 BCF INC BCF GATE ;************TMR0*********************** MOVF TMR0,W MOVWF H_BYTE MOVWF TEMP ;*******LECTURE DU COMPTEUR INTERNE***** CLRF STATUS BSF BANK1 BCF TRISB,07 BCF BANK1 MB1 BSF INC1 NOP BCF INC1 NOP MOVF TEMP,W XORWF TMR0,W BTFSS STATUS,Z GOTO MB2 DECF M_BYTE,F GOTO MB1 MB2 CLRF STATUS BSF BANK1 BSF TRISB,07 BCF BANK1 ;*******LECTURE DU COMPTEUR EXTERNE***** NOP BTFSC INC1 GOTO CLK2 CLK BSF INC NOP BCF INC NOP BTFSC INC1 GOTO CLK2-1 DECF L_BYTE,F GOTO CLK DECF L_BYTE,F CLK2 BSF INC NOP BCF INC NOP BTFSS INC1 GOTO O_D DECF L_BYTE,F GOTO CLK2 O_D DECF L_BYTE,F ;*******CONVERTION 24 BITs BIN > BCD**** MOVLW 18 MOVWF COUNT CLRF R0 CLRF R1 CLRF R2 CLRF R3 BCF STATUS,C LOOP16 RLF L_BYTE,F RLF M_BYTE,F RLF H_BYTE,F RLF R0,F RLF R1,F RLF R2,F RLF R3,F DECFSZ COUNT,F GOTO ADJDEC GOTO O_DONE ADJDEC MOVLW R3 MOVWF FSR CALL ADJBCD MOVLW R2 MOVWF FSR CALL ADJBCD MOVLW R1 MOVWF FSR CALL ADJBCD MOVLW R0 MOVWF FSR CALL ADJBCD GOTO LOOP16 ADJBCD MOVLW 03 ADDWF W,W MOVWF TEMP BTFSC TEMP,3 MOVWF W MOVLW 30 ADDWF W,W MOVWF TEMP BTFSC TEMP,7 MOVWF W RETURN O_DONE MOVLW 82 ;POSITIONNE CALL STROBE ;LE CURSEUR POUR L'AFFICHAGE DU RESULTAT CALL MS2 ;*******CONVERTION BCD ASCII ET AFFICHAGE******* ;*******SUPRESSION DES ZEROS NON SIGNIFICATIFS** MOVLW 30 MOVWF TEMP SWAPF R3,W ANDLW 0F BTFSS STATUS,Z GOTO N_BL MOVLW 20 CALL DATS MOVF R3,W ANDLW 0F BTFSS STATUS,Z GOTO N_BL1 MOVLW 20 GOTO BL N_BL ADDWF TEMP,W CALL DATS MOVF R3,W ANDLW 0F N_BL1 ADDWF TEMP,W BL CALL DATS SWAPF R2,W ANDLW 0F ADDWF TEMP,W CALL DATS MOVF R2,W ANDLW 0F ADDWF TEMP,W CALL DATS MOVLW '.' CALL DATS SWAPF R1,W ANDLW 0F ADDWF TEMP,W CALL DATS MOVF R1,W ANDLW 0F ADDWF TEMP,W CALL DATS SWAPF R0,W ANDLW 0F ADDWF TEMP,W CALL DATS MOVF R0,W ANDLW 0F ADDWF TEMP,W CALL DATS GOTO COMPT ;COMPTAGE SUIVANT END