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
| DEBORDEMENT EQU 0F1H ; déclaration de la variable qui compte le nombre de débordement du timer 0
COMPTEUR_ROUE EQU 0F2H ; déclaration de la variable qui compte de TOP du codeur incrémental
TEMPS_1TOUR_ROUE EQU 0F3H;
CONSTANTE_MULTIPLICATIVE EQU 0F4H;
VITESSE_KM_H EQU 0F5H;
TOUR_DE_ROUE EQU 0F6H;
ORG 00H ;
AJMP initialisation
ORG 060H;
main:
JB TOUR_DE_ROUE,Saut
Saut: lcall Calcul
;JB TF0,Saut2
;CJNE A,#014H,Compteurr ; saut pour incrémenter le compteur si le compteur n'est pas égal à 20
SJMP main
ORG 3H;la prochaine instruction sera à l'adresse 03H, adresse correspondant à l'interruption extérieure 0
LJMP Compteurr
ORG 0BH;la prochaine instruction sera à l'adresse 03H, adresse correspondant à l'interruption timer 0
LJMP Debordementt
ORG 90H ; la prochaine instruction sera à l'adresse 0H, adresse correspondant à l'interruption du RESET
initialisation:
;Registre
SETB EA
MOV SCON, #00000000b;
MOV SBUF, #00000000b;
MOV TMOD, #00000001b; choix du mode 1, timer en 16 bits
MOV TCON, #00000001b;
MOV PCON, #00000000b;
;Timer 0
MOV TH0,#0F8H; mise à zéro des 8 bits de poids forts du timer 0
MOV TL0,#030H; mise à zéro des 8 bits de poids faibles du timer 0
;Timer 1
MOV TH1,#0FH; mise à zéro des 8 bits de poids forts du timer 1
MOV TL1,#0FH; mise à zéro des 8 bits de poids faibles du timer 1
;Initialisation des ports
MOV P0,#0H
MOV P1,#0H
MOV P2,#0H
MOV P3,#11111100b
;Interruptions
MOV IP, #00000000b;
MOV IE, #10000101b;activation de l'interruption externe 0
;Variables
MOV COMPTEUR_ROUE,#0; initilisation à zéro du compteur
MOV Debordement,#0
MOV TEMPS_1TOUR_ROUE,#0
;MOV CONSTANTE_MULTIPLICATIVE,#1518H; (1,5*3600) permet de convertir un temps en mms en km/h, en utilisant un perimètre de 1,5 mètre
SETB TR0; lancement du timer 0
ljmp main
;fin initialisation
ORG 70H
Compteurr:
Push ACC
INC COMPTEUR_ROUE
MOV A,COMPTEUR_ROUE
CJNE A,#014H,Retour
SETB TOUR_DE_ROUE
Retour:
POP ACC
RETI
ORG 80H
Calcul: ;Calcul_du_temps_d'un_tour_de_roue
MOV TEMPS_1TOUR_ROUE,DEBORDEMENT ; valeur du temps d'un tour de roue en millisecondes
;DIV CONSTANTE_MULTIPLICATIVE,TEMPS_1TOUR_ROUE;
;MOV VITESSE_KM_H,CONSTANTE_MULTIPLICATIVE
RET
ORG 0A0H
Debordementt:
CLR TF0 ; remise à zéro du flag de débordement du timer 0
INC DEBORDEMENT
RETI
END |
Partager