;********************************************************************* ; NOM: pictrain2-1.asm ; Date: 15/05/2007 ; Circuit: CIMEC ; Auteur: PSi ; ******************************************************************** LIST p=PIC12F675 ; Définition de processeur #include ; Définitions des constantes errorlevel -302 __CONFIG _CPD_OFF & _BODEN_OFF & _CP_OFF & _WDT_OFF & _PWRTE_ON & _MCLRE_OFF & _INTRC_OSC_NOCLKOUT ; oscillateur interne 4M ;********************************************************************* ; DEFINE #define IO_Sortie_Sens GPIO,0 ; Sortie sens de la marche #define IO_Sortie_Train GPIO,1 ; Sortie fréquence de commande #define IO_Acceleration GPIO,2 ; Entrée bouton accélération #define IO_Freinage GPIO,3 ; Entrée bouton freinage #define IO_Stop GPIO,4 ; Entrée Stop #define IO_Sens GPIO,5 ; Entrée changement de sens ;********************************************************************* ; DECLARATIONS DE VARIABLES SPECIFIQUES C_Cran EQU d'6' ; Valeur d'un cran de vitesse = 6 CBLOCK 0x020 ; Début de la zone des variables VA_Vitesse ; Valeur vitesse (entre 0 et 255) VA_Compteur_Inertie ; Compteur de lecture des entrées ENDC ; Fin de la zone des variables #include ; Paramétrage standard (list1001) ;********************************************************************* ; PARAMETRES SPECIFIQUES BANK1 ; Registres de contrôle des E/S et des résistances de rappel movlw b'00111100' ; Direction des entrées-sorties movwf TRISIO ; Bits 2 à 5 en entrée movwf WPU ; avec résistances de rappel ; Paramètres du prédiviseur bsf OPTION_REG,1 ; Pré-diviseur sur 16 bsf OPTION_REG,0 ; Registre contrôle interruptions INTCON clrf INTCON bsf INTCON,GIE ; Activation des interruptions bsf INTCON,T0IE ; Interruption TMR0 activée BANK0 clrf VA_Vitesse ; Initialisation vitesse à 0 bcf IO_Sens ; Initialisation sens à 0 (list1002) ;********************************************************************* ; Boucle principale ;********************************************************************* BouclePrincipale movf VA_Compteur_Inertie,F btfss STATUS,Z ; Test compteur à 0 goto BouclePrincipale ; Sinon boucle ; Traitement des commandes (boutons) movlw d'40' ; Chargement compteur movwf VA_Compteur_Inertie ; (list1003) movfw VA_Vitesse ; Chargement vitesse dans W btfsc IO_Acceleration ; Test si accélération goto ET_Suite1 addlw C_Cran ; Augmentation de la vitesse btfsc STATUS,C ; Test si dépassement movlw d'255' ; Limitation à 255 ET_Suite1 ; btfsc IO_Freinage ; Test si freinage goto ET_Suite2 movlw C_Cran ; Diminution de la vitesse subwf VA_Vitesse,W ; btfss STATUS,C ; Test si dépassement clrw ; Limitation à 0 ET_Suite2 btfss IO_Stop ; Test si arrêt urgence clrw ; Vitesse à 0 (list1006) movwf VA_Vitesse ; Charger vitesse dans le registre (list1007) movf VA_Vitesse,F ; Test vitesse btfss STATUS,Z ; Si 0, traitement inversion goto BouclePrincipale ; Sinon, fin des traitements (list1008) ; Traitement des commandes si vitesse à 0 BANK1 bcf TRISIO,4 ; Passage bouton Stop en sortie BANK0 bsf IO_Stop ; Allumage de la LED (list1009) ET_Boucle_Sens ; Attente commande btfss IO_Acceleration ; Test bouton accélération goto ET_Fin_Boucle_Sens ; Si 0, fin état vitesse 0 btfsc IO_Sens ; Si changement de sens goto ET_Boucle_Sens ; Sinon attente movlw b'00000001' ; Inversion sens xorwf GPIO,F ; (list1010) ET_Fin_Boucle_Sens ; Fin traitement vitesse 0 BANK1 bsf TRISIO,4 ; Bouton Stop repasse en entrée BANK0 incf VA_Vitesse,F ; Vitesse = 1 goto BouclePrincipale ; (list1011) ; -------------------------------------------------------------------- ;********************************************************************* ; Sous programmes ;********************************************************************* ; interruption TMR1 ; appelée à chaque interruption TMR1 SP_inttimer1 ; ne sera pas utilisé dans ce montage return ;********************************************************************* ; Interruption TMR0 ; appelée à chaque interruption TMR0 SP_inttimer0 BANK0 btfsc IO_Sortie_Train ; Test sortie bas goto ET_Sortie_Haut ; Sinon la sortie est 'haut' ET_Sortie_Bas bsf IO_Sortie_Train ; Mettre sortie à 'haut' movf VA_Vitesse,W sublw d'255' ; Chargement timer avec inverse fréquence movwf TMR0 decf VA_Compteur_Inertie,F return ; Fin d'interruption timer ET_Sortie_Haut ; Si sortie haut bcf IO_Sortie_Train ; Sortie bas movf VA_Vitesse,W ; Chargement timer avec valeur fréquence movwf TMR0 return ; (list1012) END