1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223
| ;
; Initialisation pour l'assembleur. Ne rien changer sans raison précise!
LIST p=16F84A ;Défini le processeur
INCLUDE <p16F84A.inc> ;Définitions spécifiques
; Initialisation du registre de configuration du micocontroleur
; (pas de protection, pas de retard au démarrage, pas de chien de garde,
; oscillateur RC)
__CONFIG _CP_OFF & _PWRTE_OFF & _WDT_OFF & _XT_OSC
;********* Déclarations *************************
CBLOCK 0Ch ;Block de valeurs
Compt1: 1 ;Compteur 1 pour temporisation
Compt2: 1 ;Compteur 2 pour temporisation
Compt3: 1 ;Compteur 3 pour temporisation
Nmbre: 10 ;Zone de 16 nombres de 0 à F
CptNmbreD: 10 ;Compteur du nombre de code affiché
CptNmbreG: 10 ;Compteur du nombre de code affiché
PD: 10 ;Pointeur pour le 7 segments de droite
PG: 10 ;Pointeur pour le 7 segments de gauche
VD: 1 ;Variable permettant d'enregistrer la valeur de l'affichage de droite
VG: 1 ;Variable permettant d'enregistrer la valeur de l'affichage de gauche
ENDC ;Fin de la zone
;************************************************
; DEBUT DU PROGRAMME
;************************************************
Reset ORG 00h ;Adresse du Reset
goto Start ;Saut au début du programme
;************************************************
Start ORG 05h ;Début du programme principal
BSF STATUS,RP0 ;Sélection page 1
CLRF TRISB ;Port B en mode sortie (les 8 bits)
BCF TRISA,1 ;Sélection RA1 en sortie (affichage de gauche)
BCF TRISA,2 ;Sélection RA2 en sortie (affichage de droite)
BSF TRISA,3 ;Sélection RA3 en entrée (bouton de droite)
BSF TRISA,4 ;Sélection RA4 en entrée (bouton de gauche)
BCF STATUS,RP0 ;Sélection Bank 0
;************************************************
;Initialisation de codes des nombres en RAM
;************************************************
MOVLW .192 ;Nombre 0
MOVWF Nmbre
MOVLW .249 ;Nombre 1
MOVWF Nmbre+1
MOVLW .164 ;Nombre 2
MOVWF Nmbre+2
MOVLW .176 ;Nombre 3
MOVWF Nmbre+3
MOVLW .153 ;Nombre 4
MOVWF Nmbre+4
MOVLW .146 ;Nombre 5
MOVWF Nmbre+5
MOVLW .130 ;Nombre 6
MOVWF Nmbre+6
MOVLW .248 ;Nombre 7
MOVWF Nmbre+7
MOVLW .128 ;Nombre 8
MOVWF Nmbre+8
MOVLW .144 ;Nombre 9
MOVWF Nmbre+9
Main
;Adressage indirect par pointeur
MOVLW Nmbre ;Initialise l'adresse de départ du pointeur
MOVWF PD ;On charge la valeur de W dans PD
MOVWF PG ;On charge la valeur de W dans PG
MOVWF FSR ;Charge l'adresse de départ dans le registre d'adressage indirect
MOVLW .10 ;Initilisation du comteur de nombre à afficher (ici 16 nombres de 0 à F)
MOVWF CptNmbreD ;Le CptNmbreD peut avoir un maximum de 10 valeures (0,1,2,3,4,5,,6,7,8,9)
MOVWF CptNmbreG ;Le CptNmbreG peut avoir un maximum de 10 valeures (0,1,2,3,4,5,,6,7,8,9)
InitD
MOVLW Nmbre ;Initialise l'adresse de départ du pointeur
MOVWF PD ;On charge la valeur de W dans PD
MOVWF FSR ;Charge l'adresse de départ dans le registre d'adressage indirect
MOVLW .10 ;Initilisation du comteur de nombre à afficher (ici 16 nombres de 0 à F)
MOVWF CptNmbreD
goto Bouton
InitG
MOVLW Nmbre ;Initialise l'adresse de départ du pointeur
MOVWF PG ;On charge la valeur de W dans PG
MOVWF FSR ;Charge l'adresse de départ dans le registre d'adressage indirect
MOVLW .10 ;Initilisation du comteur de nombre à afficher (ici 16 nombres de 0 à F)
MOVWF CptNmbreG
goto Bouton
;************************************************
;Action lorsque l'on appuie sur le bouton
;************************************************
Bouton
BTFSC PORTA,3 ;Si le bouton droit est appuyé
goto DAppuye ;On va directement dans DAppuye
BTFSC PORTA,4 ;Si le bouton gauche est appuyé
goto GAppuye ;On va directement dans DAppuye
call Aff ;On appel l'affichage
goto Bouton ;Si on n'appuie pas sur un des 2 boutons, on va refaire la boucle
;************************************************
;Action que doit effectuer le bouton droit lorsque les 2 boutons sont appuyés
;************************************************
BoutonDroit
C'est ici que j'aimerais pouvoir mémoriser la valeur affiché sur l'affichage de droite
;************************************************
;Action que doit effectuer le bouton gauche lorsque les 2 boutons sont appuyés
;************************************************
BoutonGauche
Et ici pour celui de gauche
;***********************************************************
;Action lorsque le bouton de droit est appuyé (et maintenu)
;***********************************************************
DAppuye
BTFSC PORTA,4
goto BoutonGauche
call Aff
BTFSS PORTA,3
goto IncrementeD
goto DAppuye
GAppuye
BTFSC PORTA,3
goto BoutonDroit
call Aff
BTFSS PORTA,4
goto IncrementeG
goto GAppuye
IncrementeD
INCF PD,1
call Aff
DECFSZ CptNmbreD,1
goto Bouton
goto InitD
IncrementeG
INCF PG,1
call Aff
DECFSZ CptNmbreG,1
goto Bouton
goto InitG
Aff
MOVFW PD ;On bouge la valeur de PD dans W
MOVWF FSR ;On met la valeur de W dans FSR
MOVF INDF,w ;On accède a la valeur de W via INDF
MOVWF PORTB ;On affiche cette valeur sur le port B
BCF PORTA, 0x1 ; -->
BSF PORTA, 0x2 ;Qui correspond ici à l'écran de gauche
MOVLW .3
MOVWF Compt1
MOVLW .2
MOVWF Compt2
MOVLW .1
MOVWF Compt3
CALL SPTemp
MOVFW PG ;On bouge la valeur de PG dans W
MOVWF FSR ;On met la valeur de W dans FSR
MOVF INDF,w ;On accède a la valeur de W via INDF
MOVWF PORTB ;On affiche cette valeur sur le port B
BCF PORTA, 0x2 ; -->
BSF PORTA, 0x1 ;Qui correspond ici à l'écran de droite
MOVLW .3
MOVWF Compt1
MOVLW .2
MOVWF Compt2
MOVLW .1
MOVWF Compt3
CALL SPTemp
return
;*************************************************
; Sous-programme temporisation 0.5 s
;*************************************************
SPTemp
DECFSZ Compt1 ;Décrémente Compteur 1, saut si =0
Goto SPTemp
DECFSZ Compt2 ;Décrémente Compteur 2, saut si =0
Goto SPTemp
DECFSZ Compt3 ;Décrémente Compteur 3, saut si =0
Goto SPTemp
RETURN
Goto Main
;************** Fin du fichier assembleur ********************************
END |
Partager