Vous êtes sur la page 1sur 1

Timer 1 Timer 2 Timer 0

bank0 clrf TMR2 BANK1


clrf TMR1H BANK1 MOVLW B'00000111' ; prédiviseur de 256 :
clrf TMR1L bsf PIE1,TMR2IE ; autoriser interrupt en durée de débordement : 65.53 ms
bank1 TMR2 MOVWF OPTION_REG
bsf PIE1,TMR1IE ; autoriser interruptions movlw 0x7c BANK0
timer 1 movwf PR2 CLRF TMR0
bank0 ; repasser banque 0 BANK0 MOVLW B'10100000' ; autorisation de
bsf INTCON,PEIE ; interruptions bsf INTCON,PEIE ; interruptions l'intterupt Timer0
périphériques en service périphériques en service MOVWF INTCON
bsf INTCON,GIE ; interruptions en bsf INTCON,GIE ; interruptions en ; T0= 4*Tosc*26*Prédiv
service service ; n’oublier pas de baisser le flag à la fin.
movlw B'00110001' ; prédiviseur 8, movlw B'01001110' bcf INTCON,2 ; tay7 l flag daroori
TMR1ON = bit 0, b7,6 innutiles movwf T2CON ; b0 et b1 pour prédiv b1=1
movwf T1CON b0=0 : 16, b3==>b6 postdiv : 1001 = 10 et
; Programme principal non 9 ( voir datasheet ), b2 : TMR2 ON, B7
debut_programme innutilisé
goto debut_programme ; Temps = Tcyc * prédiv * postdiv * (PR2+1)
; n’oublier pas de baisser le flag à la fin. ; n’oublier pas de baisser le flag à la fin.
bcf PIR1,TMR1IF bcf PIR1,TMR2IF ; tay7 l flag daroori

CAN PWM Généralité


BANK1 movlw B'01100011' ; periode = 100 µs BANK0 macro
MOVLW 0XFF movwf PR2 ; Tc=T timer 2 sans postdiv bcf STATUS,RP0
MOVWF TRISA ; PORTA en entrée bcf STATUS,RP0 bcf STATUS,RP1
MOVLW b'10001000' ; config de ADCON1 debut endm
MOVWF ADCON1 ; bit7 = 1 : justification à movlw B'00000000' ;
droite, b5,6,4 innutilisés, b0,b1,b2,b3 pour movwf CCPR1L BANK1 macro
la config des pins ( 1000 : RA3 Vref+ et RA2 loop bsf STATUS,RP0
Vref-, les autre en analogiques ) incf CCPR1L,1 bcf STATUS,RP1
BANK0 movlw 0x3c endm
AGAIN subwf CCPR1L,0
MOVLW b'10000001' ; config de ADCON0 btfss STATUS,Z BANK2 macro
MOVWF ADCON0 ; diviseur de 32 ( b7 = 1, goto depart bcf STATUS,RP0
b6 = 0 ), b5,4,3 à 000 ==> RA0/AN0, bit 0 : goto debut bsf STATUS,RP1
ADON =1 : CAN On depart endm
CALL TEMPO1 ; tempo de 20 µs = Taq + T bsf CCP1CON,5
qui dépend de la T(°C) + ... bsf CCP1CON,4 ; bit 4 et 5 pour activer les BANK3 macro
BSF ADCON0,2 ; activer le Go/Done bits qui complètent le nombre de 10 bits bsf STATUS,RP0
ENCORE BTFSC ADCON0,2 bsf STATUS,RP0 bsf STATUS,RP1
GOTO ENCORE ; la CAN n'est pas terminé bcf TRISC,2 ; la pin RC2 : CCP1 en output endm
CALL TEMPO2 ; Wait 2*Tad = 3.2 µs bcf STATUS,RP0 ; **********************************
MOVF ADRESH,0 MOVWF PORTD movlw B'00000101' org 0x000 ; Adresse de
BSF STATUS,RP0 ; movwf T2CON ; prescale =1 , timer2 is on départ après reset
MOVF ADRESL,0 bsf CCP1CON,3 ; pour activer le mode PWM goto init
BCF STATUS,RP0 bsf CCP1CON,2 org 0x04
MOVWF PORTB call tempo push movwf w_temp
GOTO AGAIN ; CAN encore goto loop ;save w & status
; T = 22 µs tempo: swapf STATUS,W
TEMPO1 MOVLW 0X23 movlw 0xff movwf status_temp
MOVWF CMP1 movwf mavar
BOUC1 DECFSZ CMP1,1 B2: swapf status_temp,W ;
GOTO BOUC1 movlw 0xaf restore w & status
RETURN movwf compt movwf STATUS
; Temporisation de 3.2µs tempo d'attente ) B1: swapf w_temp, 1
TEMPO2 MOVLW 0X07 decfsz compt,1 swapf w_temp, W
MOVWF CMP2 goto B1 retfie
BOUC2 DECFSZ CMP2,1 decfsz mavar,1 ;***********************************
GOTO BOUC2 goto B2 LIST p=16F877
RETURN return #include <p16F877.inc>