; 26 juin 2015 ; essaie de transfert sur PIC 10F220 ; Program Memory Words Used: 105 soit 210 bytes ; RAM used 15 bytes ; problemo: ; pas de flag TIMER0 elapaed pour faire les tempo ; => Pooling constant pour le timing de la boucle ; pas d'EEPROM ! ; => usage de la ROM FLASH. pour stoker les 9 valeurs ; pour loger la config des 7 segments.. ; c'est meme plus simple qu'avec l'EEPROM ; a tester en reel ; 25 juin .. testé OK avec PIC12F683 ; ; GP0 <-- Analog Input ; GP1 --> data output ---> 1 A 74LS164 ; GP2 ---> Clock Output -> 8 Clk 74LS174 ; GP3 = MCLR ; Afficheur led 7 segment MAN4610A Anode commune ; 3-14 +5V ;1 ------ 3 QA 74164 ;13------ 4 QB 74164 ;10------ 5 QC 74164 ;8 ------ 6 QD 74164 ;7 ------ 10 QE 74164 ;2------ 11 QF 74164 ;11------ 12 QG 74164 ;9 ---- Not connected ; config vue par Pickit3 : ; FOSC interne =4MHZ cycle=1µS ; NOTA: deconnecter potar sur RA0 (=ICSP pin !) si probleme pour charger le HEX ; ou metre le potar de test à 50% ; Program Memory Words Used: ; Byte RAM used : List P=10F220 #Include ERRORLEVEL -302 ; #define Debug ; if config is set by MPLAB ;Address Value Field Category Setting ; FFF 0FEC IOSCFS Internal Oscillator Frequency Select bit4 MHz ; MCPU Master Clear Pull-up Enable bit Pull-up enable ; WDTE Watchdog Timer Enable bit WDT enabled ; CP Code protection bit Code protection o ; MCLRE GP3/MCLR Pin Function Select bit GP3/MCLR pin function is ;digital I/O, MCLR internally tied to VDD __CONFIG _IOSCFS_4MHZ & _WDTE_ON & _MCPU_ON & _MCLRE_OFF ; FOSC= Oscillateur interne =4MHz #Define Donnee GPIO,1 #Define Clck GPIO,2 ; PAS d'EPROM dans ce PIC ! ; 'ABCDEFGH.' ; DW b'11111101' ; Zero 0xFD ; DW b'01100001' ; 1 ; DW b'11011011' ; 2 ; DW b'11110011' ; 3 ; DW b'01100111' ; 4 ; DW b'10110111' ; 5 ; DW b'10111111' ; 6 ; DW b'11100001' ; 7 ; DW b'11111111' ; 8 0x81 ; DW b'11110111' ; 9 0x61 ; ; DT "12F683_7seg_74164_150626.asm",.13,.10,0 ; DT "Paulfjujo",.13,.10;0 ; Macros ClckStrobe MACRO ; Strobe the Data Bit bsf Clck NOP bcf Clck ENDM Cblock 0x010 Temp ; Temporary Value Used When Sending Out Data NOTemp ; Temporary Value to "NybbleOutput" Result ; ADC 8 bits mesure btmp ; affichage octet --> 3 digits de 0 a 255 -> LCD DIVIS ; diviseur DIVID ; QUOT ;quotient REMAIN ; reste ADDR_EEPROM count ; utilisé par tempos count1 ; compteur count2 count3 Somme :2 ; reservation pour un entier (mot) de 2 octest FinRam endc RamUtilisee EQU (FinRam-Temp) IF ( (RamUtilisee) > .15 ) ERROR "Attention debordement zone RAM de 16 bytes" ENDIF ORG 0x00 ; Processor Reset Vector goto START ; Go to beginning of program ORG 0x04 ; Interrupt Vector Location NOP NOP START ; Init HARDWARE CLRF GPIO ;Init GPIO MOVLW b'00001001' ; GP0 as analog input, GP1 GP2 as output , GP3 as Input TRIS GPIO ; setting analog on GP0 MOVLW b'01000001' ; ANS1=0 ANS0=1 CHS=00 ADON=1 MOVWF ADCON0 CLRWDT MOVLW b'00000111' ; GPPU=0=enabled, Presclar sur TIMER0 , Prescaler=1/256 OPTION CLRF count3 CLRF Somme CLRF Somme+1 CLRWDT ; ==== Boucle principale ==================== Loop ; lecture ADC AN0 Pin GP0 BSF ADCON0,GO_NOT_DONE ;Start conversion NOP #ifndef Debug Encore BTFSC ADCON0,GO_NOT_DONE ;Is conversion done? GOTO Encore ;No, test again MOVF ADRES,W ;Read MSB #else MOVLW .100 #endif MOVWF Result ;store it ; sommation Addwf Somme,f btfsc STATUS, C incf Somme+1,f ;test si 8 mesures effectuees incf count3,f btfss count3,3 ; test count3=8 Goto Suite ; accumulation non terminee ;Nb_de_valeurs_Atteint ; somme= somme /8 bcf STATUS,C ; carry=0 rrf Somme+1,F rrf Somme,F ; division par 2 mot de 16bits bcf STATUS,C rrf Somme+1,F rrf Somme,F ; division par 2 mot de 16bits bcf STATUS,C rrf Somme+1,F rrf Somme,F ; division par 2 mot de 16bits clrwdt ; movf Somme,W ; MOVWF DIVID ; usage direct de Somme comme DIVIDende pour econnomiser 2 octest Prgramme ; sinon debordement de 256..ROM space ; calcul vitesse en Beaufort movlw .27 ; 255/27=9.4 movwf DIVIS divide clrf QUOT ;Clear quotient clrf REMAIN ;Clear remainder movlw 0x08 ;Bit count movwf count1 loopd rlf Somme,F ;Shift dividend bit rlf REMAIN,F ;into remainder movf DIVIS,W ;Trial subtraction subwf REMAIN,W skpnc movwf REMAIN ;Subtraction was ok rlf QUOT,F ;Carry is result bit decfsz count1,F ;Next bit goto loopd MOVF QUOT,W call Get_it Display_it MOVWF Temp call Affiche_7seg CLRF count3 CLRF Somme CLRF Somme+1 Suite Call Tempo goto Loop ; ===== Subroutines ===== Affiche_7seg bcf Clck MOVLW .8 MOVWF count2 Aff1 NOP BCF STATUS,C ; set Carry to zero rrf Temp,f ; decalage à droite via Carry=0 btfss STATUS,C goto LowState bcf Donnee ; inversion bit data car Anode commune ,un 0 allume le segment led goto PulseClock LowState bsf Donnee ; inversion bit data car Anode commune un 1 eteint le segment led NOP PulseClock NOP bsf Clck NOP NOP bcf Clck NOP NOP decfsz count2,f goto Aff1 retlw 0 Tempo: CLRF TMR0 NOP MOVLW .200 Te0: MOVWF count Te1 MOVF TMR0,w BTFSS STATUS ,Z GOTO Te1 CLRF TMR0 DECFSZ count,F GOTO Te1 retlw 0 Flash_Messages EQU $ Get_it addwf PCL,f ; 'ABCDEFGH.' RETLW 0xFD ; b'11111101' ; 0 RETLW 0x61 ; b'01100001' ; 1 RETLW 0xDB ; b'11011011' ; 2 RETLW 0xF3 ; b'11110011' ; 3 RETLW 0x67 ; b'01100111' ; 4 RETLW 0xB7 ; b'10110111' ; 5 RETLW 0xBF ;b'10111111' ; 6 RETLW 0xE1 ;b'11100001' ; 7 RETLW 0xFF ;b'11111111' ; 8 0x81 RETLW 0xF7 ;b'11110111' ; 9 0x61 end ---------------------------------------------------------------------- Release build of project `C:\_Mplab8\_Mesprojets_ASM\_10F220\10Fxxx_2w_7segm.mcp' started. Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49 Fri Jun 26 18:43:05 2015 ---------------------------------------------------------------------- Clean: Deleting intermediary and output files. Clean: Deleted file "C:\_Mplab8\_Mesprojets_ASM\_10F220\10F220_7seg_74164_150626.o". Clean: Deleted file "C:\_Mplab8\_Mesprojets_ASM\_10F220\10F220_7seg_74164_150626.err". Clean: Deleted file "C:\_Mplab8\_Mesprojets_ASM\_10F220\10F220_7seg_74164_150626.hex". Clean: Deleted file "C:\_Mplab8\_Mesprojets_ASM\_10F220\10F220_7seg_74164_150626.lst". Clean: Deleted file "C:\_Mplab8\_Mesprojets_ASM\_10F220\10F220_7seg_74164_150626.cof". Clean: Done. Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\MPASMWIN.exe" /q /p10F220 "10F220_7seg_74164_150626.asm" /l"10F220_7seg_74164_150626.lst" /e"10F220_7seg_74164_150626.err" Executing: "C:\Program Files (x86)\Microchip\MPASM Suite\mplink.exe" /p10F220 "10F220_7seg_74164_150626.o" /z__MPLAB_BUILD=1 /o"10F220_7seg_74164_150626.cof" /M"10F220_7seg_74164_150626.map" /W /x MPLINK 4.49, Linker Device Database Version 1.14 Copyright (c) 1998-2011 Microchip Technology Inc. Errors : 0 Loaded C:\_Mplab8\_Mesprojets_ASM\_10F220\10F220_7seg_74164_150626.cof. ---------------------------------------------------------------------- Release build of project `C:\_Mplab8\_Mesprojets_ASM\_10F220\10Fxxx_2w_7segm.mcp' succeeded. Language tool versions: MPASMWIN.exe v5.51, mplink.exe v4.49, mplib.exe v4.49 Fri Jun 26 18:43:14 2015 ---------------------------------------------------------------------- BUILD SUCCEEDED