;********************************************************************** ; Programme d'initiation aux PIC 16F628 : chenillard type K2000 * ; avec variation de la vitesse selon deux manières différentes : * ; Une manière logicielle, et une manière Hardware avec * ; potentiomètre externe * ;********************************************************************** ; * ; NOM: K2000 * ; Date: 09/03/2006 * ; Version: 1.0 * ; Circuit: Platine d'essais * ; Auteur: Paul HEROIN * ; * ;********************************************************************** ; * ; Fichier requis: P16F628.inc * ; * ;********************************************************************** LIST p=16f628 ; Définition de processeur #include ; Définitions de variables __config H'3F32' ; configuration permettant notemment de commander la fréquence d'horloge ;par une résistance externe et d'enlever le watchdog. cf MPLAB / Configure/ Configuration Bits ;********************************************************************* ; DEFINE * ;********************************************************************* ; on définit #DEFINE LED PORTB,4 ; Led 1 #DEFINE LED2 PORTA,3 ; Led 2 #DEFINE LED3 PORTA,1 ; Led 3 #DEFINE LED4 PORTA,0 ; Led 4 #DEFINE LED5 PORTB,0 ; Led 5 #DEFINE LED6 PORTB,1 ; Led 6 #DEFINE BOUTON PORTB,2 ; bouton-poussoir ;********************************************************************* ; DECLARATIONS DE VARIABLES * ;********************************************************************* CBLOCK 0x20 ; début de la zone variables cmpt1 : 1 ; compteur de boucles 1 cmpt2 : 1 ; compteur de boucles 2 cmpt3 : 1 ; compteur de boucles 3 vitesse : 1 ; vitesse de défilement ENDC ; Fin de la zone ;********************************************************************** ; DEMARRAGE SUR RESET * ;********************************************************************** org 0x000 ; Adresse de départ après reset goto init ; Adresse 0: initialiser ;********************************************************************* ; INITIALISATIONS * ;********************************************************************* init clrf PORTA ; Sorties portA à 0 clrf PORTB ; sorties portB à 0 clrf EEADR ; permet de diminuer la consommation bsf STATUS,RP0 ; sélectionner banque 1 movlw H'0008' ; charger masque movwf OPTION_REG ; initialiser registre option movlw B'11100000' movwf TRISA ; on met le port A comme sortie movlw B'00000100' movwf TRISB ; on met le port B en sortie à part le port contenant le bouton movlw B'00000000' movwf VRCON ; on désactive la référence de tension movlw 2 movwf vitesse ; on se place sur la petite vitesse movlw 0x07 movlw CMCON ; on désactive les comparateurs ; Effacer RAM ; ------------ movlw 0x0c ; initialisation pointeur movwf FSR ; pointeur d'adressage indirec bcf STATUS,RP0 ; repasser banque 0 goto start ; sauter au programme principal ;********************************************************************* ; SOUS-ROUTINE DE TEMPORISATION * ;********************************************************************* ;--------------------------------------------------------------------- ; Cette sous-routine introduit un retard de 500.000 µs. ; Elle ne reçoit aucun paramètre et n'en retourne aucun ;--------------------------------------------------------------------- tempo movfw vitesse ; pour 2 boucles movwf cmpt3 ; initialiser compteur3 boucle3 clrf cmpt2 ; effacer compteur2 boucle2 clrf cmpt1 ; effacer compteur1 boucle1 ;nop ; perdre 1 cycle decfsz cmpt1,f ; décrémenter compteur1 goto boucle1 ; si pas 0, boucler decfsz cmpt2,f ; si 0, décrémenter compteur 2 goto boucle2 ; si cmpt2 pas 0, recommencer boucle1 decfsz cmpt3,f ; si 0, décrémenter compteur 3 goto boucle3 ; si cmpt3 pas 0, recommencer boucle2 return ; retour de la sous-routine ;********************************************************************* ; PROGRAMME PRINCIPAL * ;********************************************************************* vlent ; sous programme définissant la vitesse lente movlw B'10' movwf vitesse return vrapide ; sous programme définissant la vitesse rapide movlw B'01' movwf vitesse return task bsf LED ; allumer la LED bcf LED2 ; éteindre LED bcf LED3 bcf LED4 bcf LED5 call tempo ; appeler la tempo de 0.5s bcf LED bsf LED2 call tempo bcf LED2 bsf LED3 call tempo bcf LED3 bsf LED4 call tempo bcf LED4 bsf LED5 call tempo bcf LED5 bsf LED6 call tempo bcf LED6 bsf LED5 call tempo bcf LED5 bsf LED4 call tempo bcf LED4 bsf LED3 call tempo bcf LED3 bsf LED2 call tempo return start btfss PORTB,2 call vrapide ; à faire si le bouton est enfoncé (l'entrée passe à 0) btfsc PORTB,2 call vlent ; à faire si le bouton est relaché call task goto start ; boucler END ; directive fin de programme