Vous êtes sur la page 1sur 51

ISPG : 2009/2010

Jeudi 1 er Avril 2010

Comptes rendus des TP du 68HC11

Binôme :

Enseignant :

SALHI Samir

DAHMANI Rabii

- TELECOM 1 -

THIEBAUT Bernard

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii Compte rendu TP0 microcontrôleur Objectifs principaux : Présentation

Compte rendu TP0 microcontrôleur

Objectifs principaux :

Présentation de la carte de développement CMD11A8 (ou E1).

Prise en main de la chaine de développement.

Ecriture et édition de programmes.

Assemblage et linkage.

Etude des fichiers .LST et .S19.

Téléchargement sur la carte cible.

Utilisation des principales commandes du moniteur Buffalo.

Premiers pas dans le « débogage » de programmes.

1) Voici un bout du programme REMPLIS.LST

0029

* le code du programme

 

0030

3000

ORG

CODE

* début de la zone de code définie par deuxième ORG

0031

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

0032

3000 b6 20 00

[ 4 ]

LDAA

VALEUR

0033

3003 ce 22 00

[ 3 ]

LDX

#DEBUT_ZONE

>>

On observe dans la 1 èr e colonne le n° de ligne du code (0029, 0030, etc……

la 2 ème

car de l’adresse 3000 on passe à 3003 avant d’exécuter la prochaine instruction

)

Dans LDAA s’exécute bien en 3 cycles

colonne on observe à quelle adresse on se trouve.

2)

Dans l’adresse $3000 et dans $3001 on à 00. programme on a :

on a b6, b6 étant le code machine de LDAA .

20 et 00

Dans l’adresse $3001 on a 20

étant l’adresse de VALEUR car dans les données du

0025 2000 00

sur 8 bit 0010 000 et 00 est codé 0000 0000

VALEUR * cette constant VALEUR se situe à l’adresse 2000 20

*étant codé

3)

En changeant la valeur de la constante CODE à $4000, le programme commence à $4000 au lieu de $3000 comme précédemment.

à $4000, le programme commence à $4000 au lieu de $3000 comme précédemment. 68HC11 : co
à $4000, le programme commence à $4000 au lieu de $3000 comme précédemment. 68HC11 : co

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii La directive ORG point ainsi sue une adresse

La directive ORG point ainsi sue une adresse de départ que l’on impose, et donc si on change l’adresse de départ, toutes les adresses sont décalées de ce changement.

4)

CODE

DATA

idem

4000

2000

* code est enregistré à l’adresse $4000 * DATA est enregistré à l’adresse $4000 FIN_ZONE

INIT

0000

VALEUR

REMPLIR

2000

4006

2301

DEBUT_ZONE 2200 * *idem

CODE

4000 *0010 0030

* code est enregistré à l’adresse $4000 et utilisé a la ligne 0010 et 0030

* DATA enregistré

DATA

2000 *0009 0023

a l’adresse $2000 et utilisé a la ligne 0009 et 0023

DEBUT_ZONE 2200 *0017 0033 * pareille que DATA et CODE

*0018 0037

* idem

REMPLIR

INIT 4006 *0034 0038

0000 *0016 0025

FIN_ZONE

2301

VALEUR

2000 *0025 0032

5)

Le fichier .S19 résume les différentes instructions, l’évolution des adresses modifiées et leur taille ainsi que les erreurs.

11) Essais du programme

Pour modifier le registre A

>Rm A

Puis taper une valeur au choix par exemple 30

Pour vérifier taper

>Rd

On modifie et vérifie de la même manière pour le registre X sauf que l’on tapera Rm X pour le modifier

Pour visualiser le contenu de la mémoire en l’adresse $2200 et $2210 on tape la commande :

>md 2200

Son contenu et n’importe quoi ce sont les valeurs d’origine qui sont contenu des la mise en tension de la carte.

Pour modifier les cases mémoires entre $2200 et $2300 taper :

>MM 2200 X Y J…….

Avec X la valeur que l’on aura mise dans $2000, Y la valeur mise dans $2201 etc…

X la valeur que l’on aura mise dans $2000, Y la valeur mise dans $2201 etc…
X la valeur que l’on aura mise dans $2000, Y la valeur mise dans $2201 etc…

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii Si le PC ne point pas vers la

Si le PC ne point pas vers la première instruction du programme, on va exécuter n’importe quoi.

Une fois le programme exécuté en entier, il n’y a plu s que des 0 dans les adresses de $2200 à $2210

Par rapport au mode pas à pas, GO permet d’exécuter 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 l’adresse $2300 on n’a 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’à l’adresse $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 mémoire RAM

* comprise entre les adresses DEBUT_ZONE et FIN_ZONE incluses

* avec la même valeur INIT

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

* définition des constantes hardware pour les données et le code du programme

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

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

* définition des constantes software

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

INIT

EQU

$0

* valeur d'initialisation

DEBUT_ZONE

EQU

$2200

* debut de la zone à initialiser

FIN_ZONE

EQU

$2300

* fin de la zone à initialiser

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

* les donnees du programme

ORG

DATA

* début de la zone de données définie par un premier ORG

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

VALEUR

FCB

#INIT

* la variable VALEUR est initialisée avec INIT

VALEUR FCB #INIT * la variable VALEUR est initialisée avec INIT 68HC11 : co mpte rendu
VALEUR FCB #INIT * la variable VALEUR est initialisée avec INIT 68HC11 : co mpte rendu

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii

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

* le code du programme

ORG

CODE

* début de la zone de code définie par deuxièm e ORG

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

 

LDAA

VALEUR

*

charge A avec la variable valeur, donc avec INIT

LDX

#DEBUT_ZONE

* X pointe sur le début de la zone à initialiser

REMPLIR

STAA

0,X

* utilisation de l'adressage indexé pour

 

*écrire A à l'adresse pointée par X

 

INX

*

X pointe sur la case memoire suivante

CPX

#FIN_ZONE

* a t'on fini ? ( adresse FIN_ZONE atteinte ? )

BNE

REMPLIR

* non, alors

on continue

FIN

BRA

FIN

* boucle d'attente infinie en fin de

 

*programme car sinon le programme

*

continue en éxécutant ce qu'il y a après 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 détails des étapes, ce qui est intéressant pour vérifier s’il y a des erreurs

12)

Partie ou on passe les paramètre au module

* avec la même valeur INIT

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

******************************************************************************** 68HC11 : co mpte rendu du TP1 Page 4
******************************************************************************** 68HC11 : co mpte rendu du TP1 Page 4

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii * définition des constantes hardware pour les données

* définition des constantes hardware pour les données et le code du programme

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

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

* définition des constantes software

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

INIT

EQU

$0

* valeur d'initialisation

DEBUT_ZONE

EQU

$2200

* debut de la zone à initialiser

FIN_ZONE

EQU

$2300

* fin de la zone à initialiser

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

* les donnees du programme

ORG

DATA

* début de la zone de données définie par un premier ORG

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

VALEUR

FCB

#INIT

* la variable VALEUR est initialisée 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

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

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii TP1 microC : 68HC11 Objectifs Principaux : Utilisation

TP1 microC : 68HC11 Objectifs Principaux :

Utilisation des directives et des instructions les plus courantes.

Les modes d’adressage.

Ecriture de programmes en assembleur.

Base de la programmation modulaire.modes d’adressage. Ecriture de programmes en assembleur. Modules de gestion des chaînes de caractères. Modules de

Modules de gestion des chaînes de caractères.en assembleur. Base de la programmation modulaire. Modules de conversion. Principe du passage de paramètres

Modules de conversion.modulaire. Modules de gestion des chaînes de caractères. Principe du passage de paramètres par la pile.

Principe du passage de paramètres par la pile.

A/DIRECTIVES D’ASSEMBLAGE ET INSTRUCTIONS DE BASE :

1. Directives et transfert de base avec les instructions de type LOAD et STORE

1.1 Définir une constante valant 130 en décimal :

Programme :

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

* initialiser une zone de mémoire RAM

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

* définition des constants hardwares pour les données et le code du programme

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

V_MAX_FRANCE

EQU

130

RAM

EQU $2000

PROG

EQU

$3000

* défini une constante valant 130 en décimale

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

* les données du programme

ORG

RAM

* début de la zone de données définie 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

* début de la zone de code définie par deuxième ORG

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

MAIN

LDAA

#V_MAX_FRANCE

* en charge dans le registre A la valeur de

MAIN LDAA #V_MAX_FRANCE * en charge dans le registre A la valeur de 68HC11 : co
MAIN LDAA #V_MAX_FRANCE * en charge dans le registre A la valeur de 68HC11 : co

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii * V_MAX_FRANCE Adressage immédiat STAA V_MAX_AUTOROUTE * on

*

V_MAX_FRANCE

Adressage immédiat

STAA

V_MAX_AUTOROUTE

* on stock le contenue de A ( V_MAX_FRANCE) dans

*

l'adresse ( V_MAX-AUTOROUTE)

 

SWI

* boucle d'attente infinie

*

Equivalent en C d'un While(1);

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

 

END

* directive d'assemblage pour indiquer à l'assembleur

*

la fin du fichier source

1.2. Définir une constante valant 130 en décimal 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 première façon n’initialise pas la variable directement dans la zone Code car la directive RMB ne le permet pas. Donc elle sera initialisée par le compilateur.

Programme :

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

* définition des constantes hardware pour les données et le code du programme

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

V_MAX_FRANCE

PROG

EQU

EQU

130

$3000

V_MAX_AUTOROUTE

FCB

130

* défini une constante valant 130 endécimale

* défini uneconstante d'1 octet a l'adresse RAM

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

* le code du programme

ORG

PROG

* début de la zone de code définie par deuxième 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 :

à l'assembleur 2 . Comparaison : instruction de type CMP et registre CCR : 68HC11 :
à l'assembleur 2 . Comparaison : instruction de type CMP et registre CCR : 68HC11 :

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii Programme :

Programme :

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

* initialiser une zone de mémoire RAM

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

* définition des constantes hardware pour les données et le code du programme

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

V_MAX_FRANCE

EQU

130

* défini une constante valant 130 en décimale

RAM

EQU

$2000

PROG

EQU

$3000

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

* les données du programme

ORG

RAM

* début de la zone de données définie par un premier ORG

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

V_MAX_AUTOROUTE

RMB

1

*Réserve 1 octet pour stoker la valeur courante

*

V_MAX-AUTOROUTE

VITESSE

RMB

1

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

*

le code du programme

ORG

PROG

* début de la zone de code définie par deuxième ORG

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

 

LDAA

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

*

V_MAX_FRANCE

Adressage immédiat

MAIN

STAA

V_MAX_AUTOROUTE

* on place le contenue de A ( V_MAX_FRANCE) dans

*

l'adresse ( V_MAX-AUTOROUTE)

 

CMPA

VITESSE

 

SWI

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

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

END

* la fin du fichier source

* directive d'assemblage pour indiquer à l'assembleur

3. Première façon de faire un masque : instruction AND et/ou OR

3.1 Forcer à 0 les bits de poids fort d’un caractère CAR (utiliser un masque) :

Le masque étant $0F car c’est le nombre qui permet d’avoir le masquage en utilisant un AND logique :

c’est le nombre qui permet d’avoir le masquage en utilisant un AND logique : 68HC11 :
c’est le nombre qui permet d’avoir le masquage en utilisant un AND logique : 68HC11 :

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii Progarmme :

Progarmme :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

*

définition des constantes software

*

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

MASK

EQU

#$0F

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

 

ORG

DATA

* début deuxième zone des globales

CAR

FCC

'5'

* Caractère initialisé à 5

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

* le code du programme ORG

CODE

* début 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 trouvée à 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 d’un caractère CAR (utiliser un masque) :

Le masque étant $F0 car c’est le nombre qui permet d’avoir le masquage en utilisant un OR

Programme :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

*************************************************************************** 68HC11 : co mpte rendu du TP1 Page 4
*************************************************************************** 68HC11 : co mpte rendu du TP1 Page 4

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii * définition des constantes software

* définition des constantes software

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

MASK

EQU

#$0F

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

CAR

ORG

FCC

DATA

'5'

* début deuxième zone des globales

* Caractère initialisé à 5

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

*

le code du programme

ORG

CODE

* début 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 trouvée à 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. Accès aux registres IO du HC11 :

Programme :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

du programme CODE EQU $3000 * début de la zone de code du programme 68HC11 :
du programme CODE EQU $3000 * début de la zone de code du programme 68HC11 :

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii *************************************************************************** *

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

* définition des constantes software

* elles dépendent de votre programme

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

REG_BASE

EQU

$1000

TCNT

EQU

$0E

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

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

*

le code du programme

ORG

CODE

* début de la zone de code

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

* mettre ici les instructions de votre programme principal

MAIN

 

LDX

#REG_BASE

* X pointe sur REG_BASE

 

LDD

TCNT,X

* Charge D avec le contenu de l'adresse pointée par X

*

* pour l'octet de poids faible

 

SWI

* retour au moniteur

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

2. Deuxième façon de faire un masque : instructions bit BSET et BCLR

Programme :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

*

début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

* définition des constantes software

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

REG_BASE

EQU

$1000

 

TCNT

EQU

$0E

MASK

EQU

%11110000

* définir le masque

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

masque *************************************************************************** 68HC11 : co mpte rendu du TP1 Page 6
masque *************************************************************************** 68HC11 : co mpte rendu du TP1 Page 6

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii **************************************************************************

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

 

ORG

RAM_HC11

*

début de la page 0

CAR

FCC

'5

* Placer la variable CAR à l'adresse $00

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

ORG

DATA

* début deuxième zone des globales

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

* le code du programme

ORG

CODE

* début 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 l’instruction 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 n’ont pas été forcés à 0, car en mettant la variable CAR dans la case mémoire d’adresse $2000, on accédera à son contenu par l’adressage étendu, alors que la directive BCLR (également BSET) ne fonctionne pas en mode d’adressage étendu. Elles fonctionnent uniquement en mode Direct ou Indexé.

Donc pour pouvoir forcer les bits de poids fort de la variable CAR (située à l’adresse $2000) par le billais de la directive BCLR, on est obligé d’utiliser le mode d’adressage indexé.

Programme :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

*

début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

* définition des constantes software

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

REG_BASE

EQU

$1000

REG_BASE EQU $1000 68HC11 : co mpte rendu du TP1 Page 7
REG_BASE EQU $1000 68HC11 : co mpte rendu du TP1 Page 7

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii TCNT EQU $0E MASK EQU %11110000 * définir

TCNT

EQU

$0E

MASK

EQU

%11110000

* définir le masque

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

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

ORG

RAM_HC11

* début de la page 0

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

 

ORG

DATA

*

début deuxième zone des globales

CAR

FCC

'5

* Placer la variable CAR à l'adresse $2000

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

* le code du programme

ORG

CODE

* début de la zone de code

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

* mettre ici les instructions de votre programme principal

MAIN

LDX

#CAR

* X pointe sur CAR

BCLR

0,X

#MASK

* Forcer à 0 les bits de poids fort en utilisant le mode d’adressage indexé

* car la variable CAR est située dans la case mémoire d’adresse $2000

* Si on veut forcer les bits de poids fort CAR à 1, on utilise l’instruction 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 représenter les nombres de -2 n-1 à 2 n-1 -1. Et le bit le plus fort correspond au bit de signe ; s’il sa valeur est de 1, le nombre est négatif.

Intervalle de variation :

Le variable TEMPERATURE est codée sur 8 bits, donc elle sera variée de -2 7 =-128 à 2 7 -1=128.

En hexa : elle sera variée de 7F à FF.

Programme :

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

* définition des constants hardwares pour les données et le code du programme

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

TEMPERATURE

EQU

$0

TEMPERATURE EQU $0 68HC11 : co mpte rendu du TP1 Page 8
TEMPERATURE EQU $0 68HC11 : co mpte rendu du TP1 Page 8

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii RADIATEUR_ON FCB $2000 RADIATEUR_OF FCB $2001 RADIATEUR_ON

RADIATEUR_ON

FCB

$2000

RADIATEUR_OF

FCB

$2001

RADIATEUR_ON

EQU

$0

RADIATEUR_OF

EQU

$0

RAM

EQU

$3000

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

* les données du programme

ORG

RAM

* début de la zone de données définie par un premier ORG

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

TEMPERATURE

RMB

1

*1 octet

RADIATEUR_OF

RMB

1

LDX

#TEMPERATURE

 

BREST

0,X

#$80

RADIATEUR_ON

SWI

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

Problème ?

END

Oui il y a un problème car la case mémoire d’adresse $2000 contient déjà 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 qu’on va concevoir pour effectuer une tâche précise, qui consiste à la somme de 1 à N nombres.

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

* initialiser une zone de mémoire RAM

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

* définition des constants hardwares pour les données et le code du programme

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

RAM

EQU

$2000

N

EQU

$82

*

défini une constante valant 130 en décimale

DEBUT

EQU

$ 0

*

défini une constante valant $0

*

le code du programme

 
 

ORG

RAM

* début

de la zone de code définie par RAM à l'adresse 2000

ORG RAM * début de la zone de code définie par RAM à l'adresse 2000 68HC11
ORG RAM * début de la zone de code définie par RAM à l'adresse 2000 68HC11

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii

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

 

TAB

NEXT_NCMPB

#$0

* Point d'entrée de la fonction

BEQ

FIN_S_N

* Instructions de la fonction

DECB

ABA

BCS

ERREUR

BRA

NEXT_N

ERREUR

LDAA

#$FF

FIN_S_N

 

RTS

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

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

END

* fin du fichier source

La valeur de B n’est plus présente lorsqu’on appelle la fonction, car la directive TAB écrase le contenu précédent de B et met le contenu de A.

Donc pour corriger ce problème, on doit sauver B dans la pile au début du module par un PSHB, puis le restituter avant le RTS final du module par un PULB.

Programme :

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

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

* définition des constantes software

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

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

*

le code du programme

ORG

CODE

* début de la zone de code

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

* mettre ici les instructions de votre programme principal

MAIN

LDAA

#N

*

passage de l'argument N par A

BSR

SOMME_N* Appel à la fonction SOMME_N

passage de l'argument N par A BSR SOMME_N* Appel à la fonction SOMME_N 68HC11 : co
passage de l'argument N par A BSR SOMME_N* Appel à la fonction SOMME_N 68HC11 : co

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii SWI * retour au moniteur

SWI

* retour au moniteur

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

* Module : SOMME_N

* Paramètres en entrée : N

* Valeur retournée : SOMME_N = 1+2+3+

+N

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

SOMME_N

PSHB

TAB

NEXT_NCMPB

#$0

* Point d'entrée de la fonction

BEQ

FIN_S_N

* Instructions de la fonction

DECB

ABA

BCS

ERREUR

BRA

NEXT_N

ERREUR

LDAA

#$FF

FIN_S_N

PULB

RTS

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

END

* fin du fichier source

B. Module de temporisation logicielle :

B.1. Temporisation donnant une durée fixe :

Programme :

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

* définition des constantes hardware pour les données et le code

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

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

* définition des constantes software

* définition des constantes software 68HC11 : co mpte rendu du TP1 Page 11
* définition des constantes software 68HC11 : co mpte rendu du TP1 Page 11

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii ***************************************************************************

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

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

* les données globales du programme

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

*

le code du programme

ORG

CODE

* début de la zone de code

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

* mettre ici les instructions de votre programme principal

MAIN

LDAA

#0

*

passage de l'argument N par A

BSR

TEMPO_F * Appel à la fonction à concevoir

SWI

* retour au moniteur

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

* Module : TEMPO_F

* Paramètres en entrée :

* Valeur retournée :

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

TEMPO_F

PSHY

* 5 cycles

 

LDY

#35

* 4 cycles

PAS_FINI

DEY

BNE

PAS_FINI * 3 cycles

 

* Soit 7 cycles par boucle

* répétée 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

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

TEMPO_F ************************************************************************** 68HC11 : co mpte rendu du TP1 Page 12
TEMPO_F ************************************************************************** 68HC11 : co mpte rendu du TP1 Page 12

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii END * fin du fichier source B.2. Temporisation

END

* fin du fichier source

B.2. Temporisation donnant une durée variable (temporisation paramétrée) :

On défini une variable N contenant le délai en ms

Programme :

* définition des constantes hardware pour les données et le code du pro gramme

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

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

* définition des constantes software

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

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

* les donnees du programme

ORG

DATA

* début de la zone de données définie par un premier ORG

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

N FCB

#50

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

* le code du programme

ORG

CODE

* début de la zone de code définie par deuxième ORG

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

MAIN

LDX

#N

*délai de N ms

BSR

TEMPO_P *appel au module TEMPO_P à écrire

SWI

*rend la main au moniteur au bout de N ms

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

TEMPO_P

CPX

#$00

BEQ

FIN

BSR

TEMPO_1MS

DEX

BRA

TEMPO_P

FIN

RTS

* 5 cycles

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

TEMPO_1MS

PSHY

LDY

#285

* 5 cycles

* 4 cycles

TEMPO_1MS PSHY LDY #285 * 5 cycles * 4 cycles 68HC11 : co mpte rendu du
TEMPO_1MS PSHY LDY #285 * 5 cycles * 4 cycles 68HC11 : co mpte rendu du

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii PAS_FINI DEY * 4 cycles BNE PAS_FINI *

PAS_FINI

DEY

* 4 cycles

BNE

PAS_FINI * 3 cycle * 7cycle * N

PULY

* 6 cycle

RTS

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

END

I.4. Modules de conversion :

Conversion HEXA/ASCII:

* fin du fichier source

* Notre binôme a été chargé de concevoir le module de conversion Hexa/ASCII.

Programme :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

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

* définition des constantes software

ZONE

EQU

$2200

* elles dépendent de votre programme

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

* les données globales du programme

* mettre ici les données globales

* non initialisées ( RMB ) ou initialisées (FCB, FDB, FCC )

ORG

DATA

* début deuxième zone des globales

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

HEXA

FCB

$0

* Déclaration de variableHEXA avec initialisation à 0

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

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

*

le code du programme

ORG

CODE

* début de la zone de code

*

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

* mettre ici les instructions de votre programme principal

* mettre ici les instructions de votre programme principal 68HC11 : co mpte rendu du TP1
* mettre ici les instructions de votre programme principal 68HC11 : co mpte rendu du TP1

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii MAIN LDAA HEXA LDX #ZONE BSR H_2_A SWI

MAIN

LDAA

HEXA

LDX

#ZONE

BSR

H_2_A

SWI

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

* module: H_2_A

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

*

point d'entrée du module = nom du module =adresse de la première

*

instruction du module

 

*

H_2_A

 

PSHA

ANDA

#$F0

* Masquer les bits de poids faible pour

 

* isoler le caractère à *gauche

 

LSRA

* Décaler B à droite

LSRA

* Décaler B à droite

LSRA

* Décaler B à droite

LSRA

* Décaler B à droite

CMPA

#$09

* Tester si le premier caractère est un chiffre ou lettre

BHI

CAR_H

ADDA

#$30

STAA

0,X

JMP

TOTO

CAR_H

ADDA

#55

STAA

0,X

TOTO

PULA

ANDA

#$0F

* Masquer les bits de poids fort pour isoler le caractère à droite

CMPA

#$09

* Tester si le premier caractère est un chiffre ou lettre

BHI

CAR_L

ADDA

#$30

STAA

1,X

JMP

TITI

CAR_L

ADDA

#55

CAR_L ADDA #$30 STAA 1,X JMP TITI CAR_L ADDA #55 68HC11 : co mpte rendu du
CAR_L ADDA #$30 STAA 1,X JMP TITI CAR_L ADDA #55 68HC11 : co mpte rendu du

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii   STAA 1,X TITI RTS   RTS *
 

STAA

1,X

TITI

RTS

 

RTS

* point de sortie du module

*

* retour à l'appelant

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

END

* fin du fichier source

Les effets de bord sont marqués par les valeurs limites du code ASCII d’un chiffre ou d’une lettre, c'est-à-dire les codes ASCII des caractères ‘9’ (qui est de $39 en Hexadécimale) et ‘A’ (qui est de $41 en Hexadécimale).

Conversion HEXA/ASCII:

Ce module nous a été donné par un autre binôme, car on en aura besoin dans le TP3.

Programme :

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

RAM_HC11

EQU

$0

DATA

EQU

$2000

PROGRAMME EQU

$3000

N1

EQU

10000

N2

EQU

1000

N3

EQU

100

N4

EQU

10

HEXA

EQU

$0000

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

 

ORG

DATA

ADRESS

RMB

5

FIN

FCB

$00

ORG

PROGRAMME

MAIN

LDD

#HEXA

 

LDY

#ADRESS

BSR

H_2_D

PROGRAMME MAIN LDD #HEXA   LDY #ADRESS BSR H_2_D 68HC11 : co mpte rendu du TP1
PROGRAMME MAIN LDD #HEXA   LDY #ADRESS BSR H_2_D 68HC11 : co mpte rendu du TP1

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii SWI **********************************************

SWI

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

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

*

*

Module: H_2_D

*

Fonction réalisée: Converti l' hexa en décimal

*

Parametre d'entree:

*

Parametre de sortie:

*

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

H_2_D

LDX

#N1

 

IDIV

XGDX

ADDB

#$30

STAB

0,Y

XGDX

LDX

#N2

IDIV

XGDX

ADDB

#$30

STAB

1,Y

XGDX

LDX

#N3

IDIV

XGDX

ADDB

#$30

STAB

2,Y

XGDX

LDX

#N4

IDIV

IDIV XGDX ADDB #$30 STAB 2,Y XGDX LDX #N4 IDIV 68HC11 : co mpte rendu du
IDIV XGDX ADDB #$30 STAB 2,Y XGDX LDX #N4 IDIV 68HC11 : co mpte rendu du

Binôme : SALHI Samir & DA HMANI Rabii

Binôme : SALHI Samir & DA HMANI Rabii XGDX ADDB #$30 STAB 3,Y XGDX ADDB #$30

XGDX

ADDB

#$30

STAB

3,Y

XGDX

ADDB

#$30

STAB

4,Y

RTS

END

#$30 STAB 3,Y XGDX ADDB #$30 STAB 4,Y RTS END 68HC11 : co mpte rendu du
#$30 STAB 3,Y XGDX ADDB #$30 STAB 4,Y RTS END 68HC11 : co mpte rendu du

Binôme : SALHI Samir & DAHMANI Rabii

Binôme : SALHI Samir & DAHMANI Rabii TP2 microC : 68HC11 Objectifs Principaux : Les ressources

TP2 microC : 68HC11 Objectifs Principaux :

Les ressources internes du HC11.

Programmation des entrées sorties logiques.

Gestion d’un afficheur matriciel.

Utilisation du CAN.

Gestion de la liaison série SCI.

Utilisation des bibliothèques 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 schéma et définition des signaux :

Table de vérité de l’octal buffer 74LS244 :

PA5

Etat des K1i

Etat des K2i

0

Ouverts

Fermés

1

Fermés

Ouverts

Branchement des D i sur les lignes PD i du PORTD du HC11 via le buffer 74LS244 :

Numéro LED

Couleur LED

Ligne PD i de PORTD

D

1

Jaune

PD 5

D

2

Verte

PD 4

D

3

Orange

PD 3

D

4

Rouge

PD 2

2 Verte PD 4 D 3 Orange PD 3 D 4 Rouge PD 2 68HC11 :
2 Verte PD 4 D 3 Orange PD 3 D 4 Rouge PD 2 68HC11 :

Binôme : SALHI Samir & DAHMANI Rabii

Binôme : SALHI Samir & DAHMANI Rabii Définition des signaux logiques des ports PORTA et PORTD

Définition des signaux logiques des ports PORTA et PORTD :

   

Emplacement dans le registre

Valeur en

Valeur en

Registre

Signal logique

binaire

hexadécimal

PORTA

DIR

Bit n° 5

0010

0000

$20

 

LED_ROUGE

     

Bit n° 2

0000

0100

$04

(PD 2 )

 

LED_ORANGE

     

PORTD

(PD 3 )

Bit n° 3

0000 1000

$08

LED_VERTE

     

(PD 4 )

Bit n° 4

0001 0000

$10

LED_JAUNE

     

(PD 5 )

Bit n° 5

0010 000

$20

B. Etude du principe et test rapide du fonctionnement « à l’arrache » :

Programme qui allume la LED Verte :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

BASEREG

EQU

$1000

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

DDRD

EQU

$08

PORTD

EQU

$09

PORTA

EQU

$00

DIR

EQU

$20

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

* définition des constantes software

* elles dépendent de votre programme

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

* les données globales du programme

* mettre ici les données globales

* les données globales du programme * mettre ici les données globales 68HC11 : compte rendu
* les données globales du programme * mettre ici les données globales 68HC11 : compte rendu

Binôme : SALHI Samir & DAHMANI Rabii

Binôme : SALHI Samir & DAHMANI Rabii * non initialisées ( RMB ) ou initialisées (FCB,

* non initialisées ( RMB ) ou initialisées (FCB, FDB, FCC )

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

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

* le code du programme

ORG

CODE

* début de la zone de code

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

* mettre ici les instructions de votre programme principal

MAIN

LDX

#BASEREG

BCLR

PORTA,x

#$20

BSET

DDRD,X

#$10

BSET

PORTD,X

#$10

BCLR

PORTD,X

#$10

SWI

* retour au moniteur

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

* module: ALLUME_VERTE

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

END

C. Mise en forme structurée :

* fin du fichier source

Programme qui allume une LED à sélectionner :

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

BASEREG

EQU

$1000

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du program me

DDRD

EQU

$08

PORTD

EQU

$09

PORTA

EQU

$00

DIR

EQU

$20

*

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

*

définition des constantes software

*

elles dépendent de votre programme

*

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

JAUNE

EQU

#$32

VERTE

EQU

#$33

ORANGE

EQU

#$34

ROUGE

EQU

#$35

*

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

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

* les données globales du programme

* mettre ici les données globales

* non initialisées ( RMB ) ou initialisées (FCB, FDB, FCC )

les données globales * non initialisées ( RMB ) ou initialisées (FCB, FDB, FCC ) 68HC11
les données globales * non initialisées ( RMB ) ou initialisées (FCB, FDB, FCC ) 68HC11

Binôme : SALHI Samir & DAHMANI Rabii

Binôme : SALHI Samir & DAHMANI Rabii *************************************************************************** *

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

*

le code du programme ORG

CODE

* début de la zone de code

*

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

* mettre ici les instructions de votre programme principal MAIN

LDX

#BASEREG

BSR

ALLUME_LED

SWI

SWI

* retour au moniteur

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

* module: ALLUME_LED

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

*

point d'entrée dumodule = nom du module =adresse de la première

 

*

instructiondu module

 

*

ALLUME_LED

 

PSHX

LDX

#BASEREG

CMPA

#$32

BEQ

JAUNE_BOUCLE

 

CMPA

#VERTE

BEQ

VERTE_BOUCLE

 

CMPA

#ORANGE

BEQ

ORANGE_BOUCLE

 

CMPA

#ROUGE

BEQ

ROUGE_BOUCLE

 

VERTE_BOUCLE

BCLR

PORTA,X

#$20

 

BSET

DDRD,X

#$10

* Mettre le port de la l ed verte en sortie

BSET

PORTD,X

#$10

* Allumer la led verte

JMP

FIN_BOUCLE

 

JAUNE_BOUCLE

BCLR

PORTA,X

#$20

 

BSET

DDRD,X

#$20

* Mettre le port de la led jaune en sortie

BSET

PORTD,X

#$20

* Allumer la led jaune

JMP

FIN_BOUCLE

 

ORANGE_BOUCLE

BCLR

PORTA,X

#$20

 

BSET

DDRD,X

#$08

* Mettre le port de la led orange en sortie

BSET

PORTD,X

#$08

* Allumer la led verteorange

JMP

FIN_BOUCLE

 

ROUGE_BOUCLE

BCLR

PORTA,X

#$20

 

BSET

DDRD,X

#$04

* Mettre le port de la led rouge en sortie

BSET

PORTD,X

#$04

* Allumer la led verte rouge

JMP

FIN_BOUCLE

 

FIN_BOUCLE

*

FIN

PULX

RTS

* point de sortiedu module

*

* = retour à l'appelant

 
RTS * point de sortiedu module * * = retour à l'appelant   68HC11 : compte
RTS * point de sortiedu module * * = retour à l'appelant   68HC11 : compte

Binôme : SALHI Samir & DAHMANI Rabii

Binôme : SALHI Samir & DAHMANI Rabii ************************************************************************** END *

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

END

* fin du fichier source

Programme qui éteint une LED à sélectionner :

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

* définition des constantes hardware pour les données et le code

* en général ce sont des adresses dépendant du mapping du système

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

RAM_HC11

EQU

$0000

* début de la page 0 (RAM interne du HC11)

BASEREG

EQU

$1000

DATA

EQU

$2000

* début de la zone des données du programme

CODE

EQU

$3000

* début de la zone de code du programme

DDRD

EQU

$08

PORTD

EQU

$09

PORTA

EQU

$00

DIR

EQU

$20

*

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

*

définition des constantes software

*

elles dépendent de votre programme

*

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

JAUNE

EQU

#$32

VERTE

EQU

#$33

ORANGE

EQU

#$34

ROUGE

EQU

#$35

*

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

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

*

les données globales du programme

 

*

mettre ici les données globales

*

non initialisées ( RMB ) ou initialisées (FCB, FDB, FCC )

*

le code du programme ORG

CODE

* début de la zone de code

*

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

* mettre ici les instructions de votre programme principal MAIN

LDX

#BASEREG

BSR

ETEIND_LED

SWI

SWI

* retour au moniteur

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

* module: ETEIND_LED

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

*

point d'entrée dumodule = nom du module =adresse de la première

*

instructiondu module

*

ETEIND_LED

PSHX

CMPA

#JAUNE

BEQ

JAUNE_BOUCLE

CMPA

#VERTE

BEQ

VERTE_BOUCLE

CMPA

#ORANGE

BEQ JAUNE_BOUCLE CMPA #VERTE BEQ VERTE_BOUCLE CMPA #ORANGE 68HC11 : compte rendu du TP2 Page 5
BEQ JAUNE_BOUCLE CMPA #VERTE BEQ VERTE_BOUCLE CMPA #ORANGE 68HC11 : compte rendu du TP2 Page 5

Binôme : SALHI Samir & DAHMANI Rabii

Binôme : SALHI Samir & DAHMANI Rabii BEQ ORANGE_BOUCLE   CMPA #ROUGE BEQ ROUGE_BOUCLE  

BEQ

ORANGE_BOUCLE

 

CMPA

#ROUGE

BEQ

ROUGE_BOUCLE

 

VERTE_BOUCLE

BCLR

PORTA,X

#$20

BSET

DDRD,X

#$10

* Mettre le port de la led verte en sortie

BCLR

PORTD,X

#$10

* Eeindre la led verte

JMP

FIN_BOUCLE

JAUNE_BOUCLE

BCLR

PORTA,X

#$20

BSET

DDRD,X

#$20

* Mettre le port de la led jaune en sortie

BCLR

PORTD,X

#$20