;********************************************************************** ; * ; Filename: servo.asm * ; Date: 14/03/2006 * ; File Version: 1 * ; * ; Author: Paul HEROIN * ; Company: Bricotronique.com * ; * ; * ;********************************************************************** ; * ; Files required: p16f628.inc * ; * ; * ; * ;********************************************************************** ; * ; Notes: Petit programme d'initiation permettant de controler la * ; position d'un servo-moteur à l'aide d'un bouton poussoir. * ; * ; * ; * ;********************************************************************** list p=16f628 ; list directive to define processor #include ; processor specific variable definitions __CONFIG H'3F32' ; on dirige la fréquence avec une résistance externe de 150 k ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. #DEFINE LED PORTA,3 ;***** VARIABLE DEFINITIONS w_temp EQU 0x70 ; variable used for context saving status_temp EQU 0x71 ; variable used for context saving CBLOCK 0x20 etat : 1 ;etat de la led etat_test :1 ENDC ;********************************************************************** ORG 0x000 ; processor reset vector goto main ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents swapf STATUS,w ; move status register into W register movwf status_temp ; save off contents of STATUS register ;todo ; on mettrai ici les instructions des interruptions ; /todo swapf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ; fonctions ;principal main init clrf TMR0 bsf STATUS, RP0 ;on fait ce qu'il y a à faire ds la banque 1 movlw B'00000111' movwf OPTION_REG ;on divise l'horloge par 256 pour TMR0 movlw B'11111111' movwf TRISA ;le portA sont des entrées movlw B'00000100' movwf TRISB ;on met des sorties sur le PORTB movlw B'11111111' movwf PR2 ;on règle la période de PWN bcf STATUS, RP0 ;on fait ce qu'il y a à faire ds la banque 0 movlw B'10000000' movwf INTCON ;on n'autorise pas les interruptions sur TMR0 movlw B'00001111' ;PWM mode movwf CCP1CON movlw B'0111111' ;activer TMR2 avec le décomptage max movwf T2CON movlw 0x07 movwf CMCON bcf STATUS, RP0 ;on se remet ds la banque 0 ;début programme start btfss PORTA,3 movlw B'0101000' ; bouton appuyé btfsc PORTA,3 movlw B'0011000' : bouton laché. movwf CCPR1L goto start END ; directive 'end of program'