Compte rendu TP microcontrôleur

Preview:

Citation preview

ISPG : 2009/2010

Jeudi 1er Avril 2010

Comptes rendus des TP du 68HC11Binme : SALHI Samir DAHMANI Rabii - TELECOM 1 -

Enseignant :

THIEBAUT Bernard

Binme : SALHI Samir & DA HMANI Rabii

Compte rendu TP0 microcontrleur Objectifs principaux :Prsentation de la carte de dveloppement CMD11A8 (ou E1). Prise en main de la chaine de dveloppement. Ecriture et dition de programmes. Assemblage et linkage. Etude des fichiers .LST et .S19. Tlchargement sur la carte cible. Utilisation des principales commandes du moniteur Buffalo. Premiers pas dans le dbogage de programmes.

1) Voici un bout du programme REMPLIS.LST 0029 0030 3000 ORG * le code du programme CODE * dbut de la zone de code dfinie par deuxime ORG

0031 ******************************************************************************** 0032 3000 b6 20 00 0033 3003 ce 22 00 >> On observe dans la 1r e colonne le n de ligne du code (0029, 0030, etc..) Dans me colonne on observe quelle adresse on se trouve. la 2 LDAA sexcute bien en 3 cycles car de ladresse 3000 on passe 3003 avant dexcuter la prochaine instruction 2) Dans ladresse $3000 on a b6, b6 tant le code machine de LDAA . Dans ladresse $3001 on a 20 et dans $3001 on 00. 20 et 00 tant ladresse de VALEUR car dans les donnes du programme on a : 0025 2000 00 VALEUR * cette constant VALEUR se situe ladresse 2000 20 sur 8 bit 0010 000 et 00 est cod 0000 0000 3) En changeant la valeur de la constante CODE $4000, le programme commence $4000 au lieu de $3000 comme prcdemment. *tant cod [ 4] [3] LDAA VALEUR LDX #DEBUT_ZONE

68HC11 : co mpt e ren du du TP1

Page 1

Binme : SALHI Samir & DA HMANI Rabii

La directive ORG point ainsi sue une adresse de dpart que lon impose, et donc si on change ladresse de dpart, toutes les adresses sont dcales de ce changement.

4) CODE DATA idem 4000 2000 * code est enregistr ladresse $4000 * DATA est enregistr ladresse $4000 FIN_ZONE 2301 INIT 0000 REMPLIR 4006 VALEUR 2000 DEBUT_ZONE 2200 * *idem

* code est enregistr ladresse $4000 et utilis a la ligne 0010 et 0030 DATA 2000 *0009 0023 * DATA enregistr a ladresse $2000 et utilis a la ligne 0009 et 0023 DEBUT_ZONE 2200 *0017 0033 * pareille que DATA et CODE FIN_ZONE 2301 *0018 0037 * idem INIT 0000 *0016 0025 REMPLIR 4006 *0034 0038 VALEUR 2000 *0025 0032 5) Le fichier .S19 rsume les diffrentes instructions, lvolution des adresses modifies et leur taille ainsi que les erreurs.

CODE

4000 *0010 0030

11) Essais du programme Pour modifier le registre A >Rm A Puis taper une valeur au choix par exemple 30 Pour vrifier taper >Rd On modifie et vrifie de la mme manire pour le registre X sauf que lon tapera Rm X pour le modifier Pour visualiser le contenu de la mmoire en ladresse $2200 et $2210 on tape la commande : >md 2200 Son contenu et nimporte quoi ce sont les valeurs dorigine qui sont contenu des la mise en tension de la carte. Pour modifier les cases mmoires entre $2200 et $2300 taper : >MM 2200 X Y J. Avec X la valeur que lon aura mise dans $2000, Y la valeur mise dans $2201 etc

68HC11 : co mpt e ren du du TP1

Page 2

Binme : SALHI Samir & DA HMANI Rabii

Si le PC ne point pas vers la premire instruction du programme, on va excuter nimporte quoi. Une fois le programme excut en entier, il ny a plus que des 0 dans les adresses de $2200 $2210 Par rapport au mode pas pas, GO permet dexcuter le programme en entier. La boucle main ne rend pas la main a cause de la boucle infini SWI permet de mettre fin a la boucle infini caus par BRA, ainsi la fin, le programme nous redonne la main. A ladresse $2300 on na pas la valeur 0 a cause de la comparaison CPX, qui est une comparaison stricte. Il suffit de mettre FIN_ZONE 2301 pour mettre des 0 jusqu ladresse $2300 compris. Programme pour que la case $2200 contienne $00, la case $2201 contienne $01, la case $2202 contienne $02, etc******************************************************************************** * initialiser une zone de mmoire RAM * comprise entre les adresses DEBUT_ZONE et FIN_ZONE incluses * avec la mme valeur INIT ********************************************************************************

* dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA CODE EQU EQU $2000 $3000 * dbut de la zone des donnes du programme * dbut de la zone de code du programme

********************************************************************************

* dfinition des constantes software ******************************************************************************** INIT DEBUT_ZONE FIN_ZONE EQU EQU EQU $2300 $0 $2200 * valeur d'initialisation * debut de la zone initialiser

* fin de la zone initialiser

******************************************************************************** * les donnees du programme ORG DATA * dbut de la zone de donnes dfinie par un premier ORG

******************************************************************************** VALEUR FCB #INIT * la variable VALEUR est initialise avec INIT

68HC11 : co mpt e ren du du TP1

Page 3

Binme : SALHI Samir & DA HMANI Rabii

********************************************************************************

* le code du programme ORG CODE * dbut de la zone de code dfinie par deuxim e ORG

******************************************************************************** LDAA VALEUR * charge A avec la variable valeur, donc avec INIT

LDX REMPLIR STAA

#DEBUT_ZONE 0,X

* X pointe sur le dbut de la zone initialiser * utilisation de l'adressage index pour *crire A l'adresse pointe par X

INX CPX BNE #FIN_ZONE REMPLIR

* X pointe sur la case memoire suivante * a t'on fini ? ( adresse FIN_ZONE atteinte ? ) * non, alors on continue

FIN

BRA

FIN

* boucle d'attente infinie en fin de *programme car sinon le programme

* *

continue en xcutant ce qu'il y a aprs et comme il y a n'importe quoi a plante ... c'est l'quivalente en C d'un While(1);

********************************************************************************

END

* directive d'assemblage pour indiquer * l'assembleur

*

la fin du fichier source

ASM nous donne les dtails des tapes, ce qui est intressant pour vrifier sil y a des erreurs 12) Partie ou on passe les paramtre au module * avec la mme valeur INIT********************************************************************************

68HC11 : co mpt e ren du du TP1

Page 4

Binme : SALHI Samir & DA HMANI Rabii

* dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA CODE EQU EQU $2000 $3000 * dbut de la zone des donnes du programme * dbut de la zone de code du programme

******************************************************************************** * dfinition des constantes software ******************************************************************************** INIT DEBUT_ZONE FIN_ZONE EQU EQU EQU $0 $2200 $2300 * valeur d'initialisation * debut de la zone initialiser * fin de la zone initialiser

******************************************************************************** * les donnees du programme ORG DATA * dbut de la zone de donnes dfinie par un premier ORG

******************************************************************************** VALEUR FCB #INIT * la variable VALEUR est initialise avec INIT

******************************************************************************** Partie ou on appel le module : JSR SP_REMPLIR ( on appel le module se nommant SP_REMPLIR) Rendre la main au moniteur par : SWI

68HC11 : co mpt e ren du du TP1

Page 5

Binme : SALHI Samir & DA HMANI Rabii

TP1 microC : 68HC11 Objectifs Principaux :Utilisation des directives et des instructions les plus courantes. Les modes dadressage. Ecriture de programmes en assembleur. Base de la programmation modulaire. Modules de gestion des chanes de caractres. Modules de conversion. Principe du passage de paramtres par la pile.

A/DIRECTIVES DASSEMBLAGE ET INSTRUCTIONS DE BASE : 1. Directives et transfert de base avec les instructions de type LOAD et STORE 1.1 Dfinir une constante valant 130 en dcimal :Programme :******************************************************************************** * initialiser une zone de mmoire RAM ******************************************************************************** * dfinition des constants hardwares pour les donnes et le code du programme ******************************************************************************** V_MAX_FRANCE RAM PROG EQU 130 * dfini une constante valant 130 en dcimale

EQU $2000 EQU $3000

******************************************************************************** * les donnes du programme ORG RAM * dbut de la zone de donnes dfinie par un premier ORG

******************************************************************************** V_MAX_AUTOROUTE RMB 1 * * 1 octet pour stoker la valeur courante

V_MAX-AUTOROUTE

******************************************************************************** * le code du programme ORG PROG * dbut de la zone de code dfinie par deuxime ORG

******************************************************************************** MAIN68HC11 : co mpt e ren du du TP1

LDAA #V_MAX_FRANCE * en charge dans le registre A la valeur dePage 1

Binme : SALHI Samir & DA HMANI Rabii

*

V_MAX_FRANCE

Adressage immdiat

STAA V_MAX_AUTOROUTE * SWI *

* on stock le contenue de A ( V_MAX_FRANCE) dans

l'adresse ( V_MAX-AUTOROUTE) * boucle d'attente infinie

Equivalent en C d'un While(1);

******************************************************************************** END * la fin du fichier source * directive d'assemblage pour indiquer l'assembleur

1.2. Dfinir une constante valant 130 en dcimal avec une seule directive : Utilisation de FCB et sans aucune ligne de code :Dans ce cas on la directive FCB initialise la variable directement dans la zone Code. Par contre, la premire faon ninitialise pas la variable directement dans la zone Code car la directive RMB ne le permet pas. Donc elle sera initialise par le compilateur. Programme :******************************************************************************** * dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** V_MAX_FRANCE PROG EQU 130 * dfini une constante valant 130 en dcimale

EQU $3000 * dfini une constante d'1 octet a l'adresse RAM

V_MAX_AUTOROUTE FCB 130

******************************************************************************** * le code du programme ORG PROG * dbut de la zone de code dfinie par deuxime ORG

******************************************************************************** SWI * Boucle infinie... Equivalent en C d'un While(1);

******************************************************************************** END * la fin du fichier source * directive d'assemblage pour indiquer l'assembleur

2. Comparaison : instruction de type CMP et registre CCR :68HC11 : co mpt e ren du du TP1 Page 2

Binme : SALHI Samir & DA HMANI Rabii

Programme :******************************************************************************** * initialiser une zone de mmoire RAM ********************************************************************************* * dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** V_MAX_FRANCE RAM PROG EQU 130 * dfini une constante valant 130 en dcimale

EQU $2000 EQU $3000

******************************************************************************** * les donnes du programme ORG RAM * dbut de la zone de donnes dfinie par un premier ORG

******************************************************************************** V_MAX_AUTOROUTE RMB 1 * VITESSE *Rserve 1 octet pour stoker la valeur courante

V_MAX-AUTOROUTE RMB 1

******************************************************************************** * le code du programme ORG PROG * dbut de la zone de code dfinie par deuxime ORG

******************************************************************************** LDAA #V_MAX_FRANCE * en charge dans le registre A la valeur de * V_MAX_FRANCE Adressage immdiat

MAIN *

STAA V_MAX_AUTOROUTE l'adresse ( V_MAX-AUTOROUTE) CMPA VITESSE SWI

* on place le contenue de A ( V_MAX_FRANCE) dans

* .Boucle infinie Equivalent en C d'un While(1);

******************************************************************************** END * la fin du fichier source * directive d'assemblage pour indiquer l'assembleur

3. Premire faon de faire un masque : instruction AND et/ou OR 3.1 Forcer 0 les bits de poids fort dun caractre CAR (utiliser un masque) :Le masque tant $0F car cest le nombre qui permet davoir le masquage en utilisant un AND logique :

68HC11 : co mpt e ren du du TP1

Page 3

Binme : SALHI Samir & DA HMANI Rabii

Progarmme :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 EQU $0000 * dbut de la page 0 (RAM interne du HC11) DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme *************************************************************************** * dfinition des constantes software * *************************************************************************** MASK EQU #$0F *************************************************************************** ORG DATA * dbut deuxime zone des globales CAR FCC '5' * Caractre initialis 5

*************************************************************************** * le code du programme ORG CODE * dbut de la zone de code *************************************************************************** MAIN LDAA CAR * Charger la valeur de CAR ANDA #MASK * Multiplier A par 0F pour forcer 0 les 4 bits les plus forts STAA CAR* Renvoyer la valeur trouve A SWI * retour au moniteur

*************************************************************************** * module: Forcer 0 les bits de poids fort * RTS * point de sortie du module * * = retour l'appelant ************************************************************************** END * fin du fichier source

3.2 Forcer 1 les bits de poids fort dun caractre CAR (utiliser un masque) :Le masque tant $F0 car cest le nombre qui permet davoir le masquage en utilisant un OR

Programme :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 DATA CODE EQU EQU EQU $0000 $2000 $3000 * dbut de la page 0 (RAM interne du HC11) * dbut de la zone des donnes du programme * dbut de la zone de code du programme

***************************************************************************68HC11 : co mpt e ren du du TP1 Page 4

Binme : SALHI Samir & DA HMANI Rabii

* dfinition des constantes software *************************************************************************** MASK EQU #$0F

*************************************************************************** ORG CAR FCC DATA '5' * dbut deuxime zone des globales * Caractre initialis 5

*************************************************************************** * le code du programme ORG CODE * dbut de la zone de code

*************************************************************************** MAIN LDAA CAR ANDA #MASK * Charger la valeur de CAR * Multiplier A par 0F pour forcer 0 les 4 bits les plus forts

STAA CAR* Renvoyer la valeur trouve A

SWI

* retour au moniteur

*************************************************************************** * module: Forcer 0 *

RTS *

* point de sortie du module * = retour l'appelant

************************************************************************** END * fin du fichier source

B/Adressage index et adressage bit 1. Accs aux registres IO du HC11 : Programme :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 DATA CODE68HC11 : co mpt e ren du du TP1

EQU EQU EQU

$0000 $2000 $3000

* dbut de la page 0 (RAM interne du HC11) * dbut de la zone des donnes du programme * dbut de la zone de code du programmePage 5

Binme : SALHI Samir & DA HMANI Rabii

*************************************************************************** * dfinition des constantes software * elles dpendent de votre programme *************************************************************************** REG_BASE TCNT EQU EQU $1000 $0E

*************************************************************************** *************************************************************************** * le code du programme ORG CODE * dbut de la zone de code

*************************************************************************** * mettre ici les instructions de votre programme principal MAIN LDX LDD * SWI TCNT,X #REG_BASE * X pointe sur REG_BASE

* Charge D avec le contenu de l'adresse pointe par X * pour l'octet de poids faible * retour au moniteur

***************************************************************************

2. Deuxime faon de faire un masque : instructions bit BSET et BCLR Programme :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 DATA CODE EQU $0000 EQU EQU $2000 $3000 * dbut de la page 0 (RAM interne du HC11) * dbut de la zone des donnes du programme * dbut de la zone de code du programme

*************************************************************************** * dfinition des constantes software *************************************************************************** REG_BASE EQU TCNT MASK $1000

EQU $0E EQU %11110000 * dfinir le masque

***************************************************************************

68HC11 : co mpt e ren du du TP1

Page 6

Binme : SALHI Samir & DA HMANI Rabii

************************************************************************** ORG CAR FCC '5 RAM_HC11 * dbut de la page 0 * Placer la variable CAR l'adresse $00

************************************************************************** ORG DATA * dbut deuxime zone des globales

*************************************************************************** * le code du programme ORG CODE * dbut de la zone de code

*************************************************************************** * mettre ici les instructions de votre programme principal MAIN BCLR CAR #MASK * Forcer 0 les bits de poids fort

* Si on veut forcer les bits de poids fort CAR 1, on utilise linstruction suivante : * BSET SWI CAR #MASK * Forcer 1 les bits de poids fort * retour au moniteur

*************************************************************************** END * fin du fichier source

On place maintenant la variable CAR dans la zone DATA : On constate que les bits de poids fort de CAR nont pas t forcs 0, car en mettant la variable CAR dans la case mmoire dadresse $2000, on accdera son contenu par ladressage tendu, alors que la directive BCLR (galement BSET) ne fonctionne pas en mode dadressage tendu. Elles fonctionnent uniquement en mode Direct ou Index. Donc pour pouvoir forcer les bits de poids fort de la variable CAR (situe ladresse $2000) par le billais de la directive BCLR, on est oblig dutiliser le mode dadressage index. Programme :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 DATA CODE EQU $0000 EQU EQU $2000 $3000 * dbut de la page 0 (RAM interne du HC11) * dbut de la zone des donnes du programme * dbut de la zone de code du programme

*************************************************************************** * dfinition des constantes software *************************************************************************** REG_BASE EQU $1000

68HC11 : co mpt e ren du du TP1

Page 7

Binme : SALHI Samir & DA HMANI Rabii

TCNT MASK

EQU $0E EQU %11110000 * dfinir le masque

*************************************************************************** ************************************************************************** ORG RAM_HC11 * dbut de la page 0

************************************************************************** ORG CAR FCC '5 DATA * dbut deuxime zone des globales * Placer la variable CAR l'adresse $2000

*************************************************************************** * le code du programme ORG CODE * dbut de la zone de code

*************************************************************************** * mettre ici les instructions de votre programme principal MAIN LDX #CAR BCLR 0,X #MASK * X pointe sur CAR * Forcer 0 les bits de poids fort en utilisant le mode dadressage index * car la variable CAR est situe dans la case mmoire dadresse $2000 * Si on veut forcer les bits de poids fort CAR 1, on utilise linstruction suivante : * BSET SWI 0,X #MASK * Forcer 1 les bits de poids fort * retour au moniteur

*************************************************************************** END * fin du fichier source

3. Instructions bit BRSET et BRCLR :Codage binaire sign n bits : Codage qui permet de reprsenter les nombres de -2n-1 2n-1-1. Et le bit le plus fort correspond au bit de signe ; sil sa valeur est de 1, le nombre est ngatif. Intervalle de variation : Le variable TEMPERATURE est code sur 8 bits, donc elle sera varie de -27=-128 27-1=128. En hexa : elle sera varie de 7F FF. Programme :******************************************************************************** * dfinition des constants hardwares pour les donnes et le code du programme ******************************************************************************** TEMPERATURE EQU68HC11 : co mpt e ren du du TP1

$0Page 8

Binme : SALHI Samir & DA HMANI Rabii

RADIATEUR_ON FCB RADIATEUR_OF FCB

$2000 $2001 $0 $0 EQU $3000

RADIATEUR_ON EQU RADIATEUR_OF RAM EQU

******************************************************************************** * les donnes du programme ORG RAM * dbut de la zone de donnes dfinie par un premier ORG

******************************************************************************** TEMPERATURE RADIATEUR_OF LDX BREST SWI ******************************************************************************** END RMB RMB 1 1 *1 octet

#TEMPERATURE 0,X #$80 RADIATEUR_ON

Problme ? Oui il y a un problme car la case mmoire dadresse $2000 contient dj RADIATEUR_ON, donc on ne peut mettre TEMPERATURE dans cette adresse.

1.2. Premiers programmes en programmation modulaire : A. Somme des N premiers entiers :On utilise un module quon va concevoir pour effectuer une tche prcise, qui consiste la somme de 1 N nombres.******************************************************************************** * initialiser une zone de mmoire RAM ******************************************************************************** * dfinition des constants hardwares pour les donnes et le code du programme ******************************************************************************** RAM N DEBUT EQU EQU EQU $2000 $82 $0 * dfini une constante valant 130 en dcimale * dfini une constante valant $0

* le code du programme ORG RAM * dbut de la zone de code dfinie par RAM l'adresse 2000

68HC11 : co mpt e ren du du TP1

Page 9

Binme : SALHI Samir & DA HMANI Rabii

******************************************************************************** TAB NEXT_N CMPB #$0 BEQ DECB ABA BCS BRA ERREUR NEXT_N FIN_S_N * Point d'entre de la fonction * Instructions de la fonction

ERREUR FIN_S_N RTS

LDAA

#$FF

******************************************************************************** ******************************************************************************** END * fin du fichier source

La valeur de B nest plus prsente lorsquon appelle la fonction, car la directive TAB crase le contenu prcdent de B et met le contenu de A. Donc pour corriger ce problme, on doit sauver B dans la pile au dbut du module par un PSHB, puis le restituter avant le RTS final du module par un PULB. Programme :* dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 DATA EQU EQU $0000 $2000 * dbut de la page 0 (RAM interne du HC11) * dbut de la zone des donnes du programme

*************************************************************************** * dfinition des constantes software *************************************************************************** *************************************************************************** * le code du programme ORG CODE * dbut de la zone de code

*************************************************************************** * mettre ici les instructions de votre programme principal MAIN LDAA BSR68HC11 : co mpt e ren du du TP1

#N

* passage de l'argument N par A

SOMME_N* Appel la fonction SOMME_NPage 10

Binme : SALHI Samir & DA HMANI Rabii

SWI

* retour au moniteur

***************************************************************************

* Module : SOMME_N * Paramtres en entre : N * Valeur retourne : SOMME_N = 1+2+3+....+N

***************************************************************************

SOMME_N

PSHB TAB

NEXT_N CMPB

#$0 BEQ FIN_S_N

* Point d'entre de la fonction * Instructions de la fonction

DECB ABA BCS BRA ERREUR NEXT_N

ERREUR FIN_S_N PULB RTS

LDAA

#$FF

************************************************************************** END * fin du fichier source

B. Module de temporisation logicielle : B.1. Temporisation donnant une dure fixe : Programme :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code *************************************************************************** RAM_HC11 DATA EQU EQU $0000 $2000 * dbut de la page 0 (RAM interne du HC11) * dbut de la zone des donnes du programme

*************************************************************************** * dfinition des constantes software68HC11 : co mpt e ren du du TP1 Page 11

Binme : SALHI Samir & DA HMANI Rabii

*************************************************************************** *************************************************************************** * les donnes globales du programme *************************************************************************** * le code du programme ORG CODE * dbut de la zone de code

*************************************************************************** * mettre ici les instructions de votre programme principal MAIN LDAA BSR SWI #0 * passage de l'argument N par A

TEMPO_F * Appel la fonction concevoir * retour au moniteur

***************************************************************************

* Module : TEMPO_F * Paramtres en entre : * Valeur retourne : *************************************************************************** TEMPO_F LDY PAS_FINI DEY BNE PAS_FINI * 3 cycles * Soit 7 cycles par boucle * rpte 35 fois * 35*7 cycles * 6 cycles * 5 cycles * soit au total pour TEMPO_F * 5+4+245+6+5=265 cycles * 0.5 s par cycle PULY RTS *************************************************************************** * module: TEMPO_F **************************************************************************68HC11 : co mpt e ren du du TP1 Page 12

PSHY #35 * 4 cycles

* 5 cycles

Binme : SALHI Samir & DA HMANI Rabii

END

* fin du fichier source

B.2. Temporisation donnant une dure variable (temporisation paramtre) : On dfini une variable N contenant le dlai en ms Programme :* dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA CODE EQU EQU $2000 $3000 * dbut de la zone des donnes du programme * dbut de la zone de code du programme

******************************************************************************** * dfinition des constantes software ******************************************************************************** ******************************************************************************** * les donnees du programme ORG DATA * dbut de la zone de donnes dfinie par un premier ORG

******************************************************************************** N FCB #50

******************************************************************************** * le code du programme ORG CODE * dbut de la zone de code dfinie par deuxime ORG

******************************************************************************** MAIN LDX BSR SWI #N *dlai de N ms

TEMPO_P *appel au module TEMPO_P crire *rend la main au moniteur au bout de N ms

******************************************************************************** TEMPO_P CPX BEQ BSR DEX BRA FIN RTS TEMPO_P * 5 cycles #$00 FIN TEMPO_1MS

******************************************************************************* TEMPO_1MS PSHY * 5 cycles

LDY68HC11 : co mpt e ren du du TP1

#285

* 4 cyclesPage 13

Binme : SALHI Samir & DA HMANI Rabii

PAS_FINI

DEY BNE PULY RTS

* 4 cycles PAS_FINI * 3 cycle * 7cycle * N * 6 cycle

******************************************************************************** END * fin du fichier source

I.4. Modules de conversion : Conversion HEXA/ASCII: * Notre binme a t charg de concevoir le module de conversion Hexa/ASCII. Programme :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 DATA CODE EQU EQU EQU $0000 $2000 $3000 * dbut de la page 0 (RAM interne du HC11) * dbut de la zone des donnes du programme * dbut de la zone de code du programme

*************************************************************************** * dfinition des constantes software ZONE EQU $2200

* elles dpendent de votre programme *************************************************************************** * les donnes globales du programme * mettre ici les donnes globales * non initialises ( RMB ) ou initialises (FCB, FDB, FCC ) ORG DATA * dbut deuxime zone des globales

*************************************************************************** HEXA FCB $0 * Dclaration de variable HEXA avec initialisation 0

*************************************************************************** *************************************************************************** * le code du programme ORG * *************************************************************************** * mettre ici les instructions de votre programme principal68HC11 : co mpt e ren du du TP1 Page 14

CODE

* dbut de la zone de code

Binme : SALHI Samir & DA HMANI Rabii

MAIN LDAA LDX BSR SWI *************************************************************************** * module: H_2_A *************************************************************************** * point d'entre du module = nom du module =adresse de la premire * instruction du module * H_2_A PSHA ANDA #$F0 * Masquer les bits de poids faible pour * isoler le caractre *gauche LSRA LSRA LSRA LSRA CMPA BHI ADDA STAA JMP CAR_H ADDA STAA #$09 CAR_H #$30 0,X TOTO #55 0,X * Dcaler B droite * Dcaler B droite * Dcaler B droite * Dcaler B droite * Tester si le premier caractre est un chiffre ou lettre HEXA #ZONE H_2_A

TOTO

PULA ANDA #$0F * Masquer les bits de poids fort pour isoler le caractre droite

CMPA BHI ADDA STAA JMP CAR_L68HC11 : co mpt e ren du du TP1

#$09 CAR_L #$30 1,X TITI #55

* Tester si le premier caractre est un chiffre ou lettre

ADDA

Page 15

Binme : SALHI Samir & DA HMANI Rabii

STAA TITI

1,X RTS

RTS *

* point de sortie du module * retour l'appelant

************************************************************************** END * fin du fichier source

Les effets de bord sont marqus par les valeurs limites du code ASCII dun chiffre ou dune lettre, c'est--dire les codes ASCII des caractres 9 (qui est de $39 en Hexadcimale) et A (qui est de $41 en Hexadcimale). Conversion HEXA/ASCII: Ce module nous a t donn par un autre binme, car on en aura besoin dans le TP3. Programme :**********************************************

RAM_HC11 DATA

EQU

$0 EQU $3000 10000 1000 100 10 EQU $0000 $2000

PROGRAMME EQU N1 N2 N3 N4 HEXA EQU EQU EQU EQU

********************************************** ORG DATA

ADRESS FIN FCB

RMB $00

5

ORG

PROGRAMME

MAIN LDY BSR

LDD #ADRESS H_2_D

#HEXA

68HC11 : co mpt e ren du du TP1

Page 16

Binme : SALHI Samir & DA HMANI Rabii

SWI

**********************************************

********************************************** * * Module: H_2_D * Fonction ralise: Converti l'hexa en dcimal * Parametre d'entree: * Parametre de sortie: * **********************************************

H_2_D IDIV XGDX ADDB STAB XGDX

LDX

#N1

#$30 0,Y

LDX IDIV XGDX ADDB STAB XGDX

#N2

#$30 1,Y

LDX IDIV XGDX ADDB STAB XGDX

#N3

#$30 2,Y

LDX IDIV68HC11 : co mpt e ren du du TP1

#N4

Page 17

Binme : SALHI Samir & DA HMANI Rabii

XGDX ADDB STAB XGDX #$30 3,Y

ADDB STAB RTS END

#$30 4,Y

68HC11 : co mpt e ren du du TP1

Page 18

Binme : SALHI Samir & DAHMANI Rabii

TP2 microC : 68HC11 Objectifs Principaux :Les ressources internes du HC11. Programmation des entres sorties logiques. Gestion dun afficheur matriciel. Utilisation du CAN. Gestion de la liaison srie SCI. Utilisation des bibliothques BUFFALO. Les interruptions matricielles Mise en uvre du timer interne du HC11.

I. MODULES DE GESTION DES ENTREES/SORTIES LOGIQUES : I.1. PILOTAGE DES LEDS : A. Principe, lecture de schma et dfinition des signaux :Table de vrit de loctal buffer 74LS244 : PA5 0 1 Etat des K1i Ouverts Ferms Etat des K2i Ferms Ouverts

Branchement des Di sur les lignes PDi du PORTD du HC11 via le buffer 74LS244 : Numro LED D1 D2 D3 D4 Couleur LED Jaune Verte Orange Rouge Ligne PDi de PORTD PD 5 PD 4 PD 3 PD 2

68HC11 : compte rendu du TP2

Page 1

Binme : SALHI Samir & DAHMANI Rabii

Dfinition des signaux logiques des ports PORTA et PORTD : Registre PORTA Signal logique DIR LED_ROUGE (PD2) LED_ORANGE PORTD (PD3) LED_VERTE (PD4) LED_JAUNE (PD5) Emplacement dans le registre Bit n 5 Bit n 2 Valeur en binaire 0010 0000 0000 0100 Valeur en hexadcimal $20 $04

Bit n 3

0000 1000

$08

Bit n 4

0001 0000

$10

Bit n 5

0010 000

$20

B. Etude du principe et test rapide du fonctionnement larrache :Programme qui allume la LED Verte :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 BASEREG DATA CODE DDRD PORTD PORTA DIR EQU EQU EQU $0000 $1000 EQU EQU EQU EQU EQU $20 $2000 $3000 $08 $09 $00 * dbut de la zone des donnes du programme * dbut de la zone de code du programme * dbut de la page 0 (RAM interne du HC11)

*************************************************************************** * dfinition des constantes software * elles dpendent de votre programme *************************************************************************** * les donnes globales du programme * mettre ici les donnes globales 68HC11 : compte rendu du TP2 Page 2

Binme : SALHI Samir & DAHMANI Rabii

* non initialises ( RMB ) ou initialises (FCB, FDB, FCC ) ************************************************************************** *************************************************************************** * le code du programme ORG CODE * dbut de la zone de code

*************************************************************************** * mettre ici les instructions de votre programme principal MAIN LDX BCLR BSET BSET BCLR SWI #BASEREG PORTA,x DDRD,X PORTD,X PORTD,X #$20 #$10 #$10 #$10 * retour au moniteur

*************************************************************************** * module: ALLUME_VERTE *************************************************************************** END * fin du fichier source

C. Mise en forme structure :Programme qui allume une LED slectionner :* dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 EQU $0000 * dbut de la page 0 (RAM interne du HC11) BASEREG EQU $1000 DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme DDRD EQU $08 PORTD EQU $09 PORTA EQU $00 DIR EQU $20 * *************************************************************************** * dfinition des constantes software * elles dpendent de votre programme * *************************************************************************** JAUNE EQU #$32 VERTE EQU #$33 ORANGE EQU #$34 ROUGE EQU #$35 * *************************************************************************** *************************************************************************** * les donnes globales du programme * mettre ici les donnes globales * non initialises ( RMB ) ou initialises (FCB, FDB, FCC ) 68HC11 : compte rendu du TP2 Page 3

Binme : SALHI Samir & DAHMANI Rabii

*************************************************************************** * le code du programme ORG CODE * dbut de la zone de code * *************************************************************************** * mettre ici les instructions de votre programme principal MAIN LDX BSR SWI #BASEREG ALLUME_LED

SWI

* retour au moniteur

*************************************************************************** * module: ALLUME_LED *************************************************************************** * point d'entre du module = nom du module =adresse de la premire * instruction du module * ALLUME_LED PSHX LDX CMPA BEQ CMPA BEQ CMPA BEQ CMPA BEQ

#BASEREG #$32 JAUNE_BOUCLE #VERTE VERTE_BOUCLE #ORANGE ORANGE_BOUCLE #ROUGE ROUGE_BOUCLE

VERTE_BOUCLE BSET BSET JMP JAUNE_BOUCLE BSET BSET JMP ORANGE_BOUCLE BSET BSET JMP ROUGE_BOUCLE BSET BSET JMP FIN_BOUCLE * ....

BCLR PORTA,X DDRD,X #$10 PORTD,X #$10 FIN_BOUCLE BCLR PORTA,X DDRD,X #$20 PORTD,X #$20 FIN_BOUCLE BCLR PORTA,X DDRD,X #$08 PORTD,X #$08 FIN_BOUCLE BCLR PORTA,X DDRD,X #$04 PORTD,X #$04 FIN_BOUCLE

#$20 * Mettre le port de la led verte en sortie * Allumer la led verte

#$20 * Mettre le port de la led jaune en sortie * Allumer la led jaune

#$20 * Mettre le port de la led orange en sortie * Allumer la led verte orange

#$20 * Mettre le port de la led rouge en sortie * Allumer la led verte rouge

FIN * 68HC11 : compte rendu du TP2

PULX RTS

* point de sortie du module * = retour l'appelant Page 4

Binme : SALHI Samir & DAHMANI Rabii

************************************************************************** END * fin du fichier source

Programme qui teint une LED slectionner :*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 EQU $0000 * dbut de la page 0 (RAM interne du HC11) BASEREG EQU $1000 DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme DDRD EQU $08 PORTD EQU $09 PORTA EQU $00 DIR EQU $20 * *************************************************************************** * dfinition des constantes software * elles dpendent de votre programme * *************************************************************************** JAUNE EQU #$32 VERTE EQU #$33 ORANGE EQU #$34 ROUGE EQU #$35 * *************************************************************************** *************************************************************************** * les donnes globales du programme * mettre ici les donnes globales * non initialises ( RMB ) ou initialises (FCB, FDB, FCC ) * le code du programme ORG CODE * dbut de la zone de code * *************************************************************************** * mettre ici les instructions de votre programme principal MAIN LDX BSR SWI #BASEREG ETEIND_LED

SWI

* retour au moniteur

*************************************************************************** * module: ETEIND_LED *************************************************************************** * point d'entre du module = nom du module =adresse de la premire * instruction du module * ETEIND_LED

PSHX CMPA BEQ CMPA BEQ CMPA 68HC11 : compte rendu du TP2

#JAUNE JAUNE_BOUCLE #VERTE VERTE_BOUCLE #ORANGE Page 5

Binme : SALHI Samir & DAHMANI Rabii

BEQ CMPA BEQ

ORANGE_BOUCLE #ROUGE ROUGE_BOUCLE #$20 * Mettre le port de la led verte en sortie * Eeindre la led verte

VERTE_BOUCLE BCLR PORTA,X BSET DDRD,X #$10 BCLR PORTD,X #$10 JMP FIN_BOUCLE JAUNE_BOUCLE BCLR PORTA,X BSET DDRD,X #$20 BCLR PORTD,X #$20 JMP FIN_BOUCLE ORANGE_BOUCLE BSET BCLR PULX BCLR PORTA,X DDRD,X #$08 PORTD,X #$08

#$20 * Mettre le port de la led jaune en sortie * Eeindre la led jaune

#$20 * Mettre le port de la led orange en sortie * Eeindre la led verte orange

ROUGE_BOUCLE BCLR PORTA,X BSET DDRD,X #$04 BCLR PORTD,X #$04 JMP FIN_BOUCLE FIN_BOUCLE

#$20 * Mettre le port de la led orange en sortie * Eteindre la led verte rouge

FIN RTS * point de sortie du module * * = retour l'appelant ************************************************************************** END * fin du fichier source

D. Application : feu tricolore :Programme qui ralise un feu tricolore:* dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA CODE BASE_REG PORTD PORTA DDRD DIR EQU EQU EQU EQU EQU EQU EQU $1000 $08 $00 $09 $20 $2000 $3000 * dbut de la zone des donnes du programme * dbut de la zone de code du programme

******************************************************************************** * dfinition des constantes software ******************************************************************************** VERTE ORANGE ROUGE 68HC11 : compte rendu du TP2 EQU EQU EQU #$33 #$34 #$35 Page 6

Binme : SALHI Samir & DAHMANI Rabii

******************************************************************************** * les donnees du programme ORG DATA * dbut de la zone de donnes dfinie par un premier ORG

******************************************************************************** N K FCB #$32 RMB 2

******************************************************************************** * le code du programme ORG CODE * dbut de la zone de code dfinie par deuxime ORG

******************************************************************************** MAIN TOTO LDAA #ROUGE BSR ALLUME_LED LDX #3000 BSR TEMPO_P LDAA #ROUGE BSR ETEINT_LED

LDAA #VERTE BSR ALLUME_LED LDX #5000 BSR TEMPO_P LDAA #VERTE BSR ETEINT_LED

LDAA #ORANGE BSR ALLUME_LED LDX #1000 BSR TEMPO_P LDAA #ORANGE BSR ETEINT_LED BRA TOTO SWI ******************************************************************************** ALLUME_LED LDX #BASE_REG

CMPA #ROUGE BEQ ROUGE_BOUCLE

68HC11 : compte rendu du TP2

Page 7

Binme : SALHI Samir & DAHMANI Rabii

CMPA #VERTE BEQ VERTE_BOUCLE CMPA #ORANGE BEQ ORANGE_BOUCLE BRA FIN ****************************************** ROUGE_BOUCLE BCLR PORTA,X BSET DDRD,X BSET PORTD,X RTS #$04 #$04 #DIR

VERTE_BOUCLE BCLR PORTA,X BSET DDRD,X BSET PORTD,X RTS ORANGE_BOUCLE BCLR PORTA,X BSET DDRD,X BSET PORTD,X RTS #$08 #$08 #$10 #$10

#DIR

#DIR

********************************************** ETEINT_LED LDX #BASE_REG

CMPA #ROUGE BEQ ROUGE_BOUCLE2 CMPA #VERTE BEQ VERTE_BOUCLE2 CMPA #ORANGE BEQ ORANGE_BOUCLE2 BRA FIN ******************************************

ROUGE_BOUCLE2 BCLR PORTA,X BSET DDRD,X BCLR PORTD,X RTS VERTE_BOUCLE2 BCLR PORTA,X BSET DDRD,X #$10 #04 #04

#DIR

#DIR

68HC11 : compte rendu du TP2

Page 8

Binme : SALHI Samir & DAHMANI Rabii

BCLR PORTD,X RTS

#$10

ORANGE_BOUCLE2 BCLR PORTA,X BSET DDRD,X BCLR PORTD,X RTS #$08 #$08

#DIR

******************************************************************************** TEMPO_P CPX #$00 BEQ FIN BSR TEMPO_1MS DEX BRA TEMPO_P FIN RTS * 5 cycle

******************************************************************************* TEMPO_1MS PSHY * 5 cycle

LDY #285 PAS_FINI DEY

* 4 cycle * 4 cycle

BNE PAS_FINI * 3 cycle * 7cycle * N PULY RTS ***************************************************************** END * la fin du fichier source * directive d'assemblage pour indiquer l'assembleur * 6 cycle

I.2. LECTURE DES INTERRUPTEURS:Programme qui lit ltat des 4 interrupteurs en permanence :* dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme BASE_REG EQU $1000 PORTD EQU $08 DDRD EQU $09 PORTA EQU $00 DIR EQU $20 ******************************************************************************** * dfinition des constantes software ******************************************************************************** ******************************************************************************** * les donnees du programme ORG DATA * dbut de la zone de donnes dfinie par un premier ORG ******************************************************************************** N FCB #$32 68HC11 : compte rendu du TP2 Page 9

Binme : SALHI Samir & DAHMANI Rabii

******************************************************************************** * le code du programme ORG CODE * dbut de la zone de code dfinie par deuxime ORG ******************************************************************************** MAIN BSR AFFICHEUR SWI ******************************************************************************** AFFICHEUR LDX #BASE_REG BSET PORTA,X #DIR BCLR DDRD,X #$3C * Mettre les ports en entre PD2,3,4,5 pour y crire LDAA PORTD,X * Pour transfrer A BCLR PORTA,X #DIR BSET DDRD,X #$3C * Mettre les ports en SORTIE PD2,3,4,5 pour y crire STAA PORTD,X * A partir de A BRA END * la fin du fichier source AFFICHEUR * directive d'assemblage pour indiquer l'assembleur

II. MODULES DE GESTION DE LAFFICHEUR MATRICIEL : II.2 INITIALISATION DU PPI 8255 :Valeur du registre du contrle qui permet de configurer le PPI 8255 : En prenant les AUX_PORTC en entres, donc leur bits correspondant vont passer 1. Les bits correspondant au PORTB auront comme valeur 0 car ils sont mis comme sortie. La valeur sera alors : en binaire : 1000 1001 , en hexadcimal : $89. Module INIT_8255 qui initialise le PPI 8255 : Programme :

*************************************************************************** * dfinition des constantes hardware pour les donnes et le code * en gnral ce sont des adresses dpendant du mapping du systme *************************************************************************** RAM_HC11 EQU $0000 * dbut de la page 0 (RAM interne du HC11) DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme *************************************************************************** * dfinition des constantes software * elles dpendent de votre programme * *************************************************************************** PORTD EQU $08 DDRD EQU $09 PORTA EQU $00 DIR EQU $20 AUX_PORTB EQU $B5F5 AUX_PORTA EQU $B5F4 AUX_PORTC EQU $B5F6 AUX_CONTROLE EQU $B5F7

*************************************************************************** * le code du programme ORG CODE * dbut de la zone de code * *************************************************************************** * mettre ici les instructions de votre programme principal 68HC11 : compte rendu du TP2 Page 10

Binme : SALHI Samir & DAHMANI Rabii

MAIN BSR SWI SWI INIT_8255

* retour au moniteur

*************************************************************************** * module: INIT_8255 *************************************************************************** * point d'entre du module = nom du module =adresse de la premire * instruction du module * INIT_8255 LDAA #$89 STAA CONTROLE FIN RTS * point de sortie du module * * = retour l'appelant ************************************************************************** END * fin du fichier source

II.3 AFFICHAGE DUN CARACTERE :Module PRINT_CHAR qui affiche un caractre CAR sur lafficheur NUMERO : Programme :* dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme ******************************************************************************** * dfinition des constantes software ******************************************************************************** PPI EQU $B5F4 AUX_PORTA EQU $0 AUX_PORTB EQU $1 AUX_PORTC EQU $2 AUX_CONTROL EQU $3 CTRL_WORD EQU %10001001 CE1 CE2 CLR CUE CU WR A0 A1 BL EQU EQU EQU EQU EQU EQU EQU EQU EQU %00000001 %00000001 %00000010 %00000100 %00001000 %00010000 %00100000 %01000000 %10000000

******************************************************************************** ORG DATA ******************************************************************************** CAR FCC 'z' *Caractre afficher NUMERO FCB $0

******************************************************************************** * le code du programme ORG CODE * dbut de la zone de code dfinie par deuxime ORG ******************************************************************************** MAIN LDAA 68HC11 : compte rendu du TP2 BSR CAR INIT_8255 *initialise PPI8255 *passage de CAR par A Page 11

Binme : SALHI Samir & DAHMANI Rabii

LDAB BSR l'afficheur

NUMERO PRINT_CHAR

* Choix de l'afficheur *appel de la fct qui affiche le caractre sur

SWI *fin du fichier ******************************************************************************** * module INIT_P * Commentaires : initialise le PPI82255 * Paramtre en entre : rien * Valeurs retournes : rien ******************************************************************************** INIT_8255 PSHX *on sauvegarde la valeur de X PSHA LDX #PPI LDAA #$89 STAA AUX_CONTROL,X PULA PULX * on recharge la valeur de X RTS * retour a l'appelant ******************************************************************************** * module PRINT_CHAR * Commentaires : * Paramtre en entre : le caractre (A) et le numro de l'afficheur (B) * Valeurs retournes : rien ******************************************************************************** PRINT_CHAR PSHX *on sauve la valeur de X LDX #BASE CMPB BEQ CMPB BEQ CMPB BEQ CMPB BEQ Aff1 BCLR BCLR BRA BCLR BSET BRA BSET BCLR BRA BSET BSET BRA BSET BSET BCLR BSET BSET BSET BCLR BCLR STAA BSET BSET PULX 68HC11 : compte rendu du TP2 Page 12 #0 Aff1 #1 Aff2 #2 Aff3 #3 Aff4 AUX_PORTB,X AUX_PORTB,X COMMUN AUX_PORTB,X AUX_PORTB,X COMMUN AUX_PORTB,X AUX_PORTB,X COMMUN AUX_PORTB,X AUX_PORTB,X COMMUN AUX_PORTB,X AUX_PORTB,X AUX_PORTB,X AUX_PORTB,X AUX_PORTB,X AUX_PORTB,X AUX_PORTB,X AUX_PORTB,X AUX_PORTA,X AUX_PORTB,X AUX_PORTB,X A1 A0

Aff2

A1 A0

Aff3

A1 A0

Aff4

A1 A0

COMMUN

BL CLR CUE CE1 CU WR CE1 WR WR CE1

Binme : SALHI Samir & DAHMANI Rabii

RTS *retour l'appelant ******************************************************************************** *********************************************************************** END *fin du fichier source

Rsultat : le programme prcdent va afficher la caractre z sur lafficheur 0

II.4 AFFICHER UNE CHAINE DE CARACTERES :Programme qui affiche une chane de caractres : Ce programme va appeler le module PRINT_CHAR crit en dessus, donc on ne va pas le rcrire :******************************************************************************** * initialiser une zone de mmoire RAM * comprise entre les adresses DEBUT_ZONE et FIN_ZONE incluses * avec la mme valeur INIT ******************************************************************************** * dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme ********************************************************************************

* dfinition des constantes software ******************************************************************************** BASE EQU $B5F0 AUX_PORTA EQU $4 AUX_PORTB EQU $5 AUX_PORTC EQU $6 AUX_CONTROL EQU $7 CTRL_WORD EQU %10001001 CE1 CE2 CLR CUE CU WR A0 A1 BL EQU EQU EQU EQU EQU EQU EQU EQU EQU %00000001 %00000001 %00000010 %00000100 %00001000 %00010000 %00100000 %01000000 %10000000

******************************************************************************** ORG DATA ******************************************************************************** MSG FCB FCC $00 'UP13'

******************************************************************************** * le code du programme ORG CODE * dbut de la zone de code dfinie par deuxime ORG ******************************************************************************** MAIN LDX JSR JSR INIT_PPI #MSG PRINT_STRING *initialise PPI8255 *passage de CAR par A *appel de la fonction *qui affiche le caractre sur l'afficheur

SWI END *fin du fichier ******************************************************************************** 68HC11 : compte rendu du TP2 Page 13

Binme : SALHI Samir & DAHMANI Rabii

* module PRINT_STRING * Commentaires : * Paramtre en entre : rien * Valeurs retournes : rien ******************************************************************************** PRINT_STRING PSHA PSHB LDAA LDAB JSR LDAA LDAB JSR LDAA LDAB JSR LDAA LDAB JSR PULB PULA 0,XL #3 PRINT_CHAR 1,X #2 PRINT_CHAR 2,X #1 PRINT_CHAR 3,X #0 PRINT_CHAR

RTS ******************************************************************************** * module INIT_P * Commentaires : initialise le PPI82255 * Paramtre en entre : rien * Valeurs retournes : rien ******************************************************************************** INIT_PPI PSHX *on sauve le valeur de X PSHA LDX #BASE LDAA #$89 STAA AUX_CONTROL,X PULA PULX * on recharge la valeur de X RTS *retour a l'appelant

** Le module PRINT_CHAR est dj crit en dessus, donc il est inutile de le rcrire******************************************************************************** END

III. UTILISATION DU CAN : III.2. PRISE EN MAIN DU CAN :Modules INIT_CAN et ACQUISITION :* dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme *********************************************************************** *********************************************************************** * dfinition des constantes software BASE_REG EQU $1000 * @ base des registres interne 68HC11 : compte rendu du TP2 Page 14

Binme : SALHI Samir & DAHMANI Rabii

OPTION ADR1 ADCTL ADPU CSEL CA CB CC CD MULT SCAN CCF

EQU EQU

$39 $31 EQU

* offset du registre option * offset du registre ADR1 $30 * Offset du registre ADCTL

EQU EQU

%10000000 * bit 7 du registre option %01000000 * bit 6 du registre option

EQU %00000001 EQU %00000010 EQU %00000100 EQU %00001000 EQU %00010000 * cannal multile EQU %00100000 * scan control EQU %10000000 * bit de poids fort du registre adctl

*********************************************************************** ********************************************************************** * les donnees du programme ORG DATA * dbut de la zone de donnes ***********************************************************************

*********************************************************************** * le code du programme ORG CODE * dbut de la zone de code *********************************************************************** MAIN BSR INIT_CAN * initialisation du PPI BSR ACQUISITION * appel de la fonction concevoir SWI * retour au moniteur *********************************************************************** *********************************************************************** * module: INIT_CAN * commentaire: * parametres en entre: * initialise le CAN en positionnant le CCF * parametres en sortie: ********************************************************************** INIT_CAN PSHX * sauve X dans la pile car modifi LDX #BASE_REG * X pointe sur le registre interne du hc11 BCLR OPTION,X #CSEL * Horloge >= 1.5MHz BSET OPTION,X #ADPU * active le convertisseur A/N BCLR ADCTL,X #CA+#CB+#CC+#CD * convertion sur PE0 BCLR ADCTL,X #MULT * conversion sur une seule voie BCLR ADCTL,X #SCAN * pas de conversion en continu PULX RTS * retour a l'appelant *********************************************************************** *********************************************************************** * module: ACQUISITION * commentaire: * parametres en entre: * A contient la valeur d'entre * parametres en sortie: *********************************************************************** ACQUISITION PSHX * sauve X dans la pile car modifi LDX #BASE_REG * X pointe sur le registre interne du hc11 BCLR ADCTL,X #CCF * lance un cycle de conversion ( CCF=0) ATTEND LDAB ADCTL,X #CCF CMPB #$00 * On teste la fin de la conversion BEQ ATTEND * On reviens pour un nouveau cycle de conversoin LDAA ADR1,X * si non met la valeur numeriq dans A 68HC11 : compte rendu du TP2 Page 15

Binme : SALHI Samir & DAHMANI Rabii

PULX RTS * retour a l'appelant *********************************************************************** *********************************************************************** END *fin du fichier source

III.2. UN PETIT VOLTMETRE :Ce programme est une synthse des diffrents modules quon a raliss prcdemment, savoir : PRINT_CHAR, PRINT_STRING, INIT_8255, INIT_CAN, ACQUSITION, H_2_D_A, et un autre quon va crire dans le prochain programme : CONV_MV : De l{ on voit limportance de la programmation modulaire : Programme :******************************************************************************** * initialiser une zone de mmoire RAM * comprise entre les adresses DEBUT_ZONE et FIN_ZONE incluses * avec la mme valeur INIT ******************************************************************************** * dfinition des constantes hardware pour les donnes et le code du programme ******************************************************************************** DATA EQU $2000 * dbut de la zone des donnes du programme CODE EQU $3000 * dbut de la zone de code du programme BASE_REG EQU $1000 * adresse de base des registre OPTION ADPU ADCTL CA CB CC CD MULT SCAN CSEL CCF ADR1 EQU EQU $39 %10000000

* masque sur le bit 7

EQU EQU EQU EQU

EQU

EQU $30 %00000001 * masque sur le bit 0 %00000010 * masque sur le bit 1 %00000100 * masque sur le bit 2 %00001000 * masque sur le bit 3 EQU %00010000 * masque sur le bit 4 EQU %00100000 * masque sur le bit 5 EQU %01000000 * masque sur le bit 6 %10000000 * masque sur le bit 7 EQU $31 * voie PE0

PPI8255 AUX_PORTA EQU AUX_PORTB EQU AUX_PORTC EQU AUX_CONTROL CTRL_WORD EQU CE1 CE2 CLR CUE CU WR A0 A1 BL EQU EQU EQU EQU EQU EQU EQU EQU EQU

EQU $B5F0 $4 $5 $6 EQU $7 %10001001 %00000001 %00000001 %00000010 %00000100 %00001000 %00010000 %00100000 %01000000 %10000000

******************************************************************************** * dfinition des constantes software ******************************************************************************** ORG DATA ******************************************************************************** 68HC11 : compte rendu du TP2 Page 16

Binme : SALHI Samir & DAHMANI Rabii

ADRESS CAR NUMERO MSG FCB FCC

RMB 'z' FCB FCC $00

5

*on reserve 5 octets

$0 'UP13'

******************************************************************************** * le code du programme ORG CODE * dbut de la zone de code dfinie par deuxime ORG ******************************************************************************** MAIN JSR INIT_PPI * initialise PPI8255

JSR BOUCLE JSR LDY JSR

INIT_CAN JSR CONVERSION CONV_MV #ADRESS-#1 H_2_D * pointeur sur la zone resulat * appel du module H2D

LDX JSR l'afficheur BRA

#ADRESS PRINT_STRING

* * appel de la fct qui affiche le caractre sur

BOUCLE

END *************************************************************************** * module CONV_MV * Commentaires : convertit la tension en mV * Paramtre en entre : Vin dans A * Valeurs retournes : tension en mV dans D ******************************************************************************** CONV_MV LDAB #$14 * multiplie la tension par 20mV MUL * renvoi la valeur dans D RTS INIT_CAN H_2_D ACQUISITION PRINT_STRING INIT_PPI PRINT_CHAR

* Tous ces modules ont dj t crits prcdemment

68HC11 : compte rendu du TP2

Page 17

Binme : SALHI Samir & DAHMANI Rabii

TP N3 MicroC : 68H11 Objectifs principaux :Prise en main de la chaine de dveloppement en C Mise en vidence des liens avec lassembleur Convention et fonction du C Ecriture de programmes en C et essais sur la cible Intgration finale : mise de lapplication EEPROM A.IMPLANTATION DUNE FONCTION : On avait dj cre un projet sappelle trs_simple.prg : #define v_max_france 130 Int v_max_autoroute ; Void main (void) { v_max_autoroute=v_max_france ; } Et partir de ce projet , on a rajout dans le main une fontion de prototype : Int en_cas_de_pluie(int vitesse ), qui renvoie la vitesse max autorise sur autoroute en cas de pluie. #define v_max_france 130 int v_max_autoroute; int i; void main(void) { v_max_autoroute=en_cas_de_pluie(v_max_france); } int en_cas_de_pluie(int vitesse) { vitesse=v_max_france-30; return vitesse; } Dans ce programme la fonction en_cas_de_pluie(int vitesse ) renvoie la nouvelle vitesse , aprs on laffecte v_max_autoroute.

68HC11 : compte rendu TP3

Page 1

Binme : SALHI Samir & DAHMANI Rabii

B.GESTION DES LEDS D2 A D5 : Dans cette partie , on tait amen crire deux fonctions prototypes : void led_on(char led) : une fonction pour allumer les leds. void led_off(char led) :une fonction pour teindre les leds. Et pour la temporisation, elle a t faite logiciellement par la fonction : void delayms(unsigned int ) voil le programme en C : // la liste des adresses des registres internes du HC11 // reconnu par leur nom gnrique de la doc Motorola Ex : PORTA, DDRD ... #include // les codes ASCII des leds en fonction de leur couleur #define jaune '2' #define verte '3' #define orange '4' #define rouge '5' // les bits du PORTD #define PD2 bit(2) #define PD3 bit(3) #define PD4 bit(4) #define PD5 bit(5) //pour le signal DIR #define PA5 bit(5) // les prototypes de fonctions // pour allumer une led passe en paramtre void led_on(char); // pour l'teindre void led_off(char); // fonction de delai void delayms(unsigned int); // met 1 dans l'octet point par adresse les bits qui sont 1 dans mask void bit_set(unsigned char volatile *adresse,char mask); // met 0 dans l'octet point par adresse les bits qui sont 1 dans mask void bit_clr(unsigned char volatile *adresse,char mask); void main(void) { // eteint d'abord toutes les leds led_off(verte); led_off(orange); led_off(rouge);68HC11 : compte rendu TP3 Page 2

Binme : SALHI Samir & DAHMANI Rabii

led_off(jaune); while(1) // boucle infinie du feu tricolore { led_on(verte); delayms(5000); led_off(verte); led_on(orange); delayms(1000); led_off(orange); led_on(rouge); delayms(3000); led_off(rouge); } led_off(orange); } void led_on(char led) { if(led==jaune) { bit_clr(PORTA,PA5); bit_set(DDRD,PD5); bit_set(PORTD,PD5); } else if(led==verte) { bit_clr(PORTA,PA5); bit_set(DDRD,PD4); bit_set(PORTD,PD4); } else if(led==orange) { bit_clr(PORTA,PA5); bit_set(DDRD,PD3); bit_set(PORTD,PD3); } else if(led==rouge) { bit_clr(PORTA,PA5); bit_set(DDRD,PD2); bit_set(PORTD,PD2); }

} void led_off(char led) { if(led==jaune) { bit_clr(PORTA,PA5);68HC11 : compte rendu TP3 Page 3

Binme : SALHI Samir & DAHMANI Rabii

bit_set(DDRD,PD5); bit_clr(PORTD,PD5); } else if(led==verte) { bit_clr(PORTA,PA5); bit_set(DDRD,PD4); bit_clr(PORTD,PD4); } else if(led==orange) { bit_clr(PORTA,PA5); bit_set(DDRD,PD3); bit_clr(PORTD,PD3); } else if(led==rouge) { bit_clr(PORTA,PA5); bit_set(DDRD,PD2); bit_clr(PORTD,PD2); } } #define DELAY1MS 73 // 73 boucles de i pour avoir 1ms void delayms( unsigned int ms) { unsigned int i,j; if(ms>0) { for(j=0;j0) { for(j=0;j

Recommended