Copyright: SoFt


Sommaire
Sommaire de l'aide DevMic

Généralités

 	Présentation de l'outil de développement pour microcontrôleur MC68HC11 de Motorola.

 	Organisation d'une session de travail

Simulateur intégré

Moniteur

Fonctions de base

 	Editeur multifichiers.  Particularités

 	Assembleur,

 	Editeur de liens

 	Débogueur source

 	Manipulation de la mémoire du microcontrôleur

 	Outils à disposition du programmeur

Fonction annexes

Conseils d'optimisation

Associer des images  ( schémas, organigrammes ... ) aux programmes.

Bulles d'information

Langages utilisables

 	Langage C

Pascal.

Matériels utilisables

Critères généraux

 	Liste des matériels testés avec DevMic.


Présentation de DevMic
Présentation

DevMic est un environnement de développement intégré pour microcontrôleur MC68HC11.

Toutes les commandes sont accessibles depuis l'éditeur de textes par l'intermédiaire de

• un menu déroulant

• un menu contextuel

• une barre d'outils

Deux versions sont proposées :

DevMic11as pour développer en assembleur

DevMic11acps pour développer en assembleur, en langage C et en Pascal


Editeur multi-textes

Textes

L'éditeur permet de travailler simultanément sur plusieurs applications.

Ceci permet d'échanger des morceaux de texte d'une application à l'autre par "Copier/Coller" ou par "glisser/déplacer".

Si l'option de mise en évidence de la syntaxe est activée, dans les textes source et les listings, les mots sont colorés en liaison avec leur fonction dans le texte.

Seules les fontes de caractères à largeur fixe sont supportées par l'éditeur. Les styles GRAS et ITALIQUE ne sont pas tolérés. On peut changer de fonte depuis le menu "Options/Editeur".

La ligne en cours de saisie est réévaluée à chaque frappe du clavier.

Dans le texte source, on peut cliquer sur un symbole pour voir la valeur numérique associée.

Cliquer sur une valeur numérique affiche la correspondance de cette valeur en Décimal, Hexagonal et binaire.

Sauvegarde

Les listings, les trames S1S9 ne sont pas automatiquement sauvés sur le disque. Il faut, si nécessaire utiliser la rubrique "Créer Fichier Objet" du menu "Fichiers".

Indentation automatique

En frappant la touche <Entrée> , le curseur vient se positionner à la ligne suivante au niveau du premier caractère de la ligne en cours. L'indentation peut être supprimée dans le menu "Options/Editeur".

Tabulation

La touche "TAB" provoque une tabulation, c'est à dire le passage à la colonne pn+1  (n et p:entiers positifs ) immédiatement supérieure. La largeur de tabulation p est règlable dans les options de l'éditeur.

Mise en page automatique du texte (en assembleur seulement)

Cette fonction du menu "Edition / Formater" permet d'améliorer la présentation. On peut donc saisir le texte sans trop se soucier de la mise en page.

Visualisation des erreurs

Les erreurs d'assemblage , de compilation et de translation sont montrées dans le texte: la ligne de l'erreur apparait sur fond rouge.

Elle est reformatée dès que l'on rectifie l'erreur.

Marquage de la ligne courante

Depuis le débogueur ou l'outil de recherche et remplacement, la ligne courante est visualisée sur fond de couleur.

Pour une recherche, la couleur de fond est obtenue par inversion de la couleur courante.

Dans le débogueur, deux couleurs sont utilisées :

- Vert-jaune si la ligne a été trouvée directement.

- Violet si la ligne a été trouvée par approximation.

Placer des repères dans la marge

Lorsque le texte est long, pour faciliter le déplacement (navigation) d'une ligne à une autre, on peut placer des index dans la marge pour passer ensuite facilement d'un index à l'autre.

- Pour placer/Enlever un index : bouton central de la souris ou menu contextuel (bouton droit) / Index ou encore Ctrl-I.

- Pour passer d'un index à l'autre : molette de la souris ou  menu contextuel / Index / Suivant ou encore Ctrl-S.

Commandes particulières

Outre les commandes classiques de Microsoft-Windows, certains raccourcis ont été ajoutés :

- Pour effacer une ligne : Ctrl-Y

- Pour recopier une ligne : Ctrl-R

- Pour changer d'application : Ctrl-F6  (si plusieurs applications chargées).

- Pour commuter en mode Insertion/Recouvrement : INSER

Un menu contextuel ( bouton droit de la souris) permet d'aller au début ou à la fin du texte (Ctrl-D et Ctrl-F).

Une barre d'outils reprend et complète ces commandes.


Assembleur intégré

L'assembleur est un programme dont la fonction est de produire l'image du code objet ( langage machine ) à partir d'un texte.

L'assembleur est aussi un langage dont les éléments sont les symboles, les expressions, les instructions, les directives et les signes réservés.

 Une fenêtre est ouverte au cours de l'assemblage. Elle permet de visualiser la liste des textes-source utilisés, la liste des symboles et la liste des variables. La progression de l'assemblage en deux passes est montrée. L'assemblage est stoppé dès qu'une erreur est rencontrée. Si une erreur intervient, elle est montrée à la fois dans une fenêtre d'état et dans les textes. En cliquant dans la liste des sources, on peut les éditer. En cliquant dans la liste des symboles ou des variables, on peut les rechercher dans le texte-source.

L'assembleur crée un listing et une trame S1S9.


FonctionASM
Rôle de l'assembleur

Exécution d’un instruction élémentaire.

    On rappelle ici, à partir d’un exemple simple, le mécanisme de transfert d’une donnée. L'objectif  est de montrer que 4 octets de programme entraînent un processus assez complexe.

A l’instant initial, le compteur de programme contient la valeur AD. Les différentes séquences composant cette manipulation de données sont :

· La valeur AD est sortie sur le bus d’adresse alors que la ligne R/W est à l’état logique 1.

· Cette adresse étant en ROM, celle-ci présente sur ses sorties de données la valeur $96. L’unité centrale la lit et la place dans un tampon.

· Le compteur de programme est incrémenté d’une unité.

· L’adresse (AD+1) étant présente sur le bus d’adresse, la valeur $10 est acquise par le bus de données. Cette valeur, élargie à 16 bits ($0010) est transférée dans le compteur de programme.

· La valeur $0010 est présente sur le bus d’adresse. La ligne RW est toujours à 1. L’adresse étant en RAM, celle-ci place sur ses sorties de données le contenu de l’adresse $0010.

· La donnée est chargée dans l’accumulateur A.

· Le compteur de programmes est incrémenté d’une unité : il contient maintenant (AD+2).

· La ROM renvoie maintenant la valeur $97. Cette donnée est stockée dans un tampon et utilisée par l’unité centrale.

· PC est à nouveau incrémenté : son contenu vaut maintenant (AD+3).

· La ROM renvoie la valeur $12. Cette valeur, élargie à 16 bits, est présentée sur le bus d’adresse.

· L’octet contenu dans l’accu A est sorti sur le bus de données. La ligne R/W passe à 0. Le contenu de l’accu A est donc écrit à l’adresse $0012.

Mais comment ces 4 octets (ceux du programme en ROM) ont-ils été générés ?

Le programmeur aurait pu les déterminer en consultant la documentation du constructeur. Il y aurait vu que $96 est le code machine qui demande au µP de charger le contenu de l’adresse définie par l’octet suivant ($10) ; cette adresse étant fournie avec seulement 8 bits (adressage direct). Il aurait fait de même pour les octets $97 et $12.

Texte associé

Il aurait également pu écrire dans un texte :

· « Charger l’octet d’adresse $0010 dans l’accumulateur A »

· « Stocker l’accumulateur A à l’adresse $0012. »

mais cette expression est trop longue, en regard de la tâche accomplie.

Le constructeur propose donc un résumé de ces 2 phrases :

AD	lda $0010

sta $0012

Le programmeur s’est donc contenté d’écrire ce texte et l’a confié à un programme qui l’a converti en code machine (les 4 octets). Le programme s’appelle un assembleur et, par extension, on dira que ce type de texte est en langage assembleur.


Symboles

Un symbole est une chaîne de caractères qui satisfait aux exigences suivantes :

· Les caractères sont des minuscules, des majuscules, des chiffres ou le souligné ( ' _ '  ) .

· Les espaces ne sont pas autorisés.

· Le premier caractère ne peut pas être un chiffre.

Un symbole est toujours associé à une valeur numérique. Toute référence au symbole est une référence à la valeur numérique associée.

Pour contribuer à la lisibilité du programme, le symbole doit être représentatif de la fonction assurée par la partie du programme auquel il appartient.

Le choix des symboles du programme incombe au programmeur. Il évitera les symboles passe-partout tels que "machin, truc, boucle, toto etc.." . Un symbole peut théoriquement contenir un nombre illimité de caractères, ce qui permet d'accoler plusieurs mots, par exemple :

LectureCapteurs

EteindreVoyantSiNecessaire	 Remarquer le rôle des majuscules (lisibilité).

drapeau_TDRF

Une étiquette est un symbole placé en début de ligne.

L’étiquette marque une position dans le programme, c’est à dire une adresse mémoire. Dés que l'étiquette est trouvée dans le texte-source, l'assembleur lui associe un nombre entier de 16 bits correspondant à l'adresse courante, c'est à dire à l'adresse de l'instruction qui suit l'étiquette.

Par exemple, les étiquettes suivantes

Sont autorisées	Sont interdites:

Initialisation1	1ereInit

DebutInter	Debut Inter

Debut_Inter	Debutd'Inter

_123abc	123abc


Expressions
Une expression est une combinaison de valeurs entières et de symboles liés par des opérateurs.

Elle est toujours évaluée de la gauche vers la droite. Aucun niveau de parenthèses n’est autorisé et l'expression ne doit pas contenir d'espaces.

      Exemples

  	lda 1+3                  	; équivaut à lda 4

                	lda machin+truc

                	lda 20*3-1/5        	; ((20x3)-1)/5 soit 11

                 	ldd  #2**        	;  charger le double de

;l’adresse courante

Pour ménager la lisibilité, on pourra utiliser des symboles intermédiaires tels que (par exemple) :

Produit	equ	20*3

Somme	equ	Produit-1

Quotient	equ	Somme/5

lda	#Quotient


Opérateur :

Signe désignant une opération entre deux éléments, entre deux valeurs numériques ou entre un symbole et une valeur numérique.

Les 4 opérateurs utilisables sont : +  -  *  /   correspondant respectivement à l'addition, la soustraction, la multiplication et la division.


Eléments du langage :

Si une ligne du  texte source n'est pas vide et n’est pas un commentaire, elle se compose de quatre champs dont certains peuvent être vides. Le champ Opérande peut contenir plusieurs éléments.

Exemples :

 Etiquette	Mnémonique 	Opérande(s)	Commentaire

 Debut	lds	#$ff	        ;Pile en RAM

 Tempo	equ	*

 	brclr	,x Tempo Masque	; 3 opérandes


L'Instruction est une chaîne de 3,4 ou 5 caractères désignant une action demandée au microprocesseur. Ces mnémoniques sont décrites par le constructeur du microcontrôleur.

Si la mnémonique contient des majuscules,  celles-ci sont converties en minuscules :

Les mnémoniques reconnues par l’assembleur intégré sont :

aba	abx	aby	adca	adcb	adda	addb	addd	anda	aslb

asld	asr	asra	asrb	bcc	bclr	bcs	beq	bhs	bita

bitb	ble	blo	bls	blt	bmi	bne	brn	brset	bset

bsr	bvc	bvs	cba	clc	cli	clv	cmpa	cmpb	com

coma	comb	cpd	cpx	cpy	decb	des	dex	dey	eora

eorb	fdiv	idiv	inc	inx	iny	jmp	jsr	lda	ldaa

ldab	ldb	ldd	lsl	lsla	lslb	lsld	lsr	lsra	lsrb

lsrd	mul	nop	ora	oraa	orb	orab	psha	pshb	pshx

pshy	pula	pulb	rola	rolb	ror	rora	rorb	rti	rts

sba	sbca	sev	sta	staa	stb	stab	std	stop	sts

stx	subd	swi	tab	tap	tba	test	tpa	tst	tsta

txs	tys	wai	xgdx	xgdy


Directives de l'assembleur

Une directive est un ordre donné à l’assembleur pour lui faire effectuer une tache ou pour modifier son comportement. La directive n'a donc d'existence que pendant l'assemblage : elle ne débouche pas sur un code machine.

Voici les directives de l'assembleur intégré :

Directive "drc"  (abréviation de "Direct")

L’assembleur utilise l’adressage direct. Il est utilisé dans la mesure du possible, c’est à dire si l’adresse est inférieure à $100. Dans le cas contraire, une erreur est signalée.

Syntaxe : [<Symbole>] drc

Exemple ( ces 2 séquences sont équivalentes )

ldd $102E	ldd $102E

drc

stb 0	stb <0

sta 1	sta <1

Le caractère ">" force l'adressage étendu alors que le caractère "<" force l'adressage immédiat.

Directive "equ" (abréviation de 'équivalent à')

permet d’associer un symbole à une valeur numérique.

Syntaxe : <Symbole> equ <Expression>

exemple

registres 	equ $1000

ddrc	equ registres+7

Debut	equ *

Directive "end"

Est tolérée mais inactive : c’est la fin de fichier qui délimite la fin du texte. Assure la compatibilité avec d'autres assembleurs.

Syntaxe : [Symbole] end

 	Dans cet exemple, la directive "end" ne sert à rien car la fin du texte intervient après la ligne "end":

lda #10

end

rts

Directive "etd" (abréviation de "Etendu")

L’assembleur utilise l'adressage étendu. Ce mode d'adressage est utilisé par défaut. Utiliser la directive "etd" n'a un sens que si l'on a déjà utilisé la directive "drc".

Syntaxe :  [Symbole] etd

Exemple :

drc

Debut 	lda 	0	; génère 86 00

etd

lda	0	;génère b6 00 00

Directive "fcb"      (abréviation de 'Fill Constant Byte')

Déclare une série de constantes de taille 8  bits.

Syntaxe : [Symbole] fcb <Expression1> [,<Expression2>]...

exemple :

  Table 	fcb 10,valeur,$3f,%11101  [<Commentaire>]

Directive "fcc"   (abréviation de 'Fill Constant Character')

Déclare une série de constantes de type caractère ASCII. La chaîne de caractères ne peut contenir d’apostrophe car  elle est délimitée par des apostrophes.

Contrairement aux assembleurs d'origine américaine, l'assembleur intégré accepte les minuscules accentuées dans les chaînes de caractères.

Syntaxe : [Symbole] fcc ‘CaractèreAscii[,CaractèreAscii]...’[,<suite d'expressions>]

exemple :

Message 	fcc ‘caractères accentués autorisés’     [Commentaire]

ChaineAZT 	fcc 'A zéro terminal',13,10,0

Directive "fdb"   (abréviation de 'Fill Double Byte')

Déclare une série de constantes de taille 16 bits.

Syntaxe : [Symbole] fdb Expression1[,Expression2]

exemple : 	 table16 	fdb 0,adresse,$fffe,%1111000011110000

Directive "fill"

Rempli une zone avec une constante.

Syntaxe : [Symbole] fill <Expression1>,<Expression2>  [commentaire]

<Expression1> désigne la constante  alors que  <Expression2 > désigne la taille de la zone en octets.

exemples :

fill valeur,taille

fill $ff,fin-*+1	;remplit la zone délimitée par l'adresse courante et l'étiquette 'fin' avec la valeur $ff.

Les adresses associées à FCB, FCC, FDB, FILL sont toujours en mémoire ROM.

Directive "include"

Insère un texte-source se trouvant sur le disque.

Syntaxe  [<Symbole>]  include  [<Chemin>]  <NomFichier>  [<Extension>]

Si l'extension du fichier n'est pas indiquée, l'extension par défaut ".ASM" est ajoutée.

Si le chemin de recherche n'est pas indiqué, le fichier est cherché

- dans le répertoire courant.

- dans le répertoire "lib"

Exemples

include OutSCI

include OutSCI.asm

include lib.asm

Directive "org"  (abréviation de « origine »)

Fixe une (nouvelle) adresse d’implantation du code généré

Syntaxe : 	[<Symbole>] org <Expression> [commentaire]

exemple :

RESET	equ 	-2	;soit $fffe

Vecteur 	org	RESET

fdb	DebutProgramme

Directive "page"

Conservée pour la compatibilité avec d'autres assembleurs, cette directive n'a aucune action.

Directive "rmb"  (abréviation de « Reserve Memory Byte »)

Réserve un espace pour y loger des variables.

Syntaxe : 	[<Symbole>] rmb <Expression>	 [<commentaire>]

exemple :

Table	rmb 10	;10 octets pour le tableau

x	rmb  2 	;2  octets pour la variable x

Directive "title"

Conservée pour la compatibilité avec d'autres assembleurs, cette directive n'a aucune action.

Directive "uses"

Recense des références externes pour forcer le lieur à les incorporer au code objet.

Cette directive est nécessaire pour confectionner des librairies d'éxécution.

Syntaxe : 	[<Symbole>] uses <Liste de symboles>	 [<commentaire>]

exemple :

uses OutSCI,InSCI	; E/S de caractères


Signes utilisés par l'assembleur

Le signe "#" demande l’adressage immédiat

 	Exemple

lda #10	; charger 10 dans a

 Texte	ldx #message	;adresse de début du texte dans X

Le signe "> " force l’adressage étendu

Exemple :

lda PortA

sta >$10

 Si aucune directive n'est donnée à l'assembleur Xa11, c'est toujours l'adressage étendu qui est utilisé.

Le signe "<" force l’adressage direct

Exemple :

lda <10

Ecrire "lda <adresse "  avec adresse > $ff est incorrect et provoque une erreur d’assemblage.

L'étoile «  *  »  possède trois fonctions

· Elle représente l’adresse courante, c'est à dire l'image du compteur de programme au moment de l'assemblage.

· Elle délimite le début d’un commentaire si elle est placée colonne 1

· Elle représente l'opérateur de multiplication

Exemple :

bra	*	;boucle sans fin

 	brset data,x masque *  ;boucler tant que...

* ceci est une ligne de commentaire

ldd 10*valeur

Le Point-Virgule ";"

est toléré entre la partie utile de la ligne et le commentaire. Il n’est pas obligatoire.

La virgule ","

· est un séparateur dans fcb et fdb (Voir les exemples de fcb et fdb.)

· force l’adressage indexé si elle est suivie de ‘x’ ou ‘y’

Exemple

lda 	-1,x

lda  	,y	; équivaut à lda 0,y

lda 	1+4*5,x

L'apostrophe " ' "

· délimite une chaîne de caractères dans fcc (Voir l’exemple de fcc.)

· fait référence à un caractère ASCII

Exemple :

lda 	#'0'

lda 	#$30

 Ces deux lignes sont identiques car $30 est le code ASCII du caractère '0'.

 Le caractère 'Dollar' "$"

annonce une valeur numérique exprimée en hexadécimal

Les lettres ( de ‘A ‘à ‘F’.) utilisées dans la notation hexadécimale sont indifféremment minuscules ou majuscules.

Le caractère '%' annonce une valeur numérique exprimée en binaire

Exemples :

lda 	#%00000001

lda 	#$01

lda 	#1

* Ces trois lignes sont identiques

Si un caractère non autorisé est rencontré dans l'écriture d'un nombre, le nombre est considéré comme nul.

Ainsi, les nombres suivants sont nuls pour l'assembleur :

%012

$100X

123_5

La notation octale n’est pas permise avec l’assembleur intégré.

Le point d'interrogation '?' placé devant un symbole transforme celui-ci en référence externe.

Seuls les opérandes des branchements et sauts absolus sont autorisés comme références externes.

Exemple:

jsr	?OutSCI	;sortir le contenu de A sur SCI

jmp	?StartMon	;retour au moniteur

L'espace et le caractère <TAB> sont des délimiteurs

Ils permettent de séparer les différents champs ainsi que les éléments d'un champ


Une Variable est une portion de la mémoire RAM qui est

- Réservée en utilisant la directive RMB

- Nommée en utilisant une étiquette.

Elle est caractérisée par son nom, sa taille et son adresse.

Exemples

Resultat 	RMB  2

Tableau 	RMB  LongueurTable


Un opérande est un symbole ou une valeur numérique placé à la suite de la  mnémonique.

Le nombre et la taille des opérandes est défini pour chaque  mnémonique et pour le mode d’adressage requis.

"ldx #$0001" est plus lisible que "ldx #1" (Le programmeur  rappelle que X contient deux octets).


Erreur
Erreurs d'assemblage

Message 1 :"Ce symbole est inconnu : <Symbole> "

L’assembleur scrute la table des symboles et ne trouve pas celui auquel vous faites référence. Il n'a pas été déclaré sous forme d'une étiquette ou à l'aide de la directive "equ".

Message 2: "Branchement relatif trop long "»

La différence entre l’adresse de destination et l’adresse courante sort de l’intervalle [-128..+127]   ( un octet signé)

Message 3 :"Adresse trop grande (<Adresse>) en adressage direct"

L’instruction décrite par la mnémonique attend un octet mais l’opérande est supérieur à $ff.

Message 4 : "Caractère " ‘ " absent dans fcc... »

La chaîne de caractères décrite avec la directive fcc n’est pas délimitée par des apostrophes.

Message 5 : "Mnémonique inconnue : <Mnémonique> "

Le mot utilisé ne correspond pas à une mnémonique reconnue par l'assembleur.

Message 6: " Ce symbole est déjà défini : <Symbole> "

Le symbole déclaré figure déjà dans la table des symboles.

Message 7: " Une ligne ne peut commencer par <PremierCaractère> "

Le caractère de la première colonne ne peut être que :

· un espace ou une tabulation

· une lettre minuscule ou majuscule

· un souligné "  _ "

· une étoile

Message 8: "Fichier non trouvé dans la directive "include".

Le nom ou le chemin d'accès au fichier n'est pas correct.


Valeurs  numériques en assembleur

Les nombres sont des entiers compris entre

0 et 65535 pour les quantités non signées

-32768 et +32767 pour les quantités signées.

3 représentations sont acceptées :

Représentation décimale:    [<signe>]  <1 à 5 chiffres>

Représentation Hexadécimale :  '$' <1 à 4 chiffres ou lettres>

Représentation binaire  : '%' <1 à 16 chiffres>


Une Application se compose de 5 textes au maximum :

- Texte source Assembleur , C ou Pascal: c'est le texte saisi au clavier.

- Texte source préparé (langage C uniquement) : Les commentaires sont supprimés, les définitions sont résolues..

- Texte assembleur issu du compilateur (langage C uniquement)

- Listing : les adresses et les codes objet sont insérés dans le texte-source.

- Trame S1S9 : Elle contient les codes à télécharger.


Le Listing est composé de 8 champs

1. Le numéro de la ligne du texte-source

2. Les adresses

3. Les codes objet générés par l'assembleur

4. La durée de l'instruction (nombre de cycles)

5 à 8 : les 4 champs du texte-source.


La trame S1S9
Trame S1S9

C'est le texte de sortie utilisé pour télécharger le code objet dans le microcontrôleur. C'est toujours un texte imprimable et standard pouvant être utilisé par de nombreux outils. Outre les données du code objet, il contient les adresses d'implantation du code et des octets de vérification (Signature).

Chaque ligne contient 5 champs :

Champ	Nombre de	Remarques

caractères

Type	2	Toujours S1 ou S9 :S1 si la ligne contient

des données ou du code et S9 si la ligne

contient une adresse d'exécution.

Longueur	2	Nombre de paires de caractères dans la ligne

en excluant les champs "type" et "longueur"

Adresse	4	Adresse de la première donnée sur 2 octets.

Données	1..30	soit 2 à 60 caractères.

Signature	2	C'est l'octet de poids faible du complément à 1

de la somme : longueur + adresse  +données.

En général, toutes les lignes commencent par "S1" sauf la dernière qui, elle, commence par "S9".

Exemple de trame S1S9 :

S11CE000CEE0728D337C1004F610044F8D3ACEE0878D257F1007F61003ED

S11CE0194F8D2CCEE09C8D177A10077C1003F610034F8D1B093D26FCCE9E

S11CE032E0B48D0220C8E600270B7D102E2AFBF7102F0820F1398F4F3632

S11CE04B8FCE000202CB30C1392302CB27378C000026ED335D270A7D1027

S11CE0642E2AFBF7102F20F2CEE0B18DC739536F72746965207375722008

S11CE07D706F72742042203A0900456E747282652073757220706F72741D

S11CE0962043203A0900536F727469652073757220706F72742043203A15

S10AE0AF09000A0D000C003A

S903E000FC

En lisant la première ligne on voit :

· Que c'est une ligne de données ("S1")

· Qu'elle contient $1c octets utiles

· Que l'adresse de la première donnée est $e000

· Que sa signature est $ed

En lisant la dernière ligne on voit :

· Qu'elle contient une adresse d'exécution ("S9")

· Que cette adresse est celle du premier octet de code :  $e000

Pour pouvoir accepter des références externes, l'assembleur Xa11, lorsqu'il en rencontre une, insère son symbole dans la trame S1S9 et entre deux parenthèses. La trame n'est alors plus normalisée mais ceci est provisoire car le lieur (éditeur de liens) calculera la valeur des octets manquants (adresse associée au symbole et signature) et produira une trame normalisée.

Par exemple, voici la trame "essai.s19" en sortie de l'assembleur :

S113001086AAB71004731004CE2710BD(delay+3)20F5??

S9030010EC

 Remarquer que la signature  de la 1ère ligne n'a pu être calculée.

Voici la même trame en sortie du lieur

S113001086AAB71004731004CE2710BD002320F560

S113002030EE02270A86CC4A4C4A26FB0926F639CA

S9030010EC

La deuxième ligne correspond au sous-programme "Delay" inséré dans la trame par le lieur.

Le lieur a recalculé les signatures et la trame de sortie est normalisée.

Le programme Essai.asm :

* clignotant sur port B

PORTB         	equ   	$1004

DUREE	equ   	10000  	;période

org 	$10

               	lda   	#$AA

               	sta   	PORTB

BOUCLE        	com   	PORTB

               	ldx   	#DUREE

               	jsr   	?delay+3	;appel de la fonction DELAY

               	bra   	BOUCLE

End

Et le listing correspondant :

    9 1004	PORTB         	equ   $1004

  10 2710	DUREE	equ   10000  ;période

  11

  12

  13 0010	org 	$10

  14

  15 0010 86 AA	[ 2 ]               	lda   #$AA

  16 0012 B7 10 04	[ 4 ]               	sta   PORTB

  17

  18 0015 73 10 04	[ 6 ] 	BOUCLE        	com   PORTB

  19 0018 CE 27 10	[ 3 ]               	ldx   #DUREE

  20 001B BD ?? ??	[ 6 ]               	jsr   ?delay+3

  21 001E 20 F5	[ 3 ]               	bra   BOUCLE

  22

  23                                             	end


Débogueur-source

Ce processus s'appuie sur le moniteur.

Il permet de suivre l'éxécution d'un programme en visualisant

- La position de l'instruction en cours dans les texte-sources qui composent l'application.

- Les registres CPU

- Les registres du microcontrôleur

- Les variables du programme

- Toute zone mémoire.

Commandes

Pas à pas approfondi :

(Menu "Mise au point"  Raccourci: F7 ou bouton de la barre d'outils)

pour exécuter l'instruction suivante.

Cette commande lance simultanément :

- L'instruction suivante dans le programme

- Le Timer TOC5 qui envoie une demande d'interruption XIRQ

  ( broche PA3 reliée à XIRQ ).

Le µC termine l'instruction en cours avant de servir l'interruption.

Cette technique présente deux avantages importants :

- Le code n'étant pas modifié, on peut, en assembleur,

  avancer pas à pas dans une zone ROM

- L'inter XIRQ étant prioritaire, on peut avancer pas à pas

  dans un sous-programme d'interruption.

Les références externes ( symboles précédés d'un "?" ) ne sont pas explorées pas à pas,

leur source n'étant pas forcément connue.

Pas à pas "rapide" :

(Menu "Mise au point"  Raccourci: F8 pour exécuter les instructions

suivantes sans s'arrêter dans les sous-programmes.

Cette commande est similaire à la précédente mais lorsqu'une instruction

d'appel de sous-programme est rencontrée (jsr, bsr),

le débogueur place un point d'arret logiciel ( SWI ) à l'adresse de retour.

On ne peut donc pas utiliser cette commande en ROM.

La commande "F8" est donc une "combinaison" des commandes

"F7" et "F4" avec une analyse fine du code.

Elle est donc plus lente que "F7".

Dans une zone sans appel de sous-programme,  "F7" est donc préférable à "F8".

Cela se ressent surtout en C et en Pascal car une ligne source représente

quelquefois quelques dizaines de lignes en assembleur.

Aller jusqu'au curseur :

(Menu "Mise au point"  Raccourci: F4 pour éxécuter les

instructions suivantes jusqu'à la ligne du curseur.

Le débugueur détermine l'adresse liée à la ligne courante (celle du curseur)

dans le texte source assembleur, C ou Pascal. Il place alors un point

d'arret logiciel ( SWI ) à cette adresse.

On ne peut donc pas utiliser cette commande en ROM.

Continuer librement :

(Menu contextuel du débogueur "Continuer librement"  Raccourci: F9 pour

poursuivre l'éxécution jusqu'à la fin du programme.

Il n'y a plus d'arrêt. L'éxécution est libre.

La session de mise au point est fermée.

Panneau des variables

Les variables globales déclarées dans le programme sont automatiquement insérées dans la fenêtre.

En C ou en Pascal, les variables locales visibles dans un sous-programme sont également montrées.

On peut ajouter des registres du microcontroleur et des "variables" supplémentaires.

Le panneau est redimensionnable en largeur :

faire glisser le bord en cliquant dessus et en maintenant le bouton gauche de la souris enfoncé.

Pour faire apparaitre un menu,  placer le curseur dans le texte source et cliquer avec le bouton droit.

Pour ajouter un registre, ouvrir la liste des registres (en bas et à droite) et cliquer sur le registre à ajouter..

Pour ajouter une variable,  cliquer sur son nom et entrer son nom,  son adresse et sa taille.

Cliquer sur le format d'affichage désiré.

Pour modifier son format d'affichage, cliquer sur le petit icône qui précède son nom :  Ascii  Binaire Hexadécimal Signé  Unsigned (non signé) et Réel (IEEE 32 bits) .

Pour enlever un objet de la liste, cliquer sur son nom et utiliser le bouton "Enlever".

Les registres du CPU

Sont affichés dans la barre d'état. Les bits du CCR qui sont à un apparaissent , les autres sont remplacés par des "-".

Conditions de fonctionnement

Le débogueur utilise l''interruption Xirq ( NMI ) demandée par le timer Toc5 sur la broche PA3.

La broche PA3 doit donc être reliée à la broche XIRQ.

Les variables de ce débogueur sont aux adresses $0000 et $0001. Le programme ne doit donc utiliser ni le timer Toc5, ni les broches PA3 et XIRQ, ni les deux octets $0000-$0001.

Un filtre permet d'utiliser le débogueur avec un programme pilotant la liaison série.

On peut donc ouvrir une fenêtre de communication série au cours de la mise au point.

On peut aussi ouvrir la fenêtre "mémoire" au cours de la mise au point.

En mode "Simulation", on peut modifier les registres CPU.

En mode Bootstrap, la pile ne doit pas écraser la zône des pseudo-vecteurs ($C4-$FF).

Les texte-sources doivent être disponibles sur le disque.

Enregistrement d'une session

Dans le menu contextuel (bouton droit), cliquer sur "Groupe d'instructions".

On peut alors éxécuter plusieurs instructions en créant un fichier-texte qui décrit l'évolution des registres et des variables.

On peut entrer le nombre d'instructions à éxécuter ou cliquer sur la dernière ligne à éxécuter.


Registres de l'unité centrale


Registres du microcontroleur

Les seuls registres reconnus sont :

PORTA	$1000	PIOC	$1002

PORTC	$1003	PORTB	$1004

PORTCTL	$1005

DDRC	$1007	PORTD	$1008

DDRD	$1009	PORTE	$100a

CFORC	$100b	OC1M	$100c

OC1D	$100d	TCNT	$100e

TIC1	$1010	TIC2	$1012

TIC3	$1014	TOC1	$1016

TOC2	$1018	TOC3	$101a

TOC4	$101c	TOC5	$101e

TCTL1	$1020	TCTL2	$1021

TMSK1	$1022	TFLG1	$1023

TMSK2	$1024	TFLG2	$1025

PACTL	$1026	PACNT	$1027

SPCR	$1028	SPSR	$1029

SPDR	$102a	BAUD	$102b

SCCR1	$102c	SCCR2	$102d

SCSR	$102e	SCDR	$102f

ADCTL	$1030	ADR1	$1031

ADR2	$1032	ADR3	$1033

ADR4	$1034

OPTION	$1039	COPRST	$103a

PPROG	$103b	HPRIO	$103c

INIT	$103d	TEST1	$103e

CONFIG	$103f

CSSTRH	$105C	CSCTL	$105D

CSGADR	$105E	CSGSIZ	$105F


Manipulation de la mémoire

 Pour accéder à la mémoire, cliquer sur le bouton correspondant de la barre d'outils ou dans le menu "mise au point". Pour écrire une nouvelle valeur en Hexadécimal, cliquer sur la case correspondante. Pour écrire une chaine de caractères, cliquer sur la zone ASCII. On peut lire et écrire des valeurs en mémoire durant une session de mise au point.

Pour changer l'adresse de base entrer sa valeur dans le champ "Adresse"

Pour modifier la donnée associée, entrer sa valeur en Hexadécimal, en décimal ou en binaire dans le champ correspondant .

Un timer permet de relire la mémoire périodiquement.

Les octets utilisés par la pile peuvent être surveillés pendant une session de mise au point.

Dans la zone programme, cliquer sur un octet montre la ligne correspondante dans le texte source.

En mode simulation, modifier une entrée provoque la mise à jour de la fenêtre mémoire.

Depuis le menu contextuel, on peut

• Sauvegarder la page dans un fichier

  Cette possibilité est utile pour faire des comparaisons.

• Remplir la page (256 octets) avec $00 ou $FF

  Attention de ne pas écraser registres ou vecteurs d'interruption.

  Cette fonction est inaccessible durant une session de mise au point ( debug ) .

Après une écriture, toute la zone montrée à l'écran est relue. Dans certains cas, un message d'erreur peut être renvoyé si la valeur lue est différente de la valeur écrite.

 Il faut cependant noter qu'une écriture sur un registre possèdant des bits non 'lisibles'  (exemple: le port A) n'est pas

une 'fausse manoeuvre'.


Références externes

Les références externes sont des symboles qui ne sont déclarés dans aucun des textes-source.

L'assembleur ne peut donc pas leur associer une valeur.

Il place donc ces symboles dans la trame S1S9 entre parenthèses.

C'est l'éditeur de liens qui leur affectera la valeur correspondante.

Voici quelques routines fournies en assembleur (pour les fonctions C, se reporter à l'aide du langage C):

TEMPO10	Temporisation 10 ms

TEMPO100	Temporisation 100 ms

TEMPO1K 	Temporisation 1 s

TEMPO10K	Temporisation 10 s

TEMPOX	Temporisation variable (durée dans X)

OUTSCI 	Sortie d'un caractère sur SCI

ALALIGNE	Envoi du caractère NL sur SCI

TABULE	Sortie d'un entier sur SCI. Sortie d'une tabulation

OUTSTR	Sortie d'une chaine de caractères sur SCI

OUTDEC	Sortie d'un entier sur SCI. Affichage en décimal

OUTBIN  	Sortie d'un entier sur SCI. Affichage en binaire

OUTHEX	Sortie d'un entier sur SCI. Affichage en Hexa

INSCI     	Entrée d'un caractère sur SCI

LEN        	Longueur d'une chaine

TERMINE	Terminaison standard d'un programme


Liaison sérielle avec la carte

Elle se fait au moyen d'un cordon non croisé équipé de 2 fiches DB9 (Màle et femelle).

Un cordon non croisé standard du commerce peut être utilisé

si les 2 connexions (1-6 et 4-8) sont réalisées sur la carte.


Dans le menu OUTILS...

se trouvent différentes ressources :

Assistant d'écriture

Il permet de retrouver rapidement des instructions ou des séquences correspondant à une action donnée, avec un mode d'adressage donné.

- Choisir l'action

- Choisir le mode d'adressage

- Cliquer sur un objet ( Registre, symbole...) : si l'action ne reqiert pas d'autre information, l'instruction produite apparait dans l'éditeur de texte. Dans le cas contraire,

- Cliquer sur un deuxème objet à "combiner" au premier. L'instruction est alors produite.

- La faire glisser dans le texte-source à l'endroit désiré.

Créer une table

 Cette fonction permet de générer un tableau de valeurs à partir d'une équation. Choisir le nombre N de points. Entrer la loi de variation de la variable x en fonction de l'index n. Entrer la fonction Y(x).

Evaluer une expression

 Aide pour la conversion numérique des nombres entiers et l'évaluation de la partie entière d'un expression.

Programmer l'Eprom ou l'EEprom

 Permet d'implanter en RAM, EEPROM ou EPROM un programme dont le code objet (.S19) est disponible sur le disque. La source n'est pas utilisée pour cette opération. On peut vérifier que toutes les adresses référencées dans la trame S1-S9 sont bien en Eprom ou en EEprom. La programmation de l'Eprom n'est possible que sur un 68HC711. On peut aussi examiner la mémoire et lancer le programme.

Désassembler un programme

 On peut retrouver la source d'un programme à partir de son code objet en mémoire dans le microcontrôleur ou sous forme d'une trame S1S9. Les étiquettes sont constituées du caractère "_" suivi de l'adresse associée exprimée en hexadécimal. Il faut les renommer en utilisant la fonction "Remplacer" du menu "Edition". Le contenu de la mémoire (code objet) est conservé en commentaire. La détection des zones occupées par des constantes n'est pas entièrement automatique. Il faut donc déclencher manuellement leur implantation.

Marche à suivre :

Lancer le désassembleur par le menu "Outils/désassembler"

Construire le texte source par le menu "Texte/construire"

Choisir entre "Mémoire µC" et "trame S1S9". Le texte est alors construit sans tenir compte des zones de constantes (nombres, texte).

Repérer les zones de constantes: Elles ne se terminent pas par RTS, BRA, JMP...

Quand une zone est repérée, cliquer sur son début (étiquette) . L'étiquette est recopiée dans le champ "Symbole". Choisir ensuite depuis le menu "texte" entre "constante" , s'il n'y a pas de caractères imprimables ou "Texte" dans le cas contraire. Le bloc est alors modifié jusqu'à l'étiquette suivante.

Sauver le travail accompli : Deux fichiers peuvent être créés (Menu "Fichier"):

- Le texte-source ASM

- Les données internes au désassembleur : DESASS.DAT

Si le travail n'est pas terminé, on pourra ainsi le reprendre plus tard.

Manipuler les symboles :

- Pour trouver la référence à une étiquette, cliquer sur cette étiquette puis dans le menu "symboles/Trouver".

- Pour renommer un symbole,

- Cliquer sur celui-ci dans le texte source : il apparait dans le champ "symboles"

- Entrer le nouveau nom  dans le champ "symboles"

- Cliquer dans le menu "Symboles/renommer" pour changer toutes les occurences du symbole.

- Enlever un symbole : Il arrive que le désassembleur génère des symboles parasites (1) (donc inutiles) . Pour ménager la lisibilité du texte, il vaut mieux les enlever.  Pour l'enlever, cliquer sur le symbole puis dans le menu "Symboles/Enlever". Protection : On ne peut enlever un symbole que s'il n'intervient qu'une seule fois dans le texte.

(1) Une étiquette parasite est générée quand, dans une zone de constantes, un groupe de constantes ressemble à une référence à une adresse du programme. ( Par défaut, le désassembleur voit l'ensemble comme du code éxécutable.)


Lieur

L'éditeur de liens est un maillon important de la chaine de développement.

Il scrute la trame S1S9 .

S'il trouve une référence externe (dont la valeur n'est pas encore connue), il cherche sa valeur dans une liste de symboles prédéfinis.

S'il la trouve, il remplace le symbole par sa valeur.

S'il ne la trouve pas,

- il recherche le code correspondant dans la bibliothèque (dossiers "librairie\assembleur" et "librairie\fonctions C").

- Il place ensuite la trame correspondante à la suite de celle issue du texte source.

- Il détermine son adresse et l'implante dans la trame du texte source.

Cette procédure est récursive : un sous-programme externe peut, lui aussi, contenir des références externes.

Une référence externe est toujours sur 16 bits car l'assembleur ne connaît pas la valeur associée.

Ecrire, par exemple :  " lda  <?_MonSymbole"  déclenche une erreur car, en adressage direct, l'opérande est sur 16 bits.

De même "LDD  #?_MonSymbole"  est supporté alors que "LDA  #?_MonSymbole" ne l'est pas.

Le lieur construit l'arbre de liaison (voir figure ci dessous).

La même référence peut apparaitre dans plusieurs branches.

Son adresse d'implantation est indiquée.

On peut cliquer sur une référence pour en voir la source (si elle est disponible).

Exemple de trame non liée:

La même trame est maintenant liée:

Exemple d'erreur souvent commise :

Le programme ci-dessous ne peut pas fonctionner car la variable "Car" est placée dans une zone ou sera implantée la routine "OutChr".

La deuxième ligne écrasera donc un octet de code de "OutChr".

Debut 	lda 	#'X'

sta	Car

jsr	?OutChr

bra	*

Car	rmb	1

Le programme doit être en ROM et les variables en RAM.

Pendant le développement, choisir des zones RAM bien distinctes.

RAM	equ	$0008

ROM	equ	$c000

org 	ROM

Debut 	lda 	#'X'

sta	Car

jsr	?OutChr

bra	*

org	RAM

Car	rmb	1


Images associées aux programmes

Une ou plusieurs image(s)  ( schéma(s) , organigramme(s) etc.. )  peuvent être associés à un programme.

Pour associer une image à un programme, celle ci doit

•   Etre au format .BMP ou .GIF

•  Se trouver dans le dossier  ..\Schémas

Pour être accessible depuis le menu "Voir / Schém associé" ,

l'image doit porter le même nom que le programme.

Pour apparaitre en cliquant dans le texte-source,

le nom de l'image doit figurer entre guillemets dans une zone de commentaires

Ex :

* Pour accéder au schéma, cliquer sur "MonSchema"


Bulles d'information

Dans certains textes, on peut cliquer sur un mot pour obtenir des informations.

Dans le texte source

• Cliquer sur un symbole pour obtenir la valeur numérique associée ( En général, son adresse ).

Ne pas confondre le nombre associé à un symbole ( Ex : adresse d'une variable ) avec le contenu d'une adresse ( Ex valeur d'une variable ).

Les valeurs des variables ne sont lisibles que

- durant les sessions de déboguage

- dans le panneau des variables.

• Cliquer sur un nombre pour le voir en 3 formats : Décimal, Hexadécimal et binaire.

• Cliquer sur le nom d'une image pour la faire apparaitre.

En Assembleur

• Cliquer sur une mnémonique pour voir la durée d'éxécution et le code associé en fonction du mode d'adressage utilisé.

• Cliquer sur une directive pour voir quelques mots d'explication.

En Langage C

• Cliquer sur le nom d'une  fonction.  pour voir son prototype.

Dans le listing

• Cliquer sur un champ pour voir sa fonction.

Dans la trame S1S9

• Cliquer sur un octet pour le voir son rôle dans la trame.


Modes d'adressage

1. Adressage immédiat

L'opérande est la donnée directement utilisée.

Le symbole " # " demande à l'assembleur d'utiliser l'adressage immédiat..

Ex.	lda	#10	;génère 2 octets

ldd	#10	;génère 3 octets

lds	#$ff	;place la pile à la fin de la RAM interne

2. Adressage étendu

L'opérande est l'adresse ( sur deux octets ) de la donnée.

Ex	lda	$0010	;charge le contenu de l'adresse $0010 dans A

ldx	0	;charge le contenu des adresses 0 et 1 dans X

3. Adressage direct

L'opérande est l'adresse ( sur un octet ) de la donnée.

Le signe " <  " force l'adressage direct.

Ex	lda	<$0010	;charge le contenu de l'adresse $0010 dans A

ldx	<0	;charge le contenu des adresses 0 et 1 dans X

4. Adressage implicite ou inhérent

Pas d'opérande.

Ex.	ABA,	NOP,	CLI  etc...

5. Adressage indexé

L'adresse effective est la somme algébrique du contenu d'un registre d'index et d'un octet signé de décalage.

Ex	lda 	0,x	;charger dans A le contenu de l'adresse se trouvant dans X

lda	-3,y	;charger dans A le contenu de l'adresse ( [Y] - 3  )

6. Adressage relatif

L'opérande est un octet signé de décalage par rapport à l'adresse courante.

Ex	Ad1	bra	Ad2	   ; La différence Ad2-Ad1 est calculée par l'assembleur.

Brclr	Porta,x Ad3 1  ;Ad3 est un octet de décalage.


Conseils d'optimisation

Si le programme ne comporte pas d'erreur, l'assembleur peut produire une liste de conseils pour optimiser le programme, càd :

- Réduire la taille du code objet.

- Rendre l'éxécution plus rapide.

Le panneau de conseils se trouve dans la partie basse de la fenêtre d'édition. Il est redimensionnable en cliquant sur son bord supérieur et en faisant glisser le curseur de la souris. En cliquant sur un conseil, on surligne la ligne du texte source à modifier.

Ce processus peut être inhibé depuis le menu Options / Programme, rubrique Optimisation.


Référence externes prédéfinies

 Cette liste vous permet d'adapter les programmes qui utilisent ces références à un autre matériel. Elle est modifiable depuis le menu "Options / Programmes ". Elle conditionne le comportement du lieur. Une bonne habitude consiste à adopter, comme premier caractère du symbole, le souligné " _ ". Ceci évite d'utiliser le même symbole en interne.


Matériel utilisable

En Assembleur (DevMic11as) :

- Cartes minimales HC11[F]min de l'association SoFt

- Système Micro11 de l'association SoFt

- Toute carte fonctionnant en mode bootstrap ou en mode étendu et équipée d'une interface série ( sur SCI ).

En Assembleur, C et Pascal  (Devmic11acps ) :

- Cartes HC1124 , HC1124p et HC11F32 de l'association SoFt

- Emulateur décrit dans la revue "Elektor" de février 1997


Association SoFt

Quartier Bancel

26400 Allex

http://members.aol.com/assoft/home.htm


Revue ELEKTOR

21/23 rue des ARDENNES

BP 11568

75920 PARIS cedex 19

Matériel disponible chez

PUBLITRONIC

BP 11564

75920 PARIS cedex 19


deroulem
Déroulement simplifié d'une session de travail


Criteres matériels
Critères matériels

Pour être utilisable avec DevMic, une carte doit avoir les caractéristiques suivantes :

1. Fonctionnement en mode Bootstrap

Le microcontrôleur utilisé doit  être :  MC68HC11A1 ou E1 ou E9 ou F1 ou 711E9 ou 811E2

L'EEProm doit être disponible à $B600  (A1, E1, E9, 711E9 ) ou à  $FE00 ( F1 )  ou à $F800 ( 811E2 )

La liaison série utilise les broches RXD et TXD

Les broches PA3 et XIRQ sont reliées

2. Fonctionnement en mode Monochip

Le microcontrôleur utilisé doit  être :  MC68HC11F1 ou ou HC811E2

L'EEProm doit être disponible à  $FE00 ( F1 ) ou à $F800 ( 811E2 )

La liaison série utilise les broches RXD et TXD

Les broches PA3 et XIRQ sont reliées

La carte peut démarrer en mode bootstrap  ( passage en mode monochip par logiciel ).

3. Fonctionnement en mode étendu

Le microcontrôleur utilisé doit  être :  MC68HC11A1 ou E1 ou E9 ou F1 ou 711E9 ou 811E2

L'EEProm doit être disponible.

La RAM  ( au moins 8 ko ) ou l'EEProm externe doit pouvoir accueillir les vecteurs d'interruption (ou une table de redirection)

et éventuellement le moniteur.

La liaison série utilise les broches RXD et TXD

Les broches PA3 et XIRQ sont reliées

La carte peut démarrer en mode bootstrap  ( passage en mode étendu par logiciel ).

Consulter les schémas fournis dans la documentation. Le cordon de liaison série doit être câblé comme suit


Moniteur
Moniteur de DevMic11

C'est un petit programme résidant en EEProm ou téléchargé en RAM qui assure les fonctions suivantes :

- Téléchargement des programmes

- Lancement des programmes

- Visualisation et modification de la mémoire

- Programmation de l'EEProm externe ( HC11F1 )

- Avance pas à pas avec lecture des registres et des variables, placement de points d'arret etc...

Selon les fonctions, il peut consommer jusqu'à 40 octets de pile.

Sa taille varie selon le type et le mode de fonctionnement du microcontroleur utilisé :

Moniteur en EEprom

Il est implanté à B600  (A1,E1,E9,711E9) , F800 (F1) ou FE00 (811E2) . Lors du RESET, l'ordinateur envoie un BREAK pour forcer le démarrage au début de l'EEProm : le moniteur prend le fonctionnement en charge.

En mode Etendu

Microcontroleur	A1	E1,E9	811E2	F1	711E9

Adresse début	b600	b600	f800	fe00	b600

Taille	380 	380 	378 	512 	380

En Mode Bootstrap

Microcontroleur	A1	E1,E9	811E2	F1	711E9

Adresse début	b600	b600	f800	fe00	b600

Taille	355	355 	444 	355 	355

En mode Mono Chip

Microcontroleur	811E2	F1

Adresse début	f800	0100

Taille	418 	388

Placer un programme en EEprom

La présence de L'EEprom en fin d'espace adressable sur HC811E2 et HC11F1 permet de rendre les vecteurs d'interruption non volatiles. Ceci permet de rendre la carte autonome.

Il y a cependant une difficulté :

Lorsque l'EEprom est en cours de programmation, la lecture n'est pas possible : on ne peut donc pas écrire en EEprom depuis le moniteur résidant lui-même en EEProm.

Si l'on tente de placer un programme en EEprom ( à coté du moniteur ) :

- En mode Bootstrap,

-  Avec HC811E2, DevMic11 crée une structure de programmation dans la pile ( 20 octets ) . Cette structure est ensuite éxécutée ( en RAM ) pour pouvoir programmer l'EEProm. Le moniteur est également capable de démarrer la carte en autonome . ( 6 )

- Avec HC11A1, E1, E9, le moniteur occupe presque toute l'EEProm; DevMic11as lance un message d'erreur si l'on tente d'écrire en EEProm depuis le moniteur.

- En mode Etendu,

Si la carte peut le supporter, ( cartes HC1124M et HC11F32 ) il est possible de remplacer la RAM par une EEPROM de 32 ko ( 28256 ). Le moniteur gère automatiquement l'écriture en EEProm.

- En mode Monochip,

-  Avec HC811E2, DevMic11, comme en mode Bootstrap, utilise la pile pour programmer l'EEprom. Il peut démarrer la carte en autonome (Single Ship). Les vecteurs d'interruption sont donc les mêmes qu'en mode étendu. ( 6 )

- Avec HC11F1, le moniteur est déporté en RAM pour libérer les 512 octets de l'EEProm interne. Pour pouvoir démarrer en autonome, le vecteur du RESET doit contenir l'adresse de début du programme et la broche MODB doit être à 1.

Moniteur déporté en RAM

Placer le moniteur en RAM comporte deux avantages :

- Le moniteur peut écrire directement dans l'EEProm interne.

- L'EEProm interne est entièrement disponible pour le programme.

Placer le moniteur en RAM est possible :

- En mode Bootstrap avec un HC11F1 ( 1 ). Le moniteur occupe l'espace $100-$278 en RAM interne.

  ses pseudo-vecteurs d'inter ( SCI, XIRQ, SWI ) sont également en RAM interne.

- En mode Monochip avec un HC11F1 ( 1 ). Le moniteur occupe l'espace $100-$282 en RAM interne.

  ses vecteurs d'interruption sont en EEProm interne.

- En mode étendu

- avec un HC811E2 ( 2 ) : moniteur en RAM externe à $F600-$F77F

- avec un HC11F1   ( 3 ) : moniteur en RAM interne  à $0100-$02A7

  Les vecteurs d'inter sont en EEProm. ( 4 )( 5 )

Le moniteur est téléchargé lors de chaque RESET de la carte.

Ses variables ne sont plus en début de RAM interne, ce qui libère les adresses $0000 et $0001.

Un programme peut occuper à la fois l'EEProm et une partie de la RAM.( 5 )

Pour placer le moniteur en RAM, cocher la case correspondante du menu "Options / Matériel ".

(1) Les autres types de 68HC11 n'ont pas assez de RAM interne pour acceuillir le moniteur.

(2) 2 ko en EEprom pour le programme, les constantes et les vecteurs d'inter.

(3) 0.5 ko en EEprom pour le programme, les constantes et les vecteurs d'inter.

(4) La carte devient autonome et doit pouvoir démarrer en mode single-chip.

(5) Avec la carte 11F32, il est possible de remplacer la RAM externe (62256) par une EEProm de 32 ko (28256). Le moniteur gère automatiquement l'écriture en EEProm. L'utilisateur voit une EEProm de 32,5 ko.

(6) Si l'ordinateur n'est pas détecté, le moniteur fait éventuellement passer le µC en mode "Single Chip" et lance le programme à l'adresse contenue dans le vecteur "Reset" (FFFE, FFFF) . Consulter les exemples ..\Mode monochip\"ClignotB8..."  et "ClignotAF..."