;********************************************************************** ; * ; Filename: Bruno.asm * ; Date: 31/08/06 * ; File Version: * ;********************************************************************** list p=16f628A ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _DATA_CP_OFF & _LVP_OFF & _BOREN_OFF & _MCLRE_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC ;***** VARIABLE DEFINITIONS Rapport EQU 0x72 ; variable contenant la valeur du duty flags EQU 0x73 ; flag divers Frequence EQU (.256-.208)+.6 ; 24Khz pour cycle µC de 200ns #define Flag flags, 0 ; indication de début du DC ;********************************************************************** ORG 0x000 ; processor reset vector goto Init ; go to beginning of program ORG 0x004 ; interrupt vector location movlw Frequence ; recharger la péride du PWM movwf TMR0 bsf PORTB, 0 ; sortie du DC à un bcf INTCON, T0IF ; effacer le flag de débordement du timer0 bsf Flag ; indiquer qu'il faut mettre en service le DC retfie ; return from interrupt ;*****************Initialisation*************************** Init clrf PORTB ; init le portb bsf STATUS, RP0 ; passer en bank1 movlw H'FE' movwf TRISB ; sortie pour RB0 clrf OPTION_REG bsf OPTION_REG, PSA ; pas de prédiviseur sur tmr0 bcf STATUS, RP0 ; passer en bank0 movlw Frequence ; movwf TMR0 ; Charger période bcf INTCON, T0IF ; effacer le flag de débordement du timer0 bsf INTCON, T0IE ; accès INT du timer bsf INTCON, GIE ; accès INT clrf flags ; boucle principale main btfss Flag ; tester si le flag de débordement du timer0 est positionné goto main ; non, alors retour bcf Flag ; oui, effacer flag movf Rapport, w ; charger DC dans W call Duty ; goto main ;***********Table des DC *************************** Duty addwf PCL, f ; sauter temps exact du DC variable i i = .0 While i< .192 nop i +=.1 endw bcf PORTB, 0 ; fin du DC donc sortie à Zéro return END ; directive 'end of program'