DOSSIER TECHNIQUE
000 Start 001 Stop1 2 3 6 1 2/5 3B
1° ANNEE CAPET ET PLP2 ELECTRONIQUE
4° trimestre 1997
Jean GONZALEZ Christian VALADE
IUFM de Toulouse Unité de Formation Technologies IndustriellesDépartement Electronique 118, route de Narbonne
31078 TOULOUSE CEDEX 4Tél : 05 62 25 21 45 Télécopie : 05 62 25 21 58 E-mail : [email protected]
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 2
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 3
Sommaire
1. MISE EN SITUATION............................................................................................91.1. ALGORITHME D'UTILISATION "EMPRUNT D'UN OUVRAGE"..................................91.2. ALGORITHME D'UTILISATION "RESTITUTION D'UN OUVRAGE".......................... 101.3. FONCTION D'USAGE DU DECODEUR..................................................................... 10
2. LES CODES 2 PARMI 5 .....................................................................................102.1. SPECIFICATION DU CODE 2 PARMI 5 - 5 BARRES................................................ 112.2. SPECIFICATION DU CODE 2 PARMI 5 3 BARRES................................................ 122.3. SPECIFICATION DU CODE 2 PARMI 5 - ENTRELACE............................................ 13
3. SCHEMA FONCTIONNEL ASSOCIE A LA FONCTION D'USAGE DUDECODEUR DE CODES A BARRES ....................................................................14
3.1. FONCTION "ACQUISITION DU CODE DE L'ETIQUETTE"....................................... 143.2. FONCTION "DETERMINATION DU CONTENU DE L'ETIQUETTE"......................... 153.3. FONCTION "TRANSFERT DU CONTENU DE L'ETIQUETTE VERS LESPERIPHERIQUES"............................................................................................................ 153.4. FONCTION "AFFICHAGE DES MESSAGES"............................................................ 163.5. FONCTION "DETECTION DE LA PRESENCE D'UNE ETIQUETTE"........................ 163.6. FONCTION "CONTROLE DU PROCESSUS DE LECTURE"....................................16
4. SCHEMA FONCTIONNEL DE LA FONCTION "DETERMINATION DUCONTENU DE L'ETIQUETTE" ...............................................................................17
4.1. FONCTION "CREATION DE LA TABLE DES ZEROS".............................................. 174.2. FONCTION "RECHERCHE DU TYPE DE TABLE".................................................... 174.3. FONCTION "RETOURNAGE EVENTUEL DE LA TABLE"......................................... 184.4. FONCTION "CONSTRUCTION DES CARACTERES"............................................... 184.5. FONCTION "RECONNAISSANCE DES CARACTERES".......................................... 194.6. FONCTION "CODAGE ASCII DES CARACTERES".................................................. 194.7. FONCTION "CONTROLE DU PROCESSUS DE DETERMINATION DU CONTENUDE L'ETIQUETTE"............................................................................................................. 20
5. ANALYSE DE L'ALGORIGRAMME APPELE LORS DE LA RENCONTRED'UNE BARRE. .......................................................................................................20
5.1. ROLE DE LA ROUTINE "CREATION DE LA TABLE DES ZERO"............................. 205.2. ROLE DE LA ROUTINE "RECHERCHE DU TYPE DE TABLE".................................205.3. ROLE DE LA ROUTINE "RETOURNE"...................................................................... 205.4. ROLE DE LA ROUTINE "CREATION DE LA TABLE HEXA"..................................... 21
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 4
5.5. ROLE DE LA ROUTINE "RECONNAISSANCE DES CARACTERES".......................215.6. ROLE DE LA ROUTINE "CONVERSION HEXA ASCII".............................................215.7. ROLE DE LA ROUTINE "TRANSFERT DANS DU CONTENU DE L'ETIQUETTEVERS LES PERIPHERIQUES"..........................................................................................215.8. ROLE DE LA ROUTINE "AFFICHAGE DU MESSAGE OK".......................................215.9. ROLE DE LA ROUTINE "AFFICHAGE DU MESSAGE D'ERREUR"..........................21
6. ARCHITECTURE DE LA STRUCTURE DU DECODEUR ................................ 236.1. STRUCTURE S 1.1 "PILOTAGE"...............................................................................236.2. LA STRUCTURE "MEMORISATION PASSIVE" S. 1.3...............................................246.3. LA STRUCTURE "MEMORISATION ACTIVE" S. 1.4................................................246.4. LA STRUCTURE "COMMUNICATION AVEC LE LECTEUR ET LE BUZZER" S. 1.7246.5. LA STRUCTURE "COMMUNICATION PARALLELE" S. 1.6......................................256.6. LA STRUCTURE "COMMUNICATION SERIE" S. 1.5...............................................256.7. LA STRUCTURE "DECODAGE D'ADRESSES..........................................................266.8. STRUCTURE "ALIMENTATION" S.A. 1.....................................................................26
7. SCHEMA STRUCTUREL DU DECODEUR ....................................................... 288. SCHEMA DE CONCEPTION DU DECODEUR ................................................. 29
8.1. NOMENCLATURE DES COMPOSANTS....................................................................298.2. DESSIN D'IMPLANTATION DES COMPOSANTS......................................................308.3. DESSIN D'ENSEMBLE...............................................................................................31
9. STRUTURE LOGICIELLE DU DECODEUR ...................................................... 329.1. TABLES DES SYMBOLES..........................................................................................329.2. PROGRAMME ECRIT EN LANGAGE C.....................................................................349.3. UTILISATION DE L'ASSEMBLEUR AVOCET............................................................43
10. TRAVAUX DIRIGES ......................................................................................... 4611. TRAVAUX PRATIQUES.................................................................................... 58
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 5
Programme de formation
Cours
Jeudi 20 novembre 1997de 9 h à 12 hCours 1
Les structures logicielles fondamentalesDéfinition des termes et expressions utilisés lors de l'étude de constatation des
structures logiciellesLes techniques de programmation structurée
Présentation d'une méthode d'analyse des logiciels indépendante du langage utilisé.Les outils et les techniques d'élaboration d'un logiciel
* sur le codage C* sur les directives d'assemblage* sur les opérations de "linkage"
Architecture du micro-contrôleur 68HC11Architecture interne et mode d'adressages
Lundi 24 novembre 1997de 9 h à 12 hCours 2
La programmation structurée en langage C
Jeudi 27 novembre 1997de 9 h à 12 hCours 3
Présentation du décodeur de codes à barresAnalyse fonctionnelle de constatation du décodeurLes périphériques du 68HC11
* ports parallèles* port série* timer
Les liaisons parallèles entre un ordinateur et un périphérique:Exemple: la connexion de type Centronix Ordinateur-Imprimante.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 6
Lundi 1 décembre 1997de 9 h à 12 hCours 4
La programmation structurée en langage C (suite)Les différentes opérations d'élaboration d'un logiciel
* sur le codage C* sur les directives d'assemblage* sur les opérations de "linkage"
Jeudi 8 janvier 1998de 9 h à 12 hCours 5
Les Liaisons séries asynchrones entre ordinateurs et périphériquesMode de programmationLes liaisons séries asynchrones entre ordinateurs et périphériques et analyse d'un
protocole de dialogue de type XON/XOFF.
Jeudi 15 janvier 1998de 9 h à 12 hCours 6
Le fonctionnement en interruption du micro-contrôleur 68HC11 en monochipL'évolution technologique des micro contrôleurs à court terme et les applications
actuelle et dans un avenir proche.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 7
Travaux dirigés
Mercredi 3 décembre 1997 (GB) et (GA)Travaux dirigés 1
Analyse fonctionnelle de constatation du décodeurAnalyse des algorithmes et algorigrammes.
Mercredi 3 décembre 19997 (GB) et (GA)Travaux dirigés 2
Validation de la structure logicielle remplissant la fonction "Transcodage descaractères numériques d'une table codés en décimal en caractères codés enA.S.C.I.I." et « retourne table »
Lundi 8 décembre 1997 (GA et GB)Travaux dirigés 3
Conception de la structure matérielle de la perche.
Jeudi 11 décembre 1997 (GA et GB)Travaux dirigés 4
Etude d'une structure logicielle remplissant la fonction "Retourne la table zéro etcompacte".
En automomieTravaux dirigés 4 bis
Analyse de la documentation du micro contrôleur 68 HC 11Conception de la structure matérielle du décodeur de codes à barres.
Jeudi 8 janvier 1998 (GA et GB)Travaux dirigés 5
Utilisation des fonctions chronométrage du 68HC11Conception d'une structure logicielle simple.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 8
Travaux pratiques
Semaine du 1 décembre au 5 décembre 1997Travaux pratiques 1
Prise en main de l’outil de développement M11Etude d'une structure logicielle remplissant la fonction "Transcodage des caractères
numériques d'une table codés en décimal en caractères codés en A.S.C.I.I.".Validation expérimentale à l'aide des outils de développement.
Semaines du 8 au 12 décembre 1997Travaux pratiques 2
Etude d'une structure logicielle remplissant la fonction "Retourne la table zéro".Validation expérimentale à l'aide des outils de développement.
Semaines du 15 au 19 décembre 1997Travaux pratiques 3
Conception d'une structure logicielle remplissant la fonction "format"Mise en état de fonctionnement à l'aide de l'outil de développement
Semaine du 12 au 16 janvier 1998Travaux pratiques 4
Conception d'une structure logicielle remplissant les fonctions associées auchronométrage développées dans les travaux dirigés 5
Mise en état de fonctionnement à l'aide de l'outil de développement
Semaines du 19 au 23 janvier 1998Travaux pratiques 5
Liaison sérieMise en état de bon fonctionnement d’une liaison série.Détermination expérimentale des limites d'utilisation de la liaison.Synthèse
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 9
1. MISE EN SITUATION
Le lecteur et le décodeur de code à barres sont des composants d'un système degestion informatisé des prêts d'une bibliothèque.
Les utilisateurs de la bibliothèque possèdent une carte de lecteur. Un numéro à 6chiffres a été attribué à chaque lecteur. Ce numéro est transcrit en code à barres sur uneétiquette collée sur la carte de lecteur.
De la même façon, sur chaque document pouvant être emprunté se trouve un code àbarres, permettant de repérer l'ouvrage en question.
Le lecteur optique, qui est ici un crayon optique comporte une "diode émettriced'infrarouge et une diode réceptrice". Ces deux composants électroniques sont noyés dansla même tête de lecture. Le lecteur optique est relié électriquement au décodeur, quicomporte une structure matérielle à laquelle lui a été associée une structure logicielle.
Le décodeur est relié par une liaison parallèle ou série à un micro-ordinateur (ou unautre périphérique) qui assure la gestion des prêts d'ouvrage.
1.1. ALGORITHME D'UTILISATION "EMPRUNT D'UN OUVRAGE"
+ 5 v 0 v
Alimentation
Ver
s le
cteu
r opti
qu
e
(cra
yon
P
10 D
ata
logic
)
Ver
s Im
pri
man
te o
u C
om
pati
ble
PC
Lia
ison
para
llèl
eL
iais
on
sér
ie
DECODEUR
DE
A
BARRES
CODE
Aff
ich
age
du
mes
sage
d'e
rreu
r
- Le futur emprunteur balaye le code de sa carte par le crayon optique,
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 10
- puis balaye le code de l'ouvrage devant être emprunté à l'aide du crayonoptique.
- balaye avec le crayon l'étiquette "Emprunt" collée sur le poste de travail.- après des vérifications nombreuses, (nombre de livres empruntés, lecteur
interdit de prêt ...) l'ordinateur autorise la démagnétisation de la bandeinvisible solidaire de l'ouvrage. L'emprunteur pourra ainsi quitter labibliothèque sans être intrigué par le système de protection contre le vol.
1.2. ALGORITHME D'UTILISATION "RESTITUTION D'UN OUVRAGE"
- L'emprunteur balaye le code de sa carte par le crayon optique,- puis balaye le code de l'ouvrage devant être restitué à l'aide du crayon
optique.- balaye avec le crayon optique l'étiquette "Restitution" collée sur le poste de
travail.- l'ordinateur autorise la démagnétisation de la bande invisible solidaire de
l'ouvrage afin de le protéger contre le vol.
On isole la Fonction Principale 1
"DECODAGE".
1.3. FONCTION D'USAGE DU DECODEUR
A partir des informations provenant du crayon optique, mettre sur le bus de liaisondes interfaces, à la disposition des périphériques, les codes ASCII des caractèressignificatifs contenus dans le mot lu, de fournir un message visuel sur le type d'erreur delecture éventuelle ou un bip sonore si la lecture est correcte.
On se propose d'analyser la structure matérielle et logicielle du décodeur et demontrer comment l'organisation fonctionnelle et structurelle proposée participe à la
réalisation de cette fonction d'usage.
2. LES CODES 2 PARMI 5
Un mot est composé de caractères numériques et de deux caractères précisant ledébut (caractère START) et la fin du mot (caractère STOP).
Chaque caractère est formé par des éléments qui peuvent être des barres ou desespaces. Un espace ou une barre large correspond a la valeur binaire "1", tandis que unespace ou une barre mince correspond à la valeur binaire "0".
Les codes 2 parmi 5 ont la particularité d'avoir 5 éléments significatifs. Le premierélément du mot est toujours une barre. Ce premier élément peut prendre la valeur "0" ou
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 11
"1" suivant l'épaisseur de la barre. Le dernier élément du mot de n caractères est toujoursune barre qui peut être large ou mince.
La largeur d'un élément large est trois fois plus grande que celle d'un élément mince.
La longueur occupée par un caractère est toujours la même quelque soit le caractèreimprimable.
2.1. SPECIFICATION DU CODE 2 PARMI 5 - 5 BARRES
Ce code est constitué uniquement par des barres.
Les espaces ne sont pas significatifs et ne contiennent pas d'information.
Chaque caractère imprimable est constitué par deux barres larges et trois barresminces.
De ce fait, ce code présente une grande tolérance d'impression (+/- 25 %) et permetune réalisation avec les moyens d'impression les plus simples, notamment à l'aided'imprimantes à aiguilles. Cependant un encombrement important dû à la faible densité pardigits limite ses applications aux mots composés de 4 ou 5 caractères maximum.
110 Start 101 Stop2/5 5B1 2 3 4
Figure 1 : Etiquette utilisant un code 2 parmi 5 5 barres
Caractère EL1 EL2 EL3 EL4 EL5
0 0 0 1 1 0 $0C
1 1 0 0 0 1 $11
2 0 1 0 0 1 $12
3 1 1 0 0 0 $03
4 0 0 1 0 1 $14
5 1 0 1 0 0 $05
6 0 1 1 0 0 $06
7 0 0 0 1 1 $18
8 1 0 0 1 0 $09
9 0 1 0 1 0 $0A
Start 1 1 0
Stop 1 0 1
Figure 2 : Table de vérité du code 2 parmi 5 5 barres
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 12
2.2. SPECIFICATION DU CODE 2 PARMI 5 3 BARRES
Ce code est constitué par des barres et des espaces.
Un caractère commence et se termine toujours par une barre.
Les espaces appartenant aux caractères sont significatifs et contiennent desinformations. Les espaces appartenant aux caractères peuvent être larges ou minces. Ilspeuvent, en conséquence, prendre la valeur "0" ou "1" suivant leur largeur.
Chaque caractère est séparé par un espace généralement mince. Les espaces entrecaractères ne sont pas significatifs et ne contiennent pas d'information.
000 Start 001 Stop1 2 3 6 1 2/5 3B
Figure 3 : Etiquette utilisant un code 2 parmi 5 3 barres
Caractère EL1 EL2 EL3 EL4 EL5
0 0 0 1 1 0 $0C
1 1 0 0 0 1 $11
2 0 1 0 0 1 $12
3 1 1 0 0 0 $03
4 0 0 1 0 1 $14
5 1 0 1 0 0 $05
6 0 1 1 0 0 $06
7 0 0 0 1 1 $18
8 1 0 0 1 0 $09
9 0 1 0 1 0 $0A
Start 0 0 0
Stop 0 0 1
Figure 4 : Table de vérité du code 2 parmi 5 3 barres
Chaque caractère imprimable est constitué par trois barres et deux espaces.
De ce fait, ce code présente une tolérance d'impression de l'ordre de +/- 10 % etpermet une réalisation avec les moyens d'impression simples, par exemple à l'aided'imprimantes à aiguilles de bonne qualité.
Un encombrement plus faible par rapport à la longueur du mot fait que ce code estutilisé par les organismes devant imprimer les étiquettes en fonction du produit traité. C'estnotamment le cas des bibliothèques et librairies.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 13
2.3. SPECIFICATION DU CODE 2 PARMI 5 - ENTRELACE
Ce code est constitué par des barres et des espaces.
Le premier caractère imprimable commence et se termine par une barre et estcomposé de deux barres larges et de trois barres minces.
Le deuxième caractère imprimable commence et se termine par un espace et estcomposé de deux espaces larges et de trois espaces minces.
Les espaces non significatifs du premier caractère deviennent les espacessignificatifs, support de l'information, pour le deuxième caractère qui se trouve alorsenchevêtré dans les éléments du premier caractère.
Les caractères suivants sont composés de la même façon. Tous les espaces du motsont significatifs et contiennent des informations. Il n'y a pas d'espace séparateur decaractère.
De ce fait, ce code présente une tolérance d'impression faible de l'ordre de +/- 10 %et permet une réalisation avec les moyens d'impression simples, par exemple à l'aided'imprimantes à aiguilles de bonne qualité. Malgré un encombrement réduit, ce code n'estutilisable que pour des mots composé d'un nombre pair de caractères.
100stop
0000start 98765432
Figure 5 : Etiquette utilisant un code 2 parmi 5 entrelacé
Caractère EL1 EL2 EL3 EL4 EL5
0 0 0 1 1 0
1 1 0 0 0 1
2 0 1 0 0 1
3 1 1 0 0 0
4 0 0 1 0 1
5 1 0 1 0 0
6 0 1 1 0 0
7 0 0 0 1 1
8 1 0 0 1 0
9 0 1 0 1 0
Start 0 0 0 0
Stop 1 0 0
Figure 6 : Table de vérité du code 2 parmi 5 entrelacé
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 14
3. SCHEMA FONCTIONNEL ASSOCIE A LA FONCTION D'USAGE DU DECODEUR DE CODES A
BARRES
3.1. FONCTION "ACQUISITION DU CODE DE L'ETIQUETTE"
Rôle:
La fonction "Acquisition de l'image de l'étiquette" donne l'image numérique del'étiquette. Chaque élément de l'étiquette est représenté par un octet. Le contenu de l'octetest fonction de la dimension de l'élément.
- Elle remplit une table appelée TABLE DES DUREES. Le contenu d'un mot dela table est proportionnel à la durée d'un élément. La table contient autant demots qu'il y a d'éléments sur l'étiquette. Il n'y a pas de prise en compte de lacouleur de l'élément, car le début et la fin d'un mot est toujours une barre(noire), et il y a succession d'espaces blancs et de barres noires.
- Cette routine détermine également la fin de table.
Entrée : (A)- Image temporelle de l'étiquette.
Sortie :(B)- Série de mots de huit bits. Chaque mot représente la "durée" des éléments
(barres ou espaces) de l'étiquette. La vitesse de défilement étant uniforme, onaura une image numérique de la lecture de l'étiquette physique.
Entrée de commande : (3)- L'ordre d'acquisition est donné par le contrôle du processus de lecture lorsque
la première barre d'une étiquette a été détectée et si il la fonction "Contrôle deprocessus" a terminé la lecture et le traitement de l'étiquette précédente.
3.2. FONCTION "DETERMINATION DU CONTENU DE L'ETIQUETTE"
Rôle :
Donner de code ASCII des caractères de l'étiquette
Entrée : (B)- Image numérique de l'étiquette physique (table des durées)
Sortie : (C)- Caractères de l'étiquette codés en ASCII (table ASCII)
Entrée de commande : (5)- Ordre de mise en service de la fonction
Sortie de commande : (4)- Etat du traitement de l'étiquette
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 15
Détection de la présence
d'une étiquette
Acquisition del'image del'étiquette
Détermination du contenu del'étiquette
Transfert ducontenu de
l'étiquette vers les périphériques
Contrôle du processus de lecture
Affichage desmessages
Matière d'oeuvre informationnelle traitée par l'objet technique
Matière d'oeuvre informationnelle de commande
A
B C E
1 2
3
4 5 8 9
10
11
Imagetemporelle
del'étiquette
Contenu de
l'étiquettecodé
en ASCII
Confirmation de
lecturecorrecte
Etatdu
périphérique
12
.
Figure 7 : Schéma fonctionnel du décodeur
3.3. FONCTION "TRANSFERT DU CONTENU DE L'ETIQUETTE VERS LESPERIPHERIQUES"
Rôle :
Transférer le contenu de la mémoire vers le périphérique lorsque celui-ci estdemandeur. L'ordre de transfert est donné par le contrôle du processus de lecture si lafonction "Transfert du contenu de l'étiquette" a détecté le périphérique demandeur.
Entrée : (C)- Caractères de l'étiquette codés en ASCII
Sortie :( E)- Les caractères codés en ASCII représentatifs du mot composé sur l'étiquette
sont envoyés au terminal (ordinateur de saisie, imprimante, ...) Le mode detransmission peut être série ou parallèle. Ces caractères seront envoyés si leterminal est demandeur.
Entrées de commande :- (12) Détection de l'état du périphérique (demandeur ou non)- (8) Autorisation du transfert de 1 mot de huit bits
Sortie de commande :- (9) Etat du périphérique (demandeur ou non)
3.4. FONCTION "AFFICHAGE DES MESSAGES"
Rôle :
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 16
Renseigner l'utilisateur si la lecture est correcte et donner au technicien demaintenance le type d'erreur rencontré lors de la lecture
Entrée de commande : (10)- Mot de huit bits caractéristique de la lecture
Sortie de commande : (11)- Impulsion sonore et lumineuse si la lecture est correcte- Affichage de message d'erreur si la lecture est incorrecte
3.5. FONCTION "DETECTION DE LA PRESENCE D'UNE ETIQUETTE"
Rôle :
Informer la fonction "contrôle du processus de lecture" qu'une barre a été détectée
Entrée de commande: (1)- Rencontre de la première barre de l'étiquette.
Sortie de commande : (2)- Sortie active dès la rencontre de la première barre.
3.6. FONCTION "CONTROLE DU PROCESSUS DE LECTURE"
Rôle :
Gérer séquentiellement la mise en service de chaque fonction. Les enchaînementsentre les différentes séquences sont explicités par les algorigrammes ci-après.
4. SCHEMA FONCTIONNEL DE LA FONCTION "DETERMINATION DU CONTENU DE
L'ETIQUETTE"
4.1. FONCTION "CREATION DE LA TABLE DES ZEROS"
Rôle :
A partir de la table contenant l'image temporelle de l'étiquette, la fonction "création dela table des zéros" donne l'image physique de l'étiquette.
Entrées (Ba) :- Série de mots de huit bits. Chaque mot représente la "durée" des éléments
(barres ou espaces) de l'étiquette. La vitesse de défilement étant uniforme, onaura une image numérique de la lecture de l'étiquette physique.
Sorties (Bz) :- Série de mots de huit bits ($00 ou $01) donnant l'image physique de
l'étiquette. $00 pour un élément mince, $01 pour un élément large.
Entrée de commande : (4.10)
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 17
- Ordre mise en service de la fonction
Sortie de commande : (4.11)- Renseigne la fonction "Contrôle de processus de détermination du contenu de
l'étiquette" sur la bonne exécution de la création de la table des zéros.
4.2. FONCTION "RECHERCHE DU TYPE DE TABLE"
Rôle :- Rechercher les éléments composant les caractères "Start" et "Stop".- Comparer les caractères "Start" et "Stop" à ceux caractérisant le type de table- Identifier le type de table parmi les trois possibles.
Entrées (Bz) :- Série de mots de deux mots huit bits ($00 ou $01) donnant l'image physique
de l'étiquette. $00 pour un élément mince, $01 pour un élément large.
Entrée de commande : (4.1)- Ordre mise en service de la fonction
Sortie de commande : (4.2)- Renseigne la fonction "Contrôle de processus de détermination du contenu de
l'étiquette" sur le type de table reconnue.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 18
4.3. FONCTION "RETOURNAGE EVENTUEL DE LA TABLE"
Rôle :
Cette fonction est mise en service lorsque le caractère Start n'a pas été trouvé endébut d'étiquette. Il s'agit d'une lecture dans le sens droite gauche. Dans ce cas, le contrôledu processus de détermination du contenu de l'étiquette commandera le retournage del'image de l'étiquette.
Entrée : (Bb)- Image numérique de la lecture de l'étiquette.
Sortie :(Bd)- Image numérique de la lecture retournée de l'étiquette.
Entrée de commande : (4.3)- Mise en service de la fonction "Inversion"
Sortie de commande : (4.4)- Renseigne la fonction "Contrôle de processus de détermination du contenu de
l'étiquette" sur la bonne exécution de la fonction.
4.4. FONCTION "CONSTRUCTION DES CARACTERES"
Rôle :
La reconnaissance du Start et du Stop donne le type de codage de l'étiquette(2 parmi 5 3 barres, 2 parmi 5 5 barres , 2 parmi 5 entrelacé). A partir du type de code et dela position des éléments significatifs, la fonction construit un mot de huit bits significatifs ducaractère présent sur l'étiquette.
Entrée : (Bd)
Sortie : (Be)- Table contenant les caractères codés en 2 parmi 5 de l'étiquette
Entrée de commande : (4.5)- Ordre mise en service de la fonction
Sortie de commande : (4.6)- Renseigne la fonction "Contrôle de processus de détermination du contenu de
l'étiquette" sur l'incompatibilité élément caractère.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 19
Recherche du type de
table
Retournageéventuel
de la table
Construction descaractères
Reconnaissancedes caractères
Codage ASCII descaractères
Contrôle du processusde détermination du
contenu de l'étiquette
Bd Be Bf Bg C
4.11 4.3 4.4 4.5 4.6 4.7 4.8 4.9
Ba BbB
4 5Matière d'oeuvre informationnelle traitée par l'objet technique
Matière d'oeuvre informationnelle de commande
4.10
Création de latable des zéros
4.1 4.2
Bz
Figure 8 : Schéma fonctionnel de la fonction "Détermination ducontenu de l'étiquette
4.5. FONCTION "RECONNAISSANCE DES CARACTERES"
Rôle :
Identifier les caractères lus par rapport à ceux contenus dans une table de référence.
Entrée : (Be)
Sortie : (Bf)- Table contenant les caractères codés décimal de l'étiquette
Entrée de commande : (4.7)- Ordre mise en service de la fonction
Sortie de commande : (4.8)- Renseigne la fonction "Contrôle de processus de détermination du contenu de
l'étiquette" sur la non reconnaissance d'un caractère.
4.6. FONCTION "CODAGE ASCII DES CARACTERES"
Rôle :
Transforme le code décimal du caractère en code ASCII.
Exemple : Le chiffre 1 est un caractère dont le code décimal est 1. Le codage de 1 enASCII donne $31.
Entrée : (Bf)
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 20
Sortie :(Bg ou C)- Caractères de l'étiquette codés en ASCII
Entrée de commande : (4.9)
4.7. FONCTION "CONTROLE DU PROCESSUS DE DETERMINATION DU CONTENUDE L'ETIQUETTE"
Rôle :
- Gérer séquentiellement la mise en service de chaque fonction. Les enchaînementsentre les différentes séquences sont explicités par l'algorigramme ci-après.
5. ANALYSE DE L'ALGORIGRAMME APPELE LORS DE LA RENCONTRE D'UNE BARRE.
5.1. ROLE DE LA ROUTINE "CREATION DE LA TABLE DES ZERO"
- Elle analyse la durée des éléments et affecte la valeur $01 à un élément large et lavaleur $00 à un élément mince. La table alors créée est appelée TABLE DES ZERO. LeDébut de la table des zéro et la fin de la table des zéro sont repérées.
- Met à jour éventuellement la variable ERREUR en lui affectant $08.
5.2. ROLE DE LA ROUTINE "RECHERCHE DU TYPE DE TABLE"
A partir des informations contenues dans le début des caractères terminaux, cetteroutine :
- recherche la présence du caractère de Start et du stop correspondant au codedétecté,
- détermine le type de code (2/5 - 3 barres, 2/5 - 5 barres, 2/5 - entrelacé) utilisépour l'étiquette qui vient d'être lue,
- positionne les pointeurs de table au premier élément du premier caractèresignificatif et au dernier élément du dernier caractère significatif,
- met éventuellement à jour la variable ERREUR en lui affectant $04 ou $01.
5.3. ROLE DE LA ROUTINE "RETOURNE"
- Cette routine est active lorsque le caractère Start n'a pas été trouvé en débutd'étiquette. Il s'agit d'une lecture dans le sens droite gauche. Dans ce cas, le contrôle duprocessus de détermination du contenu de l'étiquette commandera le retournage del'image de l'étiquette.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 21
5.4. ROLE DE LA ROUTINE "CREATION DE LA TABLE HEXA"
- Reconstitue les caractères à partir des éléments binaires $00 et $01 afin d'obtenirun mot de huit bits caractérisant le caractère. Exemple 0 sera codé $0C, 1 sera codé $11, .
- La table ainsi constituée est nommée "TABLE HEXA". Le Début de la table pointe lecode du premier caractère. La fin de table pointe le dernier caractère.
5.5. ROLE DE LA ROUTINE "RECONNAISSANCE DES CARACTERES"
- Compare les codes des caractères de la table hexa au code des caractères de latable de référence et affecte au contenu de la table hexa la valeur décimale du caractère lu.
- Met éventuellement à jour la variable ERREUR en lui affectant $10.
5.6. ROLE DE LA ROUTINE "CONVERSION HEXA ASCII"
- Convertit le contenu de la table hexa, qui est actuellement le code décimal ducaractère, en code ASCII correspondant au caractère. Exemple 0 correspond à $30.
5.7. ROLE DE LA ROUTINE "TRANSFERT DANS DU CONTENU DE L'ETIQUETTEVERS LES PERIPHERIQUES"
- Ajoute les caractères $0A (Retour chariot) et $0D (avance d'une ligne)
- Transfert le contenu de la table hexa vers les registres des périphériques.
5.8. ROLE DE LA ROUTINE "AFFICHAGE DU MESSAGE OK"
- Met sous tension la diode électroluminescente, solidaire du crayon, pendant unedurée de l'ordre de 50 ms.
5.9. ROLE DE LA ROUTINE "AFFICHAGE DU MESSAGE D'ERREUR"
- Met sous tension la diode électroluminescente correspondant à la valeur de lavariable d'erreur.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 22
Christian Valade
Jean Gonzalez
Table à l'envers ?
Retouner la table.
Créer la table des zéros
Rechercher le type de table.
Convertir la table en code Hexa
Convertir la table en code 2/5
Code inconnu ? (non 2/5)
Imprimer
Sortie
i = 0?oui
oui
oui
oui
non
Remarque : en cas d'erreur on se contente de sortir le bloc précédent qui a renvoyé l'indication d'erreur a aussi généré 5 bips et positionné la LED concernée.
Erreur table inconnue ou mauvais start/stop ?
Erreur d'imprimante ? (off line, papier, etc...)
Convertir la table en code ASCII
Signaler tout va bien (2 bips, LED crayon, autres LED éteintes).
C'est un parasite isolé (on ignore) Algorigramme de la fonction Timeout( )
Entrée
Figure 9 : Algorigramme de la fonction Time out
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 23
6. ARCHITECTURE DE LA STRUCTURE DU DECODEUR
ALIMENTATION
A. 1
S. 1.1
DECODAGE
D'ADRESSES
S. 1.2
MEMORISATION
PASSIVE
S. 1.3
MEMORISATION
ACTIVE
S. 1.4
COMMUNICATION
SERIE
S. 1.5
COMMUNICATION
PARALLELE
S. 1.6S. 1.7
COMMUNICATION
avec le lecteur
optique
PILOTAGE
Lecteur Optique Compatible PC ou Imprimante
et le Buzzer
Buzzer
Figure 10 : Architecture du décodeur
Toutes ces structures sont matérialisées par le micro-contrôleur 68HC11.
6.1. STRUCTURE S 1.1 "PILOTAGE"
Tous les signaux sont des signaux logiques compatibles avec la technologie T.T.L.(Transistor Transistor Logic)
Rôle:
- prend un mot de huit bits (octet) à une adresse particulière, le combine avec lecontenu d'un de ses registres de huit bits, place le résultat, qui est un nouveau mot de huitbits, à la même ou à une autre adresse.
La structure "PILOTAGE" ne peut accomplir qu'une seule tâche à la fois.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 24
6.2. LA STRUCTURE "MEMORISATION PASSIVE" S. 1.3
Rôle:
Mettre en permanence à la disposition de la structure "PILOTAGE" des instructionsafin qu'elle y puise les activités et les routines nécessaires à l'accomplissement de la tâche.Le programme résident permettant le pilotage des structures du décodeur est placé danscette structure.
6.3. LA STRUCTURE "MEMORISATION ACTIVE" S. 1.4
Rôle:
Permettre à la structure "PILOTAGE" d'y déposer des variables intermédiaires, d'yplacer les acquisitions donnant l'image du code, d'assurer le traitement de ses informations,et de mémoriser le contenu d'une étiquette traitée dans l'attente de l'envoi vers lespériphériques.
6.4. LA STRUCTURE "COMMUNICATION AVEC LE LECTEUR ET LE BUZZER" S.1.7
Rôle:
Permet l'acquisition des informations contenues dans le mot lu et renseignel'utilisateur sur le type d'erreurs éventuellement commises lors de l'opération de lecture.
Entrées:- LECT: signal numérique issu du crayon optique- Le niveau bas correspond à un espace, le niveau haut à une barre. Le signal
ne reste pas au niveau haut pendant une durée supérieure à 25 ms.
Sorties:- OK: signal numérique actif au niveau bas pendant une durée de 50 ms lorsque
la lecture et le traitement sont correct. Ce signal permet de fournir uneimpulsion lumineuse par l’intermédiaire de la diode électroluminescente ducrayon optique et une impulsion sonore par l’intermédiaire du buzzer.
- TROP : signal numérique actif au niveau haut lorsqu'il y a trop de caractèresdans le mot ou que la fin du mot n'a pas été détectée.
- CODE AUTRE : signal numérique actif au niveau haut lorsqu'il y a lectured'une étiquette construite dans un code autre que le code 2 parmi 5.
- START/STOP : signal numérique actif au niveau haut lorsqu'il y a un défaut ouune mauvaise lecture des caractères de début et de fin.
- CARACT : signal numérique actif au niveau haut lorsqu'il y a mauvaise lecturedes caractères imprimables.
- TABLE REF : signal numérique actif au niveau haut lorsque le caractère lu n'apas de correspondance dans les tables de référence.
- BUSY/NC : signal numérique actif au niveau haut lorsque le périphérique n'estpas connecté.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 25
6.5. LA STRUCTURE "COMMUNICATION PARALLELE" S. 1.6
Rôle:
Assure le transfert des caractères codés en ASCII, stockés dans le tampond'impression, vers le périphérique possédant une liaison parallèle normalisée Type"Centronics".
Sorties:- Bus de liaison de PC0 à PC7 assure le transport des caractères codés en
ASCII.- STB: signal numérique actif au niveau bas avertissant le périphérique qu'une
nouvelle donnée est disponible sur le bus de liaison. STB reste au niveau bastant que le périphérique n'a pas répondu et pris en compte le caractèreprésent sur le bus de liaison.
Entrée:- ACK: lorsque le périphérique a pris en compte le caractère présent sur le bus
de liaison, ACK passe du niveau haut au niveau bas. C'est la transition hautvers bas qui est active. Un niveau haut présent sur ACK indique que lepériphérique est connecté et sous tension.
6.6. LA STRUCTURE "COMMUNICATION SERIE" S. 1.5
Rôle:
Assure le transfert des caractères codés en ASCII, stockés dans le tampond'impression, vers le périphérique possédant une liaison série normalisée Type "RS 232".
Sorties:- TXD: (Transmitted Data Line) Ligne de transmission de données assure le
transport des caractères codés en ASCII.- RTSN: (Request To Send) Demande d'émission est active au niveau bas,
permet de piloter le périphérique.
Entrées:- CTSN: (Clear to Send) permet le contrôle automatique de la fin de
transmission, est active un niveau bas.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 26
6.7. LA STRUCTURE "DECODAGE D'ADRESSES
Rôle:
La structure "DECODAGE D'ADRESSES " fournit des lignes actives au niveau baspermettant de sélectionner les structures "COMMUNICATION" et "MEMORISATION".
6.8. STRUCTURE "ALIMENTATION" S.A. 1
Rôle:
Fournir une différence de potentiel d'alimentation de + 5 volts +/- 5% à partir de la
différence de potentiel distribuée sur la carte du décodeur.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 27
Le plan mémoire du décodeur
Temp 4 octets réservés pour le compilateur
Rbss Variables globales et tables
Libre
Pile Variables locales et adressesde retour des sous-programmes
64 registres servent à configurer etexploiter les périphériques intégrésau 68HC11
Non utilisée dans cette application
Text Code du module assembleur(start module)
Text Code du module C
Const Table de référence
Libre
Vecteurs Vecteurs Reset et vecteursInterruptions
$0000$0004
$0047
$00FF
$1000
$103F
$B600
$B7FF
$E000
$E0D2
$E646
$E65A
$FFFF
RAM
REGISTRES
EEPROM
ROMouEPROM
Figure 11 : Plan mémoire du décodeur
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 28
7. SCHEMA STRUCTUREL DU DECODEUR
Figure 12 : Schéma structurel du décodeur
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 29
8. SCHEMA DE CONCEPTION DU DECODEUR
8.1. NOMENCLATURE DES COMPOSANTS
BILL OF MATERIALSDesign: C:\ISIS\GZ\DECOBAR2.DSNRevision: 1.7Author: Jean Gonzalez
Resistors1 R1 10000KΩ Couche métallique3 R2,R3,R4 4.7KΩ Couche métallique1 R5 4.7kΩ Couche métallique
Capacitors
2 C1,C2 22pF Polyester
1 C3 1nF Polyester
3 C4,C6,C7 4.7uF Tantale
1 C5 10nF Polyester
1 C8 47uF Tantale
5 C9,C10,C11,C12,C13 10uF Tantale
Integrated Circuits
1 U1 68HC11-52
2 U2,U3 ULN2003
1 U4 LP2951
1 U5 MAX232
Transistors
1 Q1 8MHz
Diodes
7 D1,D2,D3,D4,D5,D6,D7 LED
1 D8 1.5KE6.8A
2 D9,D10 DIODE
Miscellaneous
1 BUZ1 BUZZER
1 J1 CONN H2
1 J2 CONN H26
1 J3 CONN H16
1 J4 CONN D9
2 J5,J6 CONN H4
1 RP1 4.7KΩ
1 RP2 0.33KΩ
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 30
8.2. DESSIN D'IMPLANTATION DES COMPOSANTS
Figure 13 : Vue des composants (échelle non respectée)
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 31
8.3. DESSIN D'ENSEMBLE
Figure 14 : Vue d'ensemble côté composants (échelle non respectée)
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 32
9. STRUTURE LOGICIELLE DU DECODEUR
9.1. TABLES DES SYMBOLESLinker command line:
-ptext=0E000h,const,strings,rdata=00h/,temp,rbss,data,bss,stack=0FFh \ -oC:\temp\l.obj -hp.sym -mp.MAP C:\C11V7\SCRDECO.OBJ decobar.obj \ C:\HT-6811\LIB\68libsc.lib
Machine type is 6801
Name Link Load Length SelectorC:\C11V7\SCRDECO.OBJ
(abs) 0 0 10000text E000 E000 D2temp 0 E656 4
decobar.obj text E0D2 E0D2 574const E646 E646 10rbss 4 E65A 47temp 0 E656 4
C:\HT-6811\LIB\68libsc.lib
TOTAL Name Link Load Length(abs) 0 0 10000
CLASS DATA
CLASS CODEtext E000 E000 646const E646 E646 10
CLASS RBSSrbss 4 E65A 47temp 0 E656 4
CLASS RDATA
SEGMENTS Name Load Length Top Selector
text 00E000 000656 00E656 E000rdata 00E656 00004B 00E6A1 E656stack 0000FF 000000 0000FF FF
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 33
Symbol Table
__Bbss bss E6A1 __Bdata data E6A1 __Brbss rbss E65A__Brdata rdata E656 __Btemp temp E656 __Hbss bss 004B__Hconst const E656 __Hdata data 004B __Hrbss rbss 004B__Hrdata rdata 0000 __Hstack stack 00FF __Hstrings strings E656__Htemp temp 0004 __Htext text E646 __Hvectors vectors 0000__Lbss bss 004B __Lconst const E646 __Ldata data 004B__Lrbss rbss 0004 __Lrdata rdata 0000 __Lstack stack 00FF__Lstrings strings E656 __Ltemp temp 0000 __Ltext text E000__Lvectors vectors 0000 _ascii text E490 _baud (abs) 102B_bip text E117 _c1 rbss 0004 _compacte text E275_ddrc (abs) 1007 _ddrd (abs) 1009 _debacq text E5A6_exit text E0CF _format text E33B _i rbss 0005_imprime text E4FB _iniportc text E0E6 _initimer text E0D2_inv rbss 0006 _j rbss 0007 _k rbss 0008_main text E61F _pioc (abs) 1002 _porta (abs) 1000_portb (abs) 1004 _portc (abs) 1003 _portcl (abs) 1005_portd (abs) 1008 _porte (abs) 100A _r2compacte text E2EF_rcompacte text E2AF _retourne text E3A3 _sccr2 (abs) 102D_scdr (abs) 102F _scsr (abs) 102E _tabhexa text E435_table rbss 0009 _table25 text E3E4 _tcnt (abs) 100E_tctl2 (abs) 1021 _tempo text E0F5 _tflg1 (abs) 1023_tic3 (abs) 1014 _timeout text E562 _tmsk1 (abs) 1022_tn rbss 0046 _tout rbss 0048 _tref const E64C_trop text E144 _tstart const E646 _tstop const E649_ttype rbss 004A _tzero text E152 start text E084
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 34
9.2. PROGRAMME ECRIT EN LANGAGE C/************ le compilateur travaille sur 7 bits doncSURTOUT PAS de codes ASCII etendus dans les commentaires en cas depb incomprehensible enlever les commentaires (caract francais)ATTENTION aux indices de tableau non signes (tjs consideres >=0)***/
/*** XIRQ pour orion dans start module (option) ***//*** vecteur de tic3 (pa0) crayon optique FAIT dans start moduledonc enleve ici #define VECTIC3 ((isr *)0xffea)
***********************************************************************/#include "11regist.H" /** mon fichier registres **/#include <intrpt.H>#define LTABLE 60 /** modif facile avec cte declaree **/
/*********************** var globales page0******************************/near unsigned int tn,tout; /** temps : tn dernier front, tout tpsdepuis tn */near unsigned char i; /** indice dernier elt de la table encours **/near unsigned char j,k; /** indices de tableau a tout faire **/near unsigned char ttype; /** 0 : entrela*** 1 : 3barres*** 2 :5barres***/near unsigned char inv; /** 1 si table retournee **/near unsigned char table[LTABLE+1]; /** table a tout faire **/near unsigned char c1; /** caract tampon **//************************ tableaux de ctes**************************/const unsigned char tstart[3]=0,0,3; /* qualificatif const doncen ROM */const unsigned char tstop[3]=1,4,5; /* table des stops */const unsigned char tref[10]= /* code 2/5 */ 0x0c,0x11,0x12,0x03,0x14,0x05,0x06,0x18,0x09,0x0a;/******************** fonctions d'initialisation*************************/ void initimer(void)
tctl2=0x3; /* tous fronts */tflg1=0x1; /* RAZ flag */tmsk1=0x1; /* INTER sur tic3 */
void iniportc (void)
ddrc=0xff; /** 2 etats en output hdns **/pioc=0x1c; /** full_hdns output pulse strb_low ack_low
**/
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 35
/*********************** fonctions de traitement*************************//********* temporisation entree en ms environ **********/void tempo (unsigned int tps)
unsigned char c;for( ;tps>0;tps--) /** remarquer la position des ; **/
for(c=0;c<=100;c++);/******************************************************//************* BIP entree nbre de bips ****************/void bip(unsigned char nbre) for( ;nbre>0;nbre--)
porta=porta|0x10; /* OU logique force a 1 le bip ss modifautres */
tempo(200);porta=porta&0xef; /* ET logique force a 0 le bip */tempo(100);
/*************************************************//**************** etiquette trop longue ***************/void trop (void)
portb=1;bip(5); /**** bloquer ici en debug ou TP ****/
/** boucle: goto boucle; ***********/
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 36
/************************************************************//******* creation de la table des zeros : ********************* 0 pour elt mince 1 pour elt epais *************//***entree i indice du elt saisi par le crayon ***/void tzero(void)
/**** bloquer ici si niveau 1 d'acquisition seulement ***bloque en inter flag I a 1 *** tester var i et table ****/
k=0; for(j=0;j<i;j++) /*** jusqu'a la premiere inegalite ***/
c1=table[j]; /** save time before convert **/if(table[j] > (2*table[j+1])) table[j]=1; /** nettement plus long donc 1 **/
while(k) /** retour sur elt precedents **/ table[j-k]=1;
k--;break; /** sortie a la premiere inegalite **/
if(table[j] < (table[j+1]/2)) table[j]=0;
while(k) /** retour sur elt precedents **/ table[j-k]=0;
k--;break;
/** aucun des precedents c'est l'egalite **/k++; /** on laisse pour l'instant (k : compteur d'egalite) **/
/*** apres la prem inegalite ds la table ***/ while(j<i)
if(c1>2*table[j+1]) /* elt i+1 nettement plus court*/
c1=table[j+1]; /* save time before clear */table[j+1]=0;
else if(c1<table[j+1]/2) /* i+1 nettement plus long */
c1=table[j+1]; /* save time */table[j+1]=1;
else /** l'egalite n'est plus indetermine **/ c1=table[j+1];
table[j+1]=table[j];
j++;
/*** fin table des zeros ***/
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 37
/***************************************************//*********** conversion serie vers // ********************** nbre octets a 1 bit vers un octet **********//*** entrees j indice premier octet source ** nbre nombre acompacter **//*** sortie c1 resultat ***/void compacte(unsigned char nbre)
unsigned char top;top=j+nbre-1;c1=table[j];j++;for( ;j<=top;j++) /** on s'arrete en top **/
c1=(c1<<1)+table[j]; /* decale a gche puis add *//****/void rcompacte(unsigned char nbre) /** le meme en reculant **/
unsigned char top;top=j+1-nbre;c1=table[j];j--;for( ;j>=top;j--) /** on s'arrete en top **/ c1=(c1<<1)+table[j];
if(j==0) break; /** $ff considere positif **/
/****/void r2compacte(unsigned char nbre) /** le meme en reculant 1BARRE/2 **/
unsigned char top;top=j-2*(nbre-1);c1=table[j];j-=2;for( ;j>=top;j-=2) /** on s'arrete en top **/ c1=(c1<<1)+table[j];
if(j==0) break; /** $ff considere positif **/
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 38
/****************************************************//****** recherche du type de table et verification start ou stop******//** entree i nbre d'elt ds la table **//** sortie renvoie 1 si erreur start ou stop **/unsigned char format(void)
inv = 0;ttype=table[0]+table[i]; /** selon barres extremes **/if(ttype==0) /** entrelace **/ j=3; /** 4em en j=3 **/ rcompacte(4); /*** start ? ***/ if(c1 != tstart[ttype]) /** mauvais start **/ j=0; /** est ce un stop **/
compacte(3);if(c1 != tstop[ttype]) portb=0x6; /** non plus stop **/
bip(5); /* err start/stop ou code autre 2 leds*/
return(1);else inv=1; /** il faut la retourner **/
else /** pas entrelace **/ portb=0x2; /** code non lu pour l'instant **/
bip(5);return(1);
return(0); /** OK **/
/********************************************//**** retoune la table si stop au debut *****/void retourne(void)
j=0;k=i;while(k>j)
c1=table[j];table[j]=table[k];table[k]=c1;j++;k--;
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 39
/********************************************//** tansformation de la table des zeros en code 2 parmi 5 **//** suppose start au debut **//** entree i **//** sortie i (mise a jour indice dernier elt)**/void table25(void)unsigned char jj; /** car j est modifie par rcompacte **/ if(!ttype) /** entrelace **/
jj=12; /** fin du premier caract **/k=0;while(jj<i)
j=jj;r2compacte(5);table[k]=c1;k++;j=jj+1; /** fin du 2n ieme **/r2compacte(5);table[k]=c1;k++;jj+=10; /** paire suivante **/
table[k]=0xff; /** + clair ds wice **/i=k-1; /** fin table 2/5 **/
/*************************************//***** conversion table 2/5 vers table hexa
(binaire naturel) *************//** sortie renvoie 1 si erreur / table de ref **/unsigned char tabhexa(void)
for(j=0;j<=i;j++) c1=table[j];
for(k=0;k<=9;k++) if(c1==tref[k]) table[j]=k;
break; if(k==9) portb=0x10; /** caract ss equivalent ds
tref2/5 **/bip(5);return(1);
return 0; /*** OK ***/
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 40
/************ conversion hexa/BCD -> ascii & rajout CR LF************/void ascii(void) /** 0xff en i+1 repere ds wice *** ascii a lasuite de
table hexa de i+2 a i+2+i pour voir les 2 en TP **/
for(j=0;j<=i;j++)table[j+i+2]=table[j]+'0';
table[j+i+2]='\r';table[j+i+3]='\n';table[j+i+4]=0;
/*********************************************/unsigned char imprime(void) if(!(porte & 2)) /** imprimante hors tension **/
portb=0x40;bip(5);return 1;
for(j=i+2;table[j]!=0;j++) k=0;
while(!(pioc & 0x80)) tempo(1);
k++;if(k==100) /** mini 1 caract toutes les 100
ms **/ portb=0x40;
bip(5);return 1; /** off line paper etc...**/
portcl=table[j]; /** envoi **/ return 0;
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 41
/*********************************************//***** on passe a la suite de debacq() par un time-out ******/void timeout(void)
if(i) i--; /** i indice du dernier elt saisi **/else return; /** 1 seul (parasite) rendre la
main **/tzero(); /** (table des zeros) **/if(format())
return; /** erreur type de table oustart/stop **/
if(inv)retourne(); /** stop au debut **/
table25();if(tabhexa())
return; /** erreur carac non present ds table deref2/5 **/
ascii();if(imprime())
return; /** Pb imprimante **/bip(2); /** pas d'erreur : 2 bips et **/portb=0x80; /** LED crayon seule **/
/***//******* DEBUT d'acquisition d'un code barre *******/void interrupt debacq(void) tn=tic3; tflg1=0x1; /* RAZ flags */ i=0; do
if(i>=LTABLE) trop(); break; /* trop de barres */tout=tcnt-tn;if(tout>=32000) /** faire coherent avec nbre decalages
**/ timeout(); /* suite, i elt saisis, dernier indice i-1
*/ break;
c1=tflg1 & 0x01;if(c1) table[i]=(tic3-tn)>>7; /** reglage vitesse crayon et
quartz4/8MHz attention changement de format ici */
i++; tn=tic3; /** memoire du dernier instant **/ tflg1=0x1; /* RAZ flags */
while(1); /*** ss fin ***/ tflg1=0x1; /* RAZ flags */
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 42
/***//******************* programme ***************/void main (void)
initimer(); /* chrono sur TIC3 */iniportc(); /* imprimante */
/*** set_vector(VECTIC3,debacqu); inutile fait ds start module***/
portb=0;bip(1); /** depart standard : 1 bip **/if(!(porte & 2)) /** imprimante hors tension **/ portb=0x40;
bip(5);ei();
prog: goto prog; /* taches de fond */
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 43
9.3. UTILISATION DE L'ASSEMBLEUR AVOCET
Utilisation de l'assembleur AVOCET version 7
1) pour les débutants
On se limite dans ce cas au travail sur un seul fichier à la fois.
1-1) Ecrire votre programme au moyen d'un éditeur de texte.
Exemple
******************************************************************************attention : pas de caractere francais (accents) dans les commentaires*****(codes ASCII) etendus) car l'assembleur travaille sur 7 bits.******************************************************************************************
opt hc11,lbra **sinon 6801 et brancht court**psect rasvar, basepage **page 0**N1 rmb 2 **reserve 2 octets en mémoire N1N2 rmb 2Res rmb 2
***************************************************************************pset ascode,pure ***code assembleur lecture seule***start LDS #$FFboucle LDaa N1
ADDa N2STaa RES
FINI JMP boucle***************************************************************************pset vectors,abs,ovrld **section superpose (overlay) **
rmb $FFFE **@du vecteur de reset**fdb start **contenu du vecteur RESEST**
***************************************************************************END
Remarques :
- l'assembleur accepte indifféremment les majuscules ou les minuscules, sauf pour lesétiquettes et noms de sections.
- PSECT signifie PROG section. Une section (segment sur d'autres assembleurs)correspond à une zone mémoire RAM ou EPROM. On place en RAM les grandeurs susceptiblesde varier (variables) et en EPROM ou ROM les invariants (le programme et les constantes).PSECT ascode signifie que l'on travaille dans une zone mémoire qui s'appelle ascode. Dans unpremier temps (débutants) on utilise l'application assembleur en répondant oui à l'opérationlinkeur. Dans ce cas, votre programme ne peut comporter que les sections ascode et rasvar.ascode sera implanté à partir de l'@ $E000 et rasvar à partir de l'@ $0000 (ces options sontdéfinies dans asm117.bat).
- Options de PSECT :,pure est facultatif (lecture seule) : l'assembleur signalera une tentative d'écriture dans cette
zone. Toutes les sections présentant cette option devront être placées dans le linkeur enROM.
,basepage est facultatif (en page zéro) : permet d'accélérer le programme au moyen del'adressage direct (@ sur un octet toutes les sections présentant cette option devrontêtre placées sur le linkeur aux @ $0000 à $00FF.
,abs signale une section absolue : elle commence à l'@ $0000. Dans ce cas particulier onconnaît les @ des éléments de la section avant linkage.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 44
,ovrld (overlay) permet à une section absolue : elle commence en $0000 de recouvrirpartiellement une autre c'est au programme, de vérifier qu'il n'y a pas de conflit mémoire.A utiliser avec précaution, débutants s'abstenir.
1-2) Enregistrer votre programme avec l'extension AS exemple : ADD.AS
1-3) Lancer l'application Assembleur HC11 en répondant oui à toutes les questions.L'assembleur signale les erreurs de syntaxe. Si il y en a , la lecture du fichier P.PRN (printer))vous aidera à dépanner. Le fichier contenant les codes machines est un fichier ASCII nomméP.S19. Le fichier contenant la table des symboles s'appelle $$.SYM.
1-4) Lancer l'application émulateur WICE. Vous êtes alors prêt à tester votre programme.Le chargement des fichiers P.S19 et $$.SYM est automatique. Si ce n'est pas le cas, vérifier lecontenu du fichier W6811.FIL
2) Vous avez un peu d'expérience. Vous allez linker (relier) des fichiers assemblésséparément.
Exemple :
opt hcll
*******************************************************************************
psect rasvar,basepage ****PAGE 0 ***
ml FCC "MESSAGE"
fcb 0
*******************************************************************************
psect ascode,pure ***lecture seule***
start LDS #$FF
global search_monitor
boucle jsr search_monitor
ldab #0
global wc_command
jsr wc_command
ldd #m1
global print_msg
jsr print_msg
fini jmp fini
*******************************************************************************
psect vectors,abs,ovrld ****section supperposee (overlay)
rmb $FFFE
fdb start
*******************************************************************************
END
Ce programme s'appelle TESTUPS.AS. Il permet de tester une fonction d'affichageintégrée à l'émulateur WICE. Ces fonctions s'appellent (universal peripheral simulator). Ce
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 45
programme ne peut fonctionner seul. Il fait appel à 3 sous-programmes (search_monitor,print_msg, wc_command) situés dans un (ou plusieurs) autre fichier. Ces routines ont étédéclarées globales car elles sont définies (écrites) ailleurs. de même un sous-programme définitici et susceptible d'être utilisé ailleurs devrait être déclaré global.
Ce programme sera assemblé en répondant non à l'option linkeur. On obtient alors unfichier TESTUPS.OBJ (assemblé mais @ non encore définies).
Ce programme ne peut fonctionner seul. Il devra être linké avec le programmeUPSAVO7.OBJ qui contient les routines search_monitor, print_msg, wc_command.
Le linkage des deux parties TESTUPS.OBJ et UPSAVO7.OBJ sera fait en utilisantl'application linker HC11. Avant de pouvoir utiliser cette application, il faut écrire un fichier decommandes linker pour dire au ce qu'il a à faire. En général, la syntaxe étant un peu lourde, onrecopie en renommant un fichier de codes linker existant puis on modifie (en général seulementla liste des .OBJ à relier.
Exemple : Fichier de codes linker TESTUPS.TXT
Contenu Commentaires
-Pascode=0F000H,asconst,rasvar=0 \ -P (put) section ascode à partir de @F000,
section asconst à la suite de ascode, section
rasvar à partir de $0000
-O$.obj -Hp.sym -Mp.map \ -O (output) et H (symboles) ne pas modifier
cette ligne
testups.OBJ upsavo7.obj \ liste des .OBJ à relier
Remarque : \ à la fin de chaque ligne pour dire : ce n’est pas fini, lire la suite.
On peut avoir autant de sections que l'on veut (ligne 1). Des fichiers différents peuventpartager ou non une même section. Ex : dans ascode il y a contributions provenant deTESTUPS.AS et UPSAVO7.AS TESTUPS étant nommé avant dans la liste (ligne 3), son codeassembleur occupera le début de la section ascode.
On peut avoir autant de fichiers .OBJ que l'on veut. Une dizaine n'est pas exceptionnel.
ATTENTION : Seules les sections réellement utilisées doivent apparaître ligne du haut. Siproblème sur table des symboles, rajouter une ligne vide ou 0 au début de $$.SYM. (ou FormFeed, saut de page)
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 46
Christian Valade
Jean Gonzalez
Travaux dirigés N°1
Objectif:
A partir des algorigrammes fournis dans le document support, de l'organisation duplan mémoire, du rôle de chaque routine, être capable de comprendre (lire, analyser, fairela synthèse, extrapoler) le fonctionnement du décodeur de codes à barres.
Travail demandé:
Q 1) Analyse de l'algorigramme (time out) appelé lors de la rencontre d'une barre
La durée de lecture de l'étiquette de la page est de 1 seconde. Un compteur internefournit une base de temps de 1 ms.
A partir de l'algorigramme appelé lors de la rencontre d'une barre et du rôle dechaque routine;
Q 2) Donner le nombre d'octets de la TABLE DES DUREES, après acquisition
Q 3) Donner le contenu de la TABLE DES DUREES, après exécution de la routineDEBACQ.
Q 4) Calculer le nombre d'octets de TABLE DES ZEROS
Q 5) En déduire le contenu de la TABLE DES ZEROS après l'exécution de la routineCREATION DE LA TABLE DES ZEROS. [TZERO( )]
Q 6) Expliciter le rôle de la routine RECHERCHE DU TYPE DE TABLE. [Format ( )]
Q 7) Expliquer le rôle de la routine RETOURNE [Retourne ( )]
Q 8) Donner le contenu de la table hexa après exécution de la routine CREATION DE LA
TABLE HEXA. (2/5) [Table25( )]
Q 9) En déduire la longueur de la table HEXA (2/5)
Q 10) Donner le contenu de la table hexa après exécution de la rou tineRECONNAISSANCE DES CARACTERES. [Tabhexa ( )]
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 47
Q 11) Donner le contenu de la table hexa après exécution de la routine CONVERSION
HEXA ASCII. [ACSII( )]
Q 12) Ecrire le texte tel que vous pourriez lire sur une imprimante connectée audécodeur.
Remarque:- La fréquence du quartz est de 8 Mhz, en conséquence la période du cycle
machine est de 0,5 µs.- Le compteur est commandé par sept décalages. La période du compteur sera
de 0,5 .27 = 128/2 = 64 µs.- La durée maximale de lecture d’une barre entre deux fronts est de 255.64 soit
de 16,3 ms. La durée de lecture d’une étiquette de 75 éléments minces seraitde 1,23 s. Inversement, si la durée de lecture totale de l’étiquette est de 1 s, ladurée d’un élément sera de 1 / 75 soit 13,3 ms. En pratique, la vitesse delecture sera beaucoup rapide.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 48
Christian Valade
Jean Gonzalez
Travaux dirigés N°2
Fonctions ascii( ) et retourne( )
Ressources : Listings suivants :- le programme complet en langage C DECOBAR.C- le compte rendu de "linkage" associé P.MAP- les modules assembleur générés par le compilateur des fonction ascii( ) et
retourne().- la documentation du 68HC11.
Introduction à la fonction ASCII( )
A partir de DECOBAR.C
Q 1) Rédiger l'algorithme de la fonction ascii( ).
Q 2) Dessiner l'algorigramme de la fonction ascii( ).
A partir de la table des symboles :
Q 3) Donner l'adresse mémoire de la fonction ascii( ).
Q 4) Donner l'adresse du premier élément de la table.
Etudier le module assembleur correspondant à la fonction ascii( ).
Q 5) Associer à chaque bloc assembleur son équivalent source C ou algorithme. Enparticulier détailler le mécanisme de la boucle for (faire i fois).
Un opérateur intelligent (mais beaucoup plus lent que le compilateur) peut réduireenviron de moitié le nombre d'instructions. En particulier le compilateur traite chaqueinstruction séparément. L'opérateur peut profiter du fait qu'un calcul d'indice a déjà été faitauparavant. Dans cette optique, les trois derniers blocs peuvent être réduits à quelquesinstructions.
Q 6) Réduire le code autant qu'il vous est possible. Si vous n'avez pas l'habitude,commencer par la fin, c'est plus facile (pas de boucle).
Le programme réduit a peut être une structure un peu différente de la versiond'origine.
Q 7) Réactualiser l'ordinogramme ou l'algorithme.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 49
Introduction à la fonction retourne( )
L'étude va être un peu identique mais cette fois-ci nous allons faire faire aucompilateur l'essentiel du travail de réduction du code assembleur en utilisant despointeurs.
Q 8) Rédiger l'algorithme de la fonction retourne( ).
Etudier le module assembleur correspondant à la fonction retourne( ).
Identifier
Q 9) Associer à chaque bloc assembleur son équivalent source C ou algorithme. Enparticulier détailler le mécanisme de la boucle for (faire i fois).
Simplification par le langage C
Puisque le langage assembleur travaille plus facilement sur les adresses desdonnées que sur des tableaux indicés, nous allons étudier une autre rédaction en langageC de la même fonction.
Q 10) Etudiez le listing de la fonction retourn_()
Q 11) Associer à chaque bloc assembleur son équivalent source C ou algorithme. Enparticulier détailler le mécanisme de la boucle while (faire tant que).
Q 12) Faut-il généraliser ce type de programmation en mode "single chip"? en mode"expanded mux" ? Proposer des arguments pour et contre.
Votre code assembleur
Q 13) Rédiger votre version en assembleur du sous-programme retourne (il restequelques simplifications possibles en remplaçant les pointeurs par les registresX et Y).
Q 14) Si nécessaire réactualiser l'ordinogramme ou l'algorithme.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 50
Assembleur généré par le compilateur pour la fonction ascii()
;C:\C11V7\DECOBAR.C: 251: void ascii(void)global _asciisignat _ascii,24
_ascii;C:\C11V7\DECOBAR.C: 255: for(j=0;j<=i;j++)clr _jbra l85
l82ldab _jldaa #0std ctempldab _ildaa #0addd 0+ctempaddd #_table+2xgdyldx #_tableldab _jabxldab 0+0,xaddb #48stab 0+0,y
l84inc _j
l85ldab _jcmpb _ibls l82
l83;C:\C11V7\DECOBAR.C: 257: table[j+i+2]='\r';ldab _ildaa #0std ctempldab _jldaa #0addd 0+ctempaddd #_table+2xgdxldab #13stab 0+0,x
;C:\C11V7\DECOBAR.C: 258: table[j+i+3]='\n';ldab _ildaa #0std ctempldab _jldaa #0addd 0+ctempaddd #_table+3xgdxldab #10stab 0+0,x
;C:\C11V7\DECOBAR.C: 259: table[j+i+4]=0;ldab _ildaa #0std ctempldab _jldaa #0addd 0+ctempaddd #_table+4xgdxclr 0+0,x
l81rts
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 51
Assembleur généré par le compilateur pour la fonction retourne()
;C:\C11V7\DECOBAR.C: 187: void retourne(void)global _retournesignat _retourne,24
_retourne;C:\C11V7\DECOBAR.C: 189: j=0;
clr _j;C:\C11V7\DECOBAR.C: 190: k=i;
ldab _istab _k
;C:\C11V7\DECOBAR.C: 191: while(k>j)bra l62
l63;C:\C11V7\DECOBAR.C: 192: ;C:\C11V7\DECOBAR.C: 193: c1=table[j];
ldx #_tableldab _jabxldab 0+0,xstab _c1
;C:\C11V7\DECOBAR.C: 194: table[j]=table[k];ldy #_tableldab _jabyldx #_tableldab _kabxldab 0+0,xstab 0+0,y
;C:\C11V7\DECOBAR.C: 195: table[k]=c1;ldx #_tableldab _kabxldab _c1stab 0+0,xline 196
;C:\C11V7\DECOBAR.C: 196: j++;inc _j
;C:\C11V7\DECOBAR.C: 197: k--;dec _k
;C:\C11V7\DECOBAR.C: 191: l62
ldab _kcmpb _jbhi l63rts
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 52
source C variante : fonction retourn_()
extern unsigned char i,j,k,c1;extern unsigned char *pt1,*pt2;
/*** en DECLARATION prefixe * pour pointeur : pt1 et pt2contiendront des adresses de char (8 bits) ***/
extern unsigned char table[30];
void retourn_(void)
pt1=table; /* table ss indice : 1 iere @ de table */pt2=&table[i]; /* & en prefixe var => @ de la variable */ /* donc pt1 et pt2 initialises sur @ debut et fin de
table*/while(pt2>pt1)
c1=*pt1; /* * en prefixe pointeur => contenu */*pt1=*pt2; /* pointe par pt1 et pt2 */*pt2=c1;pt1++; /* @ suivante */pt2--;
remarque : Demander register pour l 'un des pointeurs réduit encore un peu le code
Assembleur généré par le compilateur pour la fonction retourn_()
global _retourn_signat _retourn_,24
_retourn_ldd #_tablestd _pt1
;C:\THEMES\DECOBAR\RETOURN_.C: 10: pt2=&table[i];ldab _ildaa #0addd #_tablejmp L1
l3ldx _pt1ldab 0,xstab _c1
;C:\THEMES\DECOBAR\RETOURN_.C: 15: *pt1=*pt2;ldx _pt2ldab 0,xldx _pt1stab 0,x
;C:\THEMES\DECOBAR\RETOURN_.C: 16: *pt2=c1;ldab _c1ldx _pt2stab 0,x
;C:\THEMES\DECOBAR\RETOURN_.C: 17: pt1++;ldd #1addd _pt1std _pt1
;C:\THEMES\DECOBAR\RETOURN_.C: 18: pt2--;ldd _pt2subd #1
L1std _pt2
;C:\THEMES\DECOBAR\RETOURN_.C: 12: cpd _pt1bhi l3
;C:\THEMES\DECOBAR\RETOURN_.C: 20: rts
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 53
Christian Valade
Jean Gonzalez
Travaux dirigés N°3
Fonctions compacte( ) et format( )
Ressources : listings suivants :- le programme complet en langage C DECOBAR.C- le compte rendu de "linkage" associé P.MAP- facultatif l'assembleur généré par le compilateur correspondant à la fonction
retourne( )- la documentation du 68HC11.
Introduction à la fonction compacte
Q 1) Rédiger l'algorithme ou l'algorigramme de la fonction compacte( ).
Q 2) Dessiner ce qui se passe en mémoire (bits -> octet)
Fonction compacte( )
Q 3) Rédiger sans l'aide du compilateur votre version assembleur de la fonctioncompacte( ).
Pour respecter l'aspect structuré du module, on souligne les blocs au moyen de labelssi1, si2, si3, si1n (sinon correspondant à si1), si1f (fin des blocs correspondant à si1) ... etc,et on décale (identation) les parties correspondant aux blocs comme dans le module écriten C.
Remarque :* le passage de paramètre aux fonctions compacte et rcompacte() s'effectue par
le registre B.
Introduction à la fonction format( )
Q 4) Rédiger l'algorithme de la fonction format( ).
Rédiger en assembleur le sous-programme format( ).
Les fonctions compacte et rcompacte ne sont pas demandées ici. En TP ellespeuvent être récupérées dans le module DECOBAR.AS et intégrées à votre texte ou biencompilées à part et ensuite linkage avec votre module.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 54
Christian Valade
Jean Gonzalez
Travaux dirigés N°4
Conventions liées au logiciel de saisie de schéma :* Toutes les connections de même nom sont électriquement reliées.* Vcc représente l'alimentation 5V.* Pour les circuits logiques (qui ne possèdent en général qu'une seule tension
d'alim), la connexion à Vcc est implicite et non représentée.
Aspects qualitatifs
Q 1) Quel est le rôle des ULN2003. Indiquer pourquoi ce type de fonction n'est pasintégré au 68HC11.
Le portC du 68HC11 peut être connecté à une imprimante (entrée parallèle) par lebiais du connecteur J2.
Q 2) Quel protocole de communication doit-on s'attendre à trou ver au niveau duportC ?
Q 3) Quelle longueur de câble (ordre de grandeur) peut on avoir à votre avis entre lelecteur de codes barre et l'imprimante ? pourquoi ?
Le connecteur J3 est réservé à la liaison série.
Q 4) Quel est le rôle du MAX232 (U5) ?
Q 5) expliquer en quelques mots (et/ou dessin) le principe du doubleur de tension àcapacité commutée utilisée dans le MAX232
Q 6) Quels protocoles de communication sont rendus impossibles par le câblageprésent ici ?
Q 7) Quelle longueur de câble peut on piloter ici ?
Q 8) Quel est le rôle de la résistance R5 ?
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 55
Aspects quantitatifs.
Caractéristiques électriques statiques
Pour un éclairement correct, il faut un courant de l'ordre de 10 mA dans les LEDS. Ladoc des ULN2003 est dans le polycop du décodeur.
Q 9) Qui limite le courant dans les LEDS ?
Q 10) Le circuit intégré ULN2003 ne possède pas de broche d'alimentation positive.pourquoi ?
Q 11) Vérifier la compatibilité statique entre le 68HC11 et U3. (Le 68HC11 est-il capablede fournir courant et tension suffisants à U3 ?).
Le réseau R3 C7 filtre la référence du CAN 8 bits intégré au 68HC11.
Q 12) Donner le coefficient de conversion du CAN.
Q 13) Quelle précision doit-on s'attendre à trouver sur ce type d'ADC ?
Q 14) Que pensez vous de la qualité de la référence ? Quels type de capteurs peut onutiliser avec une précision relative supérieure à celle de la référence ?
Q 15) Montrer que le calcul statique des résistances des résistances de tirages surdes entrées en l'air PA2, PA1, ou MODA conduit à des valeurs peu réalistes.
Cas particuliers.
Circuit de reset
Le LP2951 est un régulateur intégré faible consommation qui positionne sa sortieERR à l'état bas si la tension s'abaisse de plus de 5% par rapport à la valeur de consigne.Ici seule la fonction surveillance de tension du composant est utilisée : Reset est actif si latension d'alimentation du 68HC11 est inférieure à 4,75V.
Q 16) Rechercher dans la documentation les raisons de cette protection.
Q 17) On branche une alimentation 10V 10A sur VCC. La diode D8 conduit. Que sepasse-t-il ensuite? Quels conséquences pour le câblage imprimé.
Exercice logiciel
On souhaite associer un "buzzer" à l'affichage LED : 1 bip (0,5s) pour OK, 3 bips(période 0,2s) pour un défaut. Le buzzer est actif quand PA4="1". Le bit PA4 étantunidirectionnel n'a pas à être configuré.
Q 18) Ecrire le texte en syntaxe source assembleur 68HC11 des routines BIP1 et BIP3
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 56
Christian Valade
Jean Gonzalez
Travaux Dirigés N°5
Objectif
Etre capable d'utiliser quelques-unes des fonctions liées au temps (Timer) du68HC11.
Utilisation des fonctions de chronométrage (input (time) capture)
Introduction
La routine debacq (début acquisition) correspond à la partie logicielle de la fonctionacquisition de l'image de l'étiquette. Sa fonction est de créer la table des temps (entrechaque front). On se propose d'écrire cette routine simplifiée (pas de test trop de barres) enassembleur. On peut d'inspirer de la fonction void interrupt debacq(void). l'entrée decapture utilisée est ic3. Rappel : la base de temps principale du 68HC11 est tcnt (@$100E). Dans ce TD nous appellerons date, la valeur courante du registre TCNT. Rq : iln'est pas nécessaire de fonctionner en interruption.
Description de la tache :
Attendre le front suivant
S'il ne survient pas avant 25ms (durée max permise par le lecteur optique)
abandonner
S'il survient mesurer l'écart (temps) par rapport au front précédent et stocker
dans la table
L'algorithme simplifié de ce sous programme est le suivant :tn = tic3 (date du 1° front)effacer l'indic de frontrépéter tantque (date-tn) < 25 ms (date-tn=tout)
Si front sur Pa0 (IC3)tn+1 = datetemps = tn+1-tnstocker temps dans table (attention format table 8 bits)décaler 7 foistn = tn+1 (préserve la dernière date de front)effacer l'indicateur de front
Fsi (fin de Si)Ftq (fin de tant que)
Travail demandé
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 57
Arithmétique
Q 1) Montrer qu'une simple soustraction entre 2 valeurs successives de date donneune image du temps écoulé même s'il y a eu un (1 seul) passage de frontière.Date est limité à 2 octets, le passage de frontière survient quand date passe de$FFFF à $0000.
Programmation
Q 2) Ecrire le texte en syntaxe source assembleur 68HC11.
Fonction comparaison (d'un temps) avec (ou sans) action en sortie (output (time)compare).
rappel : La fonction est celle du réveil matin : Prévenir à l'instant où l'on atteint untemps réglé auparavant. Le réglage de l'instant de déclenchement se fait en ajoutant à ladate (tcnt) le temps à attendre jusqu'au déclenchement.
Ecrire l'algorithme correspondant
On souhaite associer un "buzzer" à l'affichage LED : 1 bip (0,5s) pour OK, 3 bips(période 0,2s) pour un défaut. Le buzzer est actif quand PA4="1". Le bit PA4 étantunidirectionnel n'a pas à être configuré. Les temporisations seront réalisées en utilisant leregistre output compare (avec action en sortie).
Q 3) Ecrire le texte du programme en source assembleur.
Elargissement du champ technologique
Réaliser une référence 1KHZ sur la broche Pa4 (OC4) en utilisant les fonctions dedéclenchement synchronisées (Output compare) du 68HC11.
Q 4) Description de la tache :
Q 5) Ecrire l'algorithme correspondant.
Q 6) Ecrire le texte du programme en source assembleur.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 58
11. TRAVAUX PRATIQUES
Christian Valade
Jean Gonzalez
Travaux Pratiques N°1
Le TP N°1 est la mise en oeuvre du TD N°2.
Prise de contact avec la chaîne de développement : éditeur -> assembleur / linker-émulateur
1) Ecrire le texte du module (accès éditeur dans menu utilitaires)
2) Sauvegarder avec l'extension AS (ex ASCII.AS).
3) Assembler (menu applications) en répondant oui à toutes les options si erreurs desyntaxe, consulter le fichier P.PRN (printer) et recommencer sinon
4) lancer l'application émulateur
Dans l'émulateur, on utilise les modes pas à pas(N), trace(T nbre de pas), run(G @)avec ou sans point d'arrêt(B @). On observe le programme désassemblé(U @), on observele contenu des mémoires avec affichage permanent(P) ou à la demande(D @), on peutécrire en mémoire en hexa(E @), ou en ascii (A @ puis FCC), on modifie les registres(R).
Préfixe \ pour pouvoir utiliser un symbole à la place d'une valeur hexa dans unecommande.F1 aide (liste des cdes)Alt F1 commute mode débutant (bavard) /mode expert (concis)F2 pour vérifier ou modifier le plan mémoire (il y en a un par défaut)F10 pour sortir.
5) Valider le module ascii
6) Rédiger une fiche de quelques lignes qui contient la liste des taches à effectuerpour valider le module.
7) Faire évoluer le module pour obtenir une conversion majuscules -> minuscule puisminuscules -> majuscules.
(utilisation possible d'un nombre signé)
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 59
Christian Valade
Jean Gonzalez
Travaux Pratiques N°2
Mise en oeuvre du TD N°2 (suite) et du TD N°3
1) Validation des modules retourne et compacte.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 60
Christian Valade
Jean Gonzalez
Travaux Pratiques N°3
A partir de DECOBAR.C
1) rédiger l'algorithme de la fonction format( ).
8) Rédiger en assembleur le sous-programme format().
Pour respecter l'aspect structuré du module, on souligne les blocs au moyen de labelssi1, si2, si3, si1n (sinon correspondant à si1), si1f (fin des blocs correspondant à si1) ... etc,et on décale (identation) les parties correspondant aux blocs comme dans le module écriten C.
Remarques :- Le passage de paramètre aux fonctions compacte et rcompacte() s'effectue
par le registre B.- Les fonctions compacte et rcompacte ne sont pas demandées elles peuvent
être récupérées dans le module DECOBAR.AS et intégrées à votre texte oubien compilées à part et ensuite linkage avec votre module.
Si vous souhaitez avoir un aperçu du travail multi-fichiers -> linker faire ceci :* Assembler votre module format.AS avec l'option pas de linkage. Vous obtenez
un fichier format.OBJ* Compiler un module de source.C contenant uniquement les fonctions
compacte() & rcompacte() ainsi que la déclaration extern unsigned charc1,j,table[60]; On peut compiler avec les options optimiser (full), suppress localsymbols, symbolic debug info, 68HC11. Ensuite choisir COMPILE to .OBJ
* Ecrire le fichier de commandes linker.* Lancer l'application linker.
Pour vous aider, voici le programme GOTOC.AS capable d'appeler la fonctioncompacte().
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 61
***********************
global _c1,_j,_table
psect rasvar,basepage **** PGE 0 ****
_c1 rmb 1
_j rmb 1
_table RMB 50
*****************************
psect ascode,pure **** lect seule ******
start LDS #$FF orion
boucle LDab #3
global _compacte
jsr _compacte
FINI JMP boucle
********************************
psect vectors,abs,ovrld *** section supperposee (overlay) ***
rmb $FFFE
fdb start
*********************************
END
et voici le fichier de commandes linker associé :
-Pascode=0F000H,text,rasvar=0 \
-O$.obj -Hp.sym -mP.MAP \
gotoc.OBJ c:\c11V7\compacte.obj \
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 62
Christian Valade
Jean Gonzalez
Travaux Pratiques N°4
Mise en oeuvre du TD N°5 (modules assembleur liés au timer du 68HC11)
S'il reste du temps faire fonctionner le décodeur
S'il reste beaucoup de temps essayer de greffer le module assembleur debacq à laplace de son équivalent C dans le logiciel complet.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 63
Christian Valade
Jean Gonzalez
Travaux Pratiques N°5
Mise en oeuvre de la SCI DU 68HC11 (Serial Communication Interface)
Il s'agit d'une révision générale sur la programmation HC11.
Rédiger le compte rendu au fur et à mesure du TP en y ajoutant les points qui ontnécessité une aide même s'ils sont hors sujet.
Ecriture des sous programmes utilitaires élémentaires.
1) Ecrire le sous programme d'initialisation de l'interface série
Définition de INISCI- entrée : sans- sortie : sans- format des données : 8 bits, 1 stop, pas de bit de parité.- vitesse : 9600 bauds.- On suppose que l'on a un quartz 8 MHz. On met SCP1 et SCP0 sur 1(division par 13).- On met en route l'émetteur et le récepteur et on programme le BAUD register.
2) Ecrire le sous programme d'envoi d'un caractère sur la voie série
Définition de EMICAR- entrée : registre B ( caractère à envoyer)- sortie : registre A (contient SCSR)
Algorithme :Attendre que TDRE =1 (transmit data register empty)Envoyer BFin de sous programme
3) Ecrire le sous programme de réception d'un caractère sur la voie série
Définition de RECCAR- entrée : sans- sortie :
- registre B (caractère reçu)- registre A (SCSR)
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 64
Algorithme :attendre que RDRF=1 (read register full)lire le caractère reçu dans Bfin de sous programme
4) Ecrire le sous programme de temporisation.
Définition de TEMPO- entrée : registre Y- sortie : sans
Algorithme :tant que Y est positif
décrémenter Yinstructions bidon pour mettre la boucle a 10 cycles machines
fin de tant quefin de sous programme
Emission
En manipulation avec M11 on utilisera un talker du type X (cavalier présent entre RXDet XIRQ).
Les programmes doivent être tapés sans oublier les commentaires et en particulier ladéfinition des entrées sorties.
Test élémentaire (test partie émission)
Définition de TSTSERI
Algorithme :* initialisations d'usage (on pourrait s'en passer ds un premier temps si on
travaille à la même vitesse que M11)* faire toujours
Envoi de "A" sur la voie sérietempo de 10 ms
* fin de faire* s'arrêter
5) Calculer la durée d'un bit à 1200 bauds.
6) Mettre l'oscilloscope à mémoire sur la voie série, réaliser une acquisition.
7) Identifier les bits de start et de stop, le caractère envoyé. Les données sont ellesen logique positive ?
8) A votre avis, à quoi sert la tempo ? Si vous ne voyez pas, enlevez-la, et refaites unrelevé à l'oscilloscope.
9) Quitter M11 sans arrêter le programme et utiliser le programme SERIGZ.EXE (menulecture seule -> écran)
10) Qu'observez vous ? S'il y a des surcharges permanentes, allonger la tempo entredeux caractères et recommencer.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 65
Remarque : on peut enlever le cavalier sur XIRQ pendant cette expérimentation pouréviter que le talker qui surveille la liaison série n'interrompe votre programme et le remettresi on veut reprendre la main avec M11.
11) Refaire la question précédente en lançant directement votre programme en $B600par un BREAK sur la liaison série sans la présence du talker de M11.
Emission d'un message avec terminateur (de message) $00
Définition du programme principalentrée : MESS (message à émettre)sortie : sansMESS est une constante définie de la manière suivante :MESS FCC "Bon courage pour le concours"FCB $00 ( valeur $00 qui n'est pas un code ASCII )
Ce programme doit permettre d'envoyer le message ci-dessus sur la SCI.
Algorithme :Initialisation de SPAppel de INISCIInitialisation du pointeur de message (par exemple X)Faire
FaireAppel de EMICARtempo 10ms environ (selon la rapidité de votre PC)pointer le car suivant
tant que ( car à envoyer différent de 0 )tempo longue 100ms environ
toujoursFin de programme
Remarque : On n'envoie pas le terminateur $00
12) Ecrire et faire fonctionner le programme. Précisez comment vous vérifier que votreprogramme fonctionne ?
13) Transformer ce programme en sous programme (nommé puts) d'émission d'uneligne (message possédant un terminateur NULL). L'entrée étant X @ du début dumessage.
Emission et réception ( communication avec un terminal )
Remarque : un terminal est une machine qui envoie sur son port série tout ce qui esttapé au clavier et affiche à l'écran ce qui est reçu sur le port série. Sauf rebouclage desbroches RD et TD, il n'y a donc pas d'action clavier -> écran.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 66
On déclare :entrée : MESS (message à émettre)sortie : sans
MESS est une constante définie de la manière suivante :MESS1 FCC "Appuyer sur une touche"CRLF FCB $0D
FCB $0AFCB $00 ( valeur $00 qui n'est pas un code ASCII )
MESS2 FCC "La touche est : "FCB $00 ( valeur $00 qui n'est pas un code ASCII )
Définition du programme principal ( SERIGZ.EXE fonctionne ici en mode terminal ).
Cette fois, l'algorithme n'est pas donné. Description de la tâche :
Le programme affiche sur le terminal : "Appuyer sur une touche" puis attend.
Quand le terminal envoie un octet, votre programme répond "La touche est : X" Xétant l'octet reçu qui est donc retourné en écho au terminal en plus des messages fixes.
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 67
IUFM de TOULOUSE Département ElectroniqueDécodeur de codes à barres
Page : 68
110 Start 101 Stop2/5 5B1 2 3 4 000 Start 001 Stop1 2 3 6 1 2/5 3B 100stop
0000start 98765432