; a voir : lecture Hz + 1 ? bug ? ; update 12/01/2012 ; mode LCD 4 bits au lieu de 8 bits ; remplacement des adresses en dur dans le programme , par des labels ;Using TMR0 with External Clock ;paragraph 6.2 specsheet DS30430C page 29 ;Therefore, it is necessary for T0CKI to have a ;period of at least 4Tosc (plus a small RC delay) divided ;by the prescaler value. The only requirement on T0CKI ;high and low time is that they do not violate the ;minimum pulse width requirement of 10 ns. ; ;parameter 40 High pulse width 30nS ;parameter 41 Low pulse width 20nS ;parameter 42 periode (Tcy+40)/N N=prescaler ; La valeur du quartz intervient beaucoup sur la periode mini (42) ; si Q=4Mhz avec Tcy= 4/Fosc=> 1µS ; periode mini = (1000+40)/256= ~4nS soit 250Mhz ; si Q=20Mhz periode mini (200 + 40)/256 => < 1nS ! 1Ghz!? pas glop,il y a VIOL! ; En se basant sur les limites (40 et 41)etat H=30ns + etat L=20ns => periode 50nS ; => 20Mhz ! TRES PLAUSIBLE puisque reellement mesuré (avec quartz de 4Mhz) ; En se basant sur les limites absolues (antiviol!) de 10 + 10 ns=> 20nS ; => 50Mhz, ce qui est decrit dans la note ci-dessous ; note microchip AN592.pdf ;The PIC16C5X has one 8-bit timer (Timer0), which can be used with ;an 8-bit prescaler. The prescaler runs asynchronously, hence it can ;count a very high frequency. The minimum rise and fall times of the input ;frequency are speci?ed to be 10 ns, so the fastest clock rate the TMR0 ;can count is 50 MHz. ; 07 juin 2003 .. testé OK avec Gene a quartz et sur emetteur 27,125Mhz de Radiocommande ; affichage 7 digits mode LCD 8 bits data ; 1hz a 50MHz (theorique) comptage sur 24 bits ; resolution 1Hz ;http://www.piclist.com/techref/piclist/weedfreq/WCT6.htm ;************************************************************* ; FREQUENCY COUNTER ; Model : WTCNT ; Author : Terry J. Weeder ; Date :November 18, 1993 ; Version:1.0 ; WWW.WEEDTECH.COM Ported to 16f84 by Peter Cousens October 1998 ; lines 337 to 453 ..supprimees ;************************************************************* list ERRORLEVEL -302 Processor 16F84 #include <../common/p16F84_.inc> ; Radix DEC EXPAND __CONFIG 0x3FF1 ; _CP_OFF & _WDT_OFF & _PWRTE_ON & _XT_OSC ; --- Hardware --- ; Quartz 4Mhz encadre de 2x 33pF ; LCD 1x16 PIC16F84 ; 1 0V ; 2 +5V ; 3 R de 390 ohms au 0V ; 4 Enable RA0 pin 17 ; 5 R/W 0V RA1 pin 18 anymore not used ; 6 RS RA2 pin 1 ; 7 D0 0V RB0 pin 6 not used ; 8 D1 0V RB1 pin 7 not used ; 9 D2 0V RB2 pin 8 not used ; 10 D3 0V RB3 pin 9 not used ; 11 D4 RB4 pin 10 ; 12 D5 RB5 pin 11 ; 13 D6 RB6 pin 12 ; 14 D7 RB7 pin 13 ; conditionnement signal ;9 74HCT132 RA2 PIN 1 ;12,13,2 74HCT132 RA3 pin 2 ;6 74HCT132 RA4 pin 3 ;11,10 74HCT132 ;3,4 74HCT132 ;8,5 74HCT132 ;1 74HCT132 1Mohm +5V et 820K 0V C=1µF signal input ;14 74HCT132 +5V ;7 74HCT132 0V FREQ EQU .40000 ; Xtal frequency in kHz LCD_DATA EQU PORTB ; LCD DATA 11,12,13,14 bits 4,5,6,7 LCD_DATA_TRIS EQU TRISB ; LCD_CTRL EQU PORTA ; LCD CTRL 4,5,6 bits 0,1,2 LCD_RS EQU 2 ; LCD pin 4 : Ligne Selection Registres de l'afficheur ;LCD_RW EQU 1 ; LCD pin 5 reliée au 0V (not used) LCD_E EQU 0 ; LCD pin 6 : Ligne ENABLED controle de l'afficheur ind equ 0h TMR0 equ 1h pc equ 2h status equ 3h fsr equ 4h ;port_c equ 7h c equ 0h dc equ 1h z equ 2h pd equ 3h to equ 4h MSB equ 7h LSB equ 0h cnt equ 2h rs equ 2h rw equ 1h e equ 0h o equ 7h RP1 EQU H'0006' RP0 EQU H'0005' STATUS EQU H'0003' OPTION_REG EQU H'0081' TRISA EQU H'0085' TRISB EQU H'0086' EEPROM EQU 0x2100 ;************* ; DATA bank0 ;************* cblock 0x0C gate cnt1 cnt2 cnt3 calc1 calc2 calc3 sum1 sum2 sum3 timer_value ; registres pour les 7 digits c1 c2 c3 c4 c5 c6 c7 count1 count2 count3 count4 Pointer_Msg in_reg addcnt LCDtmp LCDtmp1 Dcount1 Dcount2 Dcount3 dummy endc LastBank0 EQU dummy IF ( LastBank0 >= 0x4F ) ERROR "Attention debordement zone RAM " ENDIF org 0x00 goto start ; org 0x04 nop nop retfie ;**************** ; Tempos ;**************** delay_25us movlw 0x01 movwf Dcount1 movlw 0x01 movwf Dcount2 movlw 0x05 movwf Dcount3 goto delay1 delay_100us movlw 0x01 movwf Dcount1 movlw 0x01 movwf Dcount2 movlw 20 movwf Dcount3 goto delay1 delay_2_5ms movlw 0x01 movwf Dcount1 movlw 0x02 movwf Dcount2 movlw 243 movwf Dcount3 goto delay1 delay_10ms movlw 0x01 movwf Dcount1 movlw 8 movwf Dcount2 movlw 205 movwf Dcount3 goto delay1 delay_100ms movlw 0x01 movwf Dcount1 movlw 79 movwf Dcount2 movlw 0x01 movwf Dcount3 goto delay1 delay_500ms movlw 2 movwf Dcount1 movlw 135 movwf Dcount2 movlw 106 movwf Dcount3 goto delay1 delay1 decfsz Dcount3,f goto $-1 decfsz Dcount2,f goto $-3 decfsz Dcount1,f goto $-5 return ;********************** ; LCD ;*********************** LCD_Cls movlw D'01' ; effacage de l'ecran call LCD_Cde goto delay_2_5ms ;----------------- LCD_Clear1 ; effacage de la 1ere ligne movlw D'16' movwf LCDtmp1 movlw 0x80 ;LINE1 call LCD_Cde call delay_2_5ms LCDc111 movlw ' ' call LCD_Putchar decfsz LCDtmp1,f goto LCDc111 LCD_Line1 movlw 0x80 ;LINE1 call LCD_Cde goto delay_2_5ms ;-------------- LCD_Clear2 ; effacage de la deuxieme ligne movlw D'16' movwf LCDtmp1 movlw 0xC0 ;LINE2 call LCD_Cde call delay_2_5ms LCDcl21 movlw ' ' call LCD_Putchar decfsz LCDtmp1,f goto LCDcl21 LCD_Line2 movlw 0xC0 call LCD_Cde goto delay_2_5ms LCD_Home movlw D'02' call LCD_Cde goto delay_2_5ms LCD_Putchar ;bank0 ; rajout 7/03/03 movwf LCDtmp call delay_100us movlw 0x0f andwf LCD_DATA,F movf LCDtmp,w andlw 0xF0 iorwf LCD_DATA,F ; bcf LCD_CTRL, LCD_RW nop bsf LCD_CTRL, LCD_RS nop bsf LCD_CTRL, LCD_E call delay_25us bcf LCD_CTRL, LCD_E call delay_25us movlw 0x0f andwf LCD_DATA,F swapf LCDtmp,W andlw 0xF0 iorwf LCD_DATA,F nop bsf LCD_CTRL, LCD_E call delay_25us bcf LCD_CTRL, LCD_E call delay_25us return LCD_Init bcf LCD_CTRL, LCD_E call delay_2_5ms bcf LCD_CTRL, LCD_RS call delay_2_5ms ; bcf LCD_CTRL, LCD_RW call delay_2_5ms movlw 0x0f andwf LCD_DATA,F movlw 0x030 ; Commande pour interface 4 bits iorwf LCD_DATA,F bank1 movlw 0x0F andwf LCD_DATA_TRIS,W movwf LCD_DATA_TRIS ; Port en sortie bank0 bsf LCD_CTRL, LCD_E nop bcf LCD_CTRL, LCD_E call delay_2_5ms bsf LCD_CTRL, LCD_E nop bcf LCD_CTRL, LCD_E call delay_2_5ms bsf LCD_CTRL, LCD_E nop bcf LCD_CTRL, LCD_E call delay_100ms ; tempo 100ms , remplace l'attente Wait_Busy de l'afficheur movlw 0x0f andwf LCD_DATA,F movlw 0x020 ; Commande pour interface 4 bits iorwf LCD_DATA,F bsf LCD_CTRL, LCD_E nop bcf LCD_CTRL, LCD_E movlw 0x028 ; Envoi de la commande Fonction 4-bit , Font, Nombre de lignes call LCD_Cde movlw 0x008 ; display off call LCD_Cde movlw 0x00C ; display on (0x00C sans curseur, 0x00E avec , 0x00F clign. ) call LCD_Cde movlw 0x006 LCD_Cde movwf LCDtmp call delay_100ms ; call delay_100ms remplace l'attente Wait_Busy de l'afficheur movlw 0x0f andwf LCD_DATA,F movf LCDtmp,w andlw 0xF0 iorwf LCD_DATA,F ; bcf LCD_CTRL,LCD_RW nop bcf LCD_CTRL,LCD_RS nop bsf LCD_CTRL,LCD_E nop bcf LCD_CTRL,LCD_E movlw 0x0f andwf LCD_DATA,F swapf LCDtmp,W andlw 0xF0 iorwf LCD_DATA,F bsf LCD_CTRL,LCD_E nop bcf LCD_CTRL,LCD_E return sub bcf status,o ;clear overflow bit movf calc1,w ;subtract calc1 from cnt1 subwf cnt1,f btfsc status,c goto sb1 movlw 0x01 ;borrow from cnt2 if overflow subwf cnt2,f btfsc status,c goto sb1 subwf cnt3,f ;borrow from cnt3 if cnt2 overflow btfss status,c bsf status,o ;set overflow bit if result is negative sb1 movf calc2,w ;subtract calc2 from cnt2 subwf cnt2,f btfsc status,c goto sb2 movlw 0x01 ;borrow from cnt3 if cnt2 overflow subwf cnt3,f btfss status,c bsf status,o ;set overflow bit if result is negative sb2 movf calc3,w ;subtract calc3 from cnt3 subwf cnt3,f btfss status,c bsf status,o ;set overflow bit if result is negative retlw 0x00 ; ;--------------------------- add movf calc1,w ;add calc1 to cnt1 addwf cnt1,f btfss status,c goto ad1 incfsz cnt2,f ;add to cnt2 if cnt1 overflow goto ad1 incf cnt3 ,f ;add to cnt3 if cnt2 overflow ad1 movf calc2,w ;add calc2 to cnt2 addwf cnt2,f btfsc status,c incf cnt3,f ;add to cnt3 if cnt2 overflow movf calc3,w ;add calc3 to cnt3 addwf cnt3,f retlw 0x00 ; ;----------------------- cnvt movlw 0x07 ;7 digits in display movwf count1 movlw c1 ;set fsr for MSB in display movwf fsr movlw 0x2F ;one less that ASCII "0" cnvt0 movwf ind incf fsr ,f decfsz count1,f goto cnvt0 movlw 0x0F ;load "1,000,000" in calc1-3 movwf calc3 movlw 0x42 movwf calc2 movlw 0x40 movwf calc1 cnvt1 call sub ;subtract number from count incf c1 ,f ;increment 1,000,000's register movlw 0x3A xorwf c1,w btfsc status,z goto overflow btfss status,o ;check if overflow goto cnvt1 call add ;add back last number movlw 0x01 ;load "100,000" in calc1-3 movwf calc3 movlw 0x86 movwf calc2 movlw 0xA0 movwf calc1 cnvt2 call sub ;subtract number from count incf c2 ,f ;increment 100,000's register btfss status,o ;check if overflow goto cnvt2 call add ;add back last number clrf calc3 ;load "10,000" in calc1-3 movlw 0x27 movwf calc2 movlw 0x10 movwf calc1 cnvt3 call sub ;subtract number from count incf c3,f ;increment 10,000's register btfss status,o ;check if overflow goto cnvt3 call add ;add back last number movlw 0x03 ;load "1,000" in calc1-3 movwf calc2 movlw 0xE8 movwf calc1 cnvt4 call sub ;subtract number from count incf c4,f ;increment 1,000's register btfss status,o ;check if overflow goto cnvt4 call add ;add back last number clrf calc2 ;load "100" in calc1-3 movlw 0x64 movwf calc1 cnvt5 call sub ;subtract number from count incf c5 ,f ;increment 100's register btfss status,o ;check if overflow goto cnvt5 call add ;add back number movlw 0x0A ;load "10" in calc1-3 movwf calc1 cnvt6 call sub ;subtract number from count incf c6 ,f ;increment 10's register btfss status,o ;check if overflow goto cnvt6 call add ;add back last number movf cnt1,w ;put remainder in 1's register addwf c7 ,f incf c7 ,f retlw 0x00 ; count bank1 movlw b'00110111' ;TMR0 = ext, prescaler=1/256 movwf OPTION_REG bank0 bcf PORTA,3 bcf PORTA,2 clrf cnt3 clrf TMR0 clrf timer_value bsf PORTA,2 ;toggle TMR0 pin bcf PORTA,2 movf gate,w ;get gate time movwf count1 bsf PORTA,3 ;start count fr4 movlw 0xFA ;250 movwf count2 goto fr6 fr5 nop nop nop nop nop nop fr6 movf TMR0,w ;test for TMR0 rollover (12) subwf timer_value ,f btfss status,z goto fr7 nop goto fr8 fr7 btfsc status,c incf cnt3,f fr8 movwf timer_value nop nop nop decfsz count2,f goto fr5 decfsz count1,f goto fr4 bcf PORTA,3 ;stop count movf TMR0,w ;get TMR0 count movwf cnt2 subwf timer_value,f ;test for TMR0 rollover btfss status,c goto fr9 btfss status,z incf cnt3,f fr9 clrf cnt1 ;set to get prescaler count fr10 decf cnt1,f bsf PORTA,2 ;toggle TMR0 pin bcf PORTA,2 movf TMR0,w ;test if TMR0 has changed xorwf cnt2,w btfsc status,z goto fr10 retlw 0x00 ; ;******************************************** ; main program start clrf PORTA ;instruction, write, enable low clrf PORTB bank1 movlw b'00010000' ; RA4 as input others output movwf TRISA movlw b'00000000' ; all outpouts movwf TRISB bank0 call delay_500ms call LCD_Init ; en mode 4 bits call delay_500ms call LCD_Clear1 call delay_100ms movlw 0 movwf Pointer_Msg Call AffNumMsgEeprom call delay_500ms call delay_500ms call delay_500ms call LCD_Clear1 mhz movlw 0x14 ;0.1 sec gate movwf gate call count call cnvt ;convert binary to BCD movlw 0x30 ;test if "0" xorwf c1,w btfss status,z goto mhz1 movlw 0x30 ;test if "0" xorwf c2,w btfsc status,z goto khz1 ; traite valeur en Megaherz mhz1 call Entete movlw 0x84 ;set display address Begin+6 call LCD_Cde movlw 0x02 ;output first 2 characters movwf count1 movlw c1 ;MSD of freq movwf fsr mhz2 movlw 0x30 ;test if "0" xorwf ind,w btfss status,z goto mhz3 movlw 0x20 ;change preceeding "0's" to "space" call LCD_Putchar incf fsr,f decfsz count1,f goto mhz2 goto mhz4 mhz3 movf ind,w call LCD_Putchar incf fsr,f decfsz count1,f goto mhz3 mhz4 movlw 0x2E ;"." call LCD_Putchar movlw 0x05 ;output last 5 characters movwf count1 mhz5 movf ind,w call LCD_Putchar incf fsr,f decfsz count1,f goto mhz5 movlw 0x20 ;"space" call LCD_Putchar movlw 0x4D ;"M" call LCD_Putchar movlw 0x48 ;"H" call LCD_Putchar movlw 0x7A ;"z" call LCD_Putchar movlw 0x20 ;"space" call LCD_Putchar movlw 0x20 call LCD_Putchar goto mhz ; khz movlw 0x14 ;0.1 sec gate movwf gate call count call cnvt ;convert binary to BCD movlw 0x30 ;test if 0 xorwf c1,w btfss status,z goto mhz1 movlw 0x32 ;test if < 2 subwf c2,w btfsc status,c goto mhz1 movlw 0x30 ;test if "0" xorwf c2,w btfss status,z goto khz1 movlw 0x30 ;test if "0" xorwf c3,w btfsc status,z goto xkhz khz1 call Entete movlw 0x84 ;set display address Begin+4 call LCD_Cde movlw 0x05 ;output first 5 characters movwf count1 movlw c1 ;MSD of freq movwf fsr khz2 movlw 0x30 ;test if "0" xorwf ind,w btfss status,z goto khz3 movlw 0x20 ;change preceeding "0's" to "space" call LCD_Putchar incf fsr,f decfsz count1,f goto khz2 goto khz4 khz3 movf ind,w call LCD_Putchar incf fsr,f decfsz count1,f goto khz3 khz4 movlw 0x2E ;"." call LCD_Putchar movf ind,w ;output last 2 characters call LCD_Putchar incf fsr,f movf ind,w call LCD_Putchar movlw 0x20 call LCD_Putchar movlw 0x4B ;"K" call LCD_Putchar movlw 0x48 ;"H" call LCD_Putchar movlw 0x7A ;"z" call LCD_Putchar movlw 0x20 call LCD_Putchar movlw 0x20 call LCD_Putchar goto khz ; xkhz movlw 0xC8 ;1 sec gate movwf gate call count call cnvt ;convert binary to BCD movlw 0x30 ;test if 0 xorwf c1,w btfss status,z goto khz movlw 0x32 ;test if < 2 subwf c2,w btfsc status,c goto khz movlw 0x30 ;test if 0 xorwf c2,w btfss status,z goto xkhz1 movlw 0x30 ;test if 0 xorwf c3,w btfsc status,z goto hz0 xkhz1 call Entete movlw 0x84 ;set display address debut +4 call LCD_Cde movlw 0x04 ;output first 4 characters movwf count1 movlw c1 ;MSD of freq movwf fsr xkhz2 movlw 0x30 ;test if "0" xorwf ind,w btfss status,z goto xkhz3 movlw 0x20 ;change preceeding "0's" to "space" call LCD_Putchar incf fsr,f decfsz count1,f goto xkhz2 goto xkhz4 xkhz3 movf ind,w call LCD_Putchar incf fsr,f decfsz count1,f goto xkhz3 xkhz4 movlw 0x2E ;"." call LCD_Putchar movf ind,w ;output last 3 characters call LCD_Putchar incf fsr,f movf ind,w call LCD_Putchar incf fsr,f movf ind,w call LCD_Putchar movlw 0x20 ;"space" call LCD_Putchar movlw 0x4B ;"K" call LCD_Putchar movlw 0x48 ;"H" call LCD_Putchar movlw 0x7A ;"z" call LCD_Putchar movlw 0x20 ;"space" call LCD_Putchar movlw 0x20 ;"space" call LCD_Putchar goto xkhz ; hz movlw 0xC8 ;1 sec gate movwf gate call count call cnvt ;convert binary to BCD movlw 0x30 ;test if "0" xorwf c1,w btfss status,z goto xkhz1 movlw 0x30 ;test if "0" xorwf c2,w btfss status,z goto xkhz1 movlw 0x32 ;test if < 2 subwf c3,w btfsc status,c goto xkhz1 hz0 Call Entete movlw 0x84 ;set display address call LCD_Cde movlw 0x07 ;output first 7 characters movwf count1 movlw c1 ;MSD of freq movwf fsr hz1 movlw 0x30 ;test if "0" xorwf ind,w btfss status,z goto hz2 movlw 0x20 ;change preceeding "0's" to "space" call LCD_Putchar incf fsr,f decfsz count1,f goto hz1 goto hz3 hz2 movf ind,w call LCD_Putchar incf fsr,f decfsz count1,f goto hz2 hz3 movlw 0x20 ;"space" call LCD_Putchar movlw 0x48 ;"H" call LCD_Putchar movlw 0x7A ;"z" call LCD_Putchar movlw 0x20 ;"space" call LCD_Putchar movlw 0x20 ;"space" call LCD_Putchar movlw 0x20 call LCD_Putchar movlw 0x20 ;"space" call LCD_Putchar goto hz ; overflow movlw 0x01 ;clear display call LCD_Cde movlw 0x84 ;at colum 4 line 1 call LCD_Cde movlw 0x4F ;"O" call LCD_Putchar movlw 0x76 ;"v" call LCD_Putchar movlw 0x65 ;"e" call LCD_Putchar movlw 0x72 ;"r" call LCD_Putchar movlw 0x66 ;"f" call LCD_Putchar movlw 0x6C ;"l" call LCD_Putchar movlw 0x6F ;"o" call LCD_Putchar movlw 0x77 ;"w" call LCD_Putchar movlw 0x02 ;cursor at home call LCD_Cde call delay_500ms; goto mhz ; Entete call LCD_Home movlw 'F' call LCD_Putchar movlw 'r' call LCD_Putchar movlw 'q' call LCD_Putchar movlw ' ' call LCD_Putchar return ; affiche Num Msg en eeprom ; terminaison par caractere null ou taille de 16 cars ;============================== AffNumMsgEeprom movf Pointer_Msg,w movwf cnt2 bcf STATUS,C rlf cnt2,f rlf cnt2,f rlf cnt2,f rlf cnt2,f ; pointeur = NĝMsg * 16 clrf cnt3 affMsg_ movf cnt3,w addwf cnt2,w MOVWF EEADR bank1 BSF EECON1,RD ; bit 0 bank0 call delay_100us MOVF EEDATA,W XORLW 0 ; Is this the terminating char? BTFSC STATUS,Z GOTO EndAffNum call LCD_Putchar incf cnt3,f btfss cnt3,4 ; 16em car ? goto affMsg_ EndAffNum return org 0x2100 signature ;1234567890123456 DT "WCT6_2_LCD4bit ",0 DT "PIC16F84-04 ",0 DT "84-0143 ",0 DT "15 jan 2012 ",0 end ---------------------------------------------------------------------- Release build of project `C:\Mplab8\_Mesprojets_ASM\_Freq\Freqencemetre.mcp' started. Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38 Thu Jan 12 17:19:18 2012 ---------------------------------------------------------------------- Clean: Deleting intermediary and output files. Clean Warning: File "C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.o" doesn't exist. Clean Warning: File "C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.err" doesn't exist. Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.hex". Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.lst". Clean: Deleted file "C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.xrf". Clean Warning: File "C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.cof" doesn't exist. Clean: Done. Executing: "C:\Program Files\Microchip\MPASM Suite\MPASMWIN.exe" /q /p16F84 "wct6_1_120112.asm" /l"wct6_1_120112.lst" /e"wct6_1_120112.err" /x"wct6_1_120112.xrf" /w2 /aINHX8M Executing: "C:\Program Files\Microchip\MPASM Suite\mplink.exe" /p16F84 /l"C:\Program Files\Microchip\MPLAB ASM30 Suite\lib" /k"C:\Program Files\Microchip\MPASM Suite\LKR" "wct6_1_120112.o" /z__MPLAB_BUILD=1 /w /o"C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.cof" /x MPLINK 4.38, Linker Copyright (c) 1998-2010 Microchip Technology Inc. Errors : 0 Loaded C:\Mplab8\_Mesprojets_ASM\_Freq\wct6_1_120112.cof. ---------------------------------------------------------------------- Release build of project `C:\Mplab8\_Mesprojets_ASM\_Freq\Freqencemetre.mcp' succeeded. Language tool versions: MPASMWIN.exe v5.39, mplink.exe v4.38, mplib.exe v4.38 Thu Jan 12 17:19:19 2012 ---------------------------------------------------------------------- BUILD SUCCEEDED