RAPPORT DE TP D’ARCHITECTURE DES CALCULATEURS
ecole superieur multinationale de telecommunication
|
Rapport de TP d’architecture des calculateurs
|
TP2
|
GROUPE:
DELMA NATHAN K
YAKANON JEAN
DELMA NATHAN K
YAKANON JEAN
CLASSE :
INGC1
INGC1
ENSEIGNANT :
B NIANG
B NIANG
ANNEE :
2009-2010
2009-2010
Dans ce TP, nous réaliserons un programme qui allume une LED branchée sur PA4 pendant une seconde quand on ferme l’interrupteur branché sur PB0.
|
1. THEME
2. BUT
Dans ce TP, il s’agit de réaliser un programme qui lit l’état d’un interrupteurs sur PB0. S’il on l’appuie, on allume alors la LED sur PB4 pendant une seconde.
Nous réaliserons D’abords l’algorithme de temporisation de 50ms, ensuite le programme principal sans anti rebond et enfin avec anti rebond.
3. CAHIER DE CHARGES
· lire PB0 (bit 0 du port B) ;
· s’il est ferme, on allume la LED PA4 (bit 4 du port A) pendant une seconde puis on l’éteint ;
· la LED ne s’allume plus jusqu'à ce que l’interrupteurs soit relâchée puis fermée a nouveau ;
· la durée de fermeture de l’interrupteur n’a pas d’incidence sur la durée d’allumage du LED ;
· gérer les rebonds.
4. SCHEMAS DE PRINCIPE DU DISPOSITIF
Le dispositif physique se constitue du microcontrôleur 68HC11, d’un interrupteurs sur PB0; et une LED sur PA4.
VCC
PB0
68HC11
PA4
0V
5. ORGANIGRAMMES
Figure 1 - Algorithme de temporisation et programe principale
· Le premier (tempo_50ms) réalise une temporisation de 50 ms ;
50ms correspond a 50.10^-3 / 10^-6 = 50000 cycles.
Les instructions LDX, DEX, CMPX, BNE, RTS durent respectivement 3, 3, 4, 3, 5 cycles d’horloges. Nous pouvons calculer alors la durée de la temporisation D.
D== 3+(3+4+3)*(X+1) =50000
=> 50000 =3+10*X+10
=> X=(50000-13)/10 =~4998 = 1386H
X=1386H donne une temporisation effective de 49997 soit 49,99ms
Les instructions LDX, DEX, CMPX, BNE, RTS durent respectivement 3, 3, 4, 3, 5 cycles d’horloges. Nous pouvons calculer alors la durée de la temporisation D.
D== 3+(3+4+3)*(X+1) =50000
=> 50000 =3+10*X+10
=> X=(50000-13)/10 =~4998 = 1386H
X=1386H donne une temporisation effective de 49997 soit 49,99ms
· le deuxième réalise une temporisation d’une seconde;
1 seconde correspond a 1 / 10^-6 = 1000000 cycles.
Les instructions LDA, DECA, CMPA, JSR, BNE, RTS durent respectivement 2, 2, 2, 5, 3, 5 cycles d’horloges. Nous pouvons calculer alors la durée de la temporisation D.
La durée de la temporisation D = 2+(2+2+(5+49997)+3)*(B+1)+5 =1000000
=> 50009*B+50016=1000000
=> B=(1000000-50016)/50009=18,996 =~19 = 13H
B= 13H donne une temporisation effective de 1000187 cycles soit 1,000 secondes
Les instructions LDA, DECA, CMPA, JSR, BNE, RTS durent respectivement 2, 2, 2, 5, 3, 5 cycles d’horloges. Nous pouvons calculer alors la durée de la temporisation D.
La durée de la temporisation D = 2+(2+2+(5+49997)+3)*(B+1)+5 =1000000
=> 50009*B+50016=1000000
=> B=(1000000-50016)/50009=18,996 =~19 = 13H
B= 13H donne une temporisation effective de 1000187 cycles soit 1,000 secondes
· le troisième est le programme principal sans anti rebond ;
· le quatrième est le programme principal avec anti rebond.
L’anti rebond est réalisé en appelant la temporisation de 50ms pour attendre la stabilisation de l’entrée.
6. CODE
; TD EXO2
PORTC EQU $1006 ; registre de donnee du port C
PORTA EQU $1000 ; registre de donnee du port A
DDRA EQU $1001 ; registre de direction du portA
DDRC EQU $1007 ; registre de direction du portC
ORG $FE00 ; adresse d’origine du programme
LDAA #$FF
STAA DDRA ; initialisation du PORTA en sortie
LDAA #$00
STAA DDRC ; initialisation du PORTC en entrée
_ENTREE:
LDAA PORTC ; lecture de l’entrée
BSR _TEMPO_50MS ; ANTIREBOND
ANDA #$01 ; masquage pour avoir PB0
BEQ _ENTREE ; boucler tant qu’interrupteur a 0
LDAA #$10
STAA PORTA ; allumer PA4 si interrupteur a 1
BSR _TEMPO_1S ; attendre 1 seconde
LDAA #$00
STAA PORTA ; éteindre la LED sur PA4
_WAIT_0:
LDAA PORTC ; lire l’entrée
BRS _TEMPO_50MS ; ANTIREBOND
ANDA #$01 ; masquage => l’état de l’interrupteurs
BNE WAIT_0 ; attendre tant que pas relâchée
BRA _ENTREE ; si relâche, alors on va au début
SWI ; fin du programme principal
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Temporisation d'une seconde ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_TEMPO_1S:
LDAB #$14 ; initialiser B
_LOOP_1S:
DECB ; décompter B
BSR _TEMPO_50MS ; appel la sous routine de tempo de 50ms
CMPB #$00
BNE _LOOP_1S ; décompter tant que B n’est pas nul
RTS ; sortir de la sous routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;; Temporisation de 50 milliseconde ;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_TEMPO_50MS:
LDX #$1386 ; initialiser X
_LOOP_50MS:
DEX ; décompter X
CPX #$0000
BNE _LOOP_50MS ; décompter X tant que X n’est pas nul
RTS ; sortir de la sous routine
END
7. CONCLUSION
Dans ce TP, nous avons eu recours aux sous-programmes qui optimisent la taille du programme et améliore sa lisibilité, Aussi nous avons utilisé la temporisation (durée d’activité de la LED) et les antis rebond pour une gestion correcte des changements d’état de l’interrupteur qui en réalité passe par des états transitifs (ou il prend des valeurs aléatoires).
Page 2 sur 6
|
TP 2
|
Commentaires