Bibliothèque de fonctions – SCI - HyperTerminal - NumEctron

Transcription

Bibliothèque de fonctions – SCI - HyperTerminal - NumEctron
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
Bibliothèque de fonctions paramétrables en langage C
Module SCI (Serial Peripheral Interface Module)
HyperTerminal de windows
Microcontrôleur HC08
Nabil Al-HOSSRI, département GEII IUT Bordeaux1
E-mail: [email protected]
Cette bibliothèque est présentée, ci-dessous, sous forme d’un fichier en-tête structuré. Pour
mieux la comprendre, aller voir la liaison série en cliquant ici
tête ici
et la structure d’un fichier en-
.
/* Fichier en-tête : SCI_terminal.h
Créé en 2006 pour le site NumEctron et mis à jour en avril 2009
Home: http://nalhossri.free.fr
e-mail: [email protected] et [email protected]
Copyright (c) N. AL HOSSRI IUT GEII Bordeaux
All rights reserved
Do not modify!
*/
//==================================================================
#ifndef SCI_TERMINAL_H
#define SCI_TERMINAL_H
//facultatif (mais il faut faire attention de ne pas inclure
//le même .h plus d'une fois dans un projet).
/**************************************************************************************
Module SCI (Serial Peripheral Interface Module)
Microcontrôleur MC68HC908GP32
C'est une bibliothèque qui rassemble des fonctions et des routines d'initialisation, en mode duplex, du port
SCI du micro type HC08. Elle permet de gérer un dialogue entre le microcontrôleur et HyperTerminal de
WINDOWS.
**************************************************************************************/
//Déclarations de quelques macro-commandes utiles pour gérer HyperTerminal
#define
#define
#define
#define
#define
#define
#define
#define
#define
SOH
BS
HT
BELL
LF
VT
FF
CR
SP
0x02
0x08
0x09
0x07
0x0A
0x0B
0x0C
0x0D
0x20
//
//
//
//
//
//
//
//
//
SOH =0x02: Start of heading:
BS =0x08: Backspace:
HT =0x09: Horizontal tab:
BELL=0x07: BELL:
LF =0x0A: Line feed:
VT =0x0B: Vertical tab:
FF =0x0C: Form feed:
CR =0x0D: Carriage return:
SP =0x20: Space:
début d'entête
retour arrière
tabulation horizontale
sonnerie
interligne
tabulation verticale
page suivante
retour en début de ligne
espacement
_____________________________________________________________________________________ 1
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
/*************************************************************************************/
typedef unsigned char byte;
//facultative pour CODE WARRIOR.
typedef unsigned int word;
//facultative pour CODE WARRIOR.
typedef unsigned long dword;
//facultative pour CODE WARRIOR.
/*************************************************************************************/
/* Déclaration des fonctions élaborées */
//Fonctions d'initialisation
void init_sci(void);
void inter_transmit(byte inter);
void interrupt it_sci_transmit();
void inter_receive();
void interrupt it_sci_receive();
//Fonctions d'Affichage
void envoi_car(byte car);
void envoi_txt(byte *chaine);
void envoi_sonnerie(word nombre_sonnerie);
void envoi_espace(word nombre_espace);
void retour_arriere(word nombre);
void retour_ligne(void);
void ligne_suivante(void);
void page_suivante(void);
void debut_entete(void);
byte recu_car(void);
/*Fonctions additionnelles permettant de gérer les différentes conversions HEXA/ASCII, FLOAT/ASCII..., et
affichage sur HyperTerminal de Windows: */
void envoi_base(dword hexa, byte base);
void envoi_float(float data, byte decimale);
void envoi_CAN(byte CAN, byte decimal);
void envoi_heure(byte heures, byte minutes, byte secondes);
//*************************************************************************************
/* Constante utile pour la conversion HEXA/ASCII. Elle contient les codes ascii des caractères de 0 à F. ex:
h[12]=code ascii (0x43) du caractère C. */
byte *h="0123456789ABCDEF";
/*************************************************************************************/
/* Brochage entre PC et micro */
_____________________________________________________________________________________ 2
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
Micro
Adaptation
PC
" 1 " logique = 5v
" 0 " logique = 0v
+5v < > - 12v
0v < > +12v
" 1 " logique = - 12v
" 0 " logique = +12v
J3
Tx
PTE0
10
9
PTE1
T2IN
T2OUT
7
R2IN
8
R2OUT
Tx
Rx
Rx
Masse
Masse
1
6
2
7
3
8
4
9
5
CONN-D9M
MC68HC908GP32
MAX232
Connecteur mâle
Figure 1 Voir explication au lien liaison série.
/**************************************************************************************
void init_sci(void)
Initialise le module SCI du micro HC08 en mode Duplex (transmission et réception):




sans traitement des erreurs
sans le bit de parité.
vitesse 9600 Bauds.
le module SCI utilise la fréquence des bus internes.
Vous trouvez des informations sur ce module SCI, avec un exemple de programmation en assembleur, à
l’adresse :
http://www.68hc08.net/modules/smartsection/item.php?itemid=77
**************************************************************************************/
void init_sci(void){
CONFIG2 = 0x01;
SCC1 = 0x40;
}
SCC2 = 0x0C;
SCC3 = 0x00;
SCBR = 0x20;
//SCIBDSRC=1: SCI utilise la fréquence des bus internes.
//ENSCI=1, M=0, PEN=0 et PTY=0: active le port SCI,
//longueur des caractères 8 Bits et sans parité.
//active l'émission et la réception sans interruption.
//pas d'erreurs.
//vitesse 9600 Bauds.
/**************************************************************************************
void inter_transmit(byte inter)
Autorise ou inhibe l'interruption de transmission.
Paramètre
inter = 1: autorisée ; inter = 0: non autorisée.
**************************************************************************************/
_____________________________________________________________________________________ 3
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
void inter_transmit(byte inter){
}
switch(inter){
case 0:
SCC2_SCTIE=0;
break;
case 1:
SCC2_SCTIE=1;
break;
default:
break;
};
/**************************************************************************************
void interrupt it_sci_transmit()
Sous-programme de traitement de l'interruption de transmission auquel j’ai affecté le nom it_sci_transmit().
Il est à élaborer par vos soins selon l'application souhaitée.
Il serait sollicité à la monté à 1 du bit SCS1_SCTE indiquant ainsi que le registre de l'émission SCDR est
transféré vers le registre à décalage de transmission.
Il est sollicité à condition que l'adresse de début de sous programme it_sci_transmit() soit déclaré, par
l'intermédiaire du compilateur utilisé, au vecteur d'adresse 0xFFF2.
Lorsqu'il s'agit de CODE WARRIOR, il suffit de valider la ligne (en enlevant le signe de commentaires "//"):
//VECTOR ADDRESS 0xFFE2 it_sci_transmit
qui se trouve dans le fichier project.prm. Pour plus d'information cliquer ici
.
**************************************************************************************/
void interrupt it_sci_transmit(){
byte raz_SCS1;
raz_SCS1=SCS1;
//Ecrire les codes ici
//...
//lecture pour effacer le registre des indicateurs SCS1
}
/**************************************************************************************
void inter_receive(byte inter)
Autorise ou inhibe l'interruption de réception.
Paramètre
inter = 1: autorisée ; inter = 0: non autorisée.
**************************************************************************************/
void inter_receive(byte inter){
switch(inter){
case 0:
SCC2_SCRIE=0;
_____________________________________________________________________________________ 4
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
case 1:
break;
SCC2_SCRIE=1;
break;
default:
break;
};
}
/**************************************************************************************
void interrupt it_sci_receive()
Sous-programme de traitement de l'interruption de réception auquel j'ai affecté le nom it_sci_receive(). Il
est à élaborer par vos soins selon l'application souhaitée.
Il serait sollicité à la monté à 1 du bit SCS1_SCRF indiquant ainsi que la donnée reçue est prête dans le
registre SCDR.
Il est sollicité à condition que l'adresse de début de sous programme [it_sci_receive ()] soit déclaré, par
l'intermédiaire du compilateur utilisé, au vecteur d'adresse 0xFFE4.
Lorsqu'il s'agit de CODE WARRIOR, il suffit de valider la ligne (en enlevant le signe de commentaires "//"):
//VECTOR ADDRESS 0xFFE4 it_sci_receive
qui se trouve dans le fichier project.prm. Pour plus d'information cliquer ici
.
*************************************************************************************/
void interrupt it_sci_receive(){
byte raz_SCS1;
raz_SCS1=SCS1;
//Ecrire les codes ici :
//...
//lecture pour effacer le registre SCS1 des indicateurs
}
/**************************************************************************************
void envoi_txt(byte *chaine)
Envoi un texte, stocké dans la mémoire Flash du micro, à HyperTerminal.
Option
\r inséré dans le texte provoque le retour au début de la ligne suivante.
**************************************************************************************/
void envoi_txt(byte *chaine){
while(*chaine!='\0'){
while(SCS1_SCTE!=1);
if(*chaine=='\r')
ligne_suivante();
else
//attente pour que le registre SCDR soit disponible:
//SCTE monte à 1 lorsque le registre SCDR d'émission est
//transféré vers le registre à décalage. Il tombe
//automatiquement à 0.
_____________________________________________________________________________________ 5
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
}
};
SCDR = *chaine;
chaine++;
/**************************************************************************************
byte recu_car(void)
Reçoit un caractère d'HyperTerminal.
**************************************************************************************/
byte recu_car(void){
}
while(SCS1_SCRF!=1);
return SCDR;
//attente: SCRF=1 donnée prête.
/**************************************************************************************
void envoi_car(byte car)
Envoi d'un caractère à HyperTerminal.
**************************************************************************************/
void envoi_car(byte car){
while(SCS1_SCTE!=1);
SCDR=car;
}
/**************************************************************************************
void envoi_sonnerie(word nombre_sonnerie)
Envoi des Bips à HyperTerminal.
**************************************************************************************/
void envoi_sonnerie(word nombre_sonnerie){
}
word i;
for(i=0; i < nombre_sonnerie; i++)
envoi_car(BELL);
//BELL=0x07: sonnerie.
/**************************************************************************************
void envoi_espace(word nombre_espace)
Envoi des espacements.
**************************************************************************************/
void envoi_espace(word nombre_espace){
}
word i;
for(i=0;i< nombre_espace;i++)
envoi_car(SP);
//SP=0x20: Space: espacement.
/**************************************************************************************
void retour_arriere(word nombre)
Envoi des retours arrière du curseur à HyperTerminal.
_____________________________________________________________________________________ 6
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
**************************************************************************************/
void retour_arriere(word nombre){
}
word i;
for(i=0;i< nombre;i++)
envoi_car(BS);
//BS=0x08: Backspace: retour arrière.
/**************************************************************************************
void ligne_suivante(void)
HyperTerminal passe à la ligne suivante et positionne le curseur au début.
**************************************************************************************/
void ligne_suivante(void){
envoi_car(LF);
//LF=0x0A: Line feed: interligne.
envoi_car(CR);
//CR=0x0D: Carriage return: retour en début de ligne.
}
/**************************************************************************************
void page_suivante(void)
HyperTerminal passe à une nouvelle page.
**************************************************************************************/
void page_suivante(void){
envoi_car(FF);
//FF=0x0C: Form feed: page suivante.
}
/**************************************************************************************
void debut_entete(void)
Début d'en-tête d'HyperTerminal.
**************************************************************************************/
void debut_entete(void){
}
envoi_car(SOH);
//SOH=0x02: Start of heading: début d'en-tête.
/**************************************************************************************
void retour_ligne(void)
Retour d'HyperTerminal en début de ligne.
**************************************************************************************/
void retour_ligne(void){
}
envoi_car(CR);
//CR=0x0D: Carriage return: retour en début de ligne
/**************************************************************************************
void envoi_base(dword hexa, byte base, byte entier)
Affiche, sur HyperTerminal, hexa en base : 2 (binaire) <= base <= 16 (hexadécimale). Les zéros à gauche
sont retirés.
L'affichage est limité à des valeurs entières positives comprises entre 0 et 2^32=4294967295 du fait que
hexa soit du type dword. Cependant cette limite est contournable en changeant le type de hexa, mais à mon
_____________________________________________________________________________________ 7
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
avis celle-ci est suffisante dans la majorité des applications.
Paramètres
base : au choix de 2 à 16,
**************************************************************************************/
void envoi_base(dword hexa, byte base){
byte i=0;
static byte buf[32];
//compteur.
//buffer de stockage; static car il est appelé de la fonction
//envoi_float juste après.
/* remplit buf[i] par le code ascii du résultat de l'opération (hexa%base) (cf constante *h déclarée en entête). */
do{
buf[i]=h[hexa%base];
//conversion Hexa/ASCII de la fin vers le début.
hexa=hexa/base;
i++;
}while(hexa);
/* affiche le contenu du buffer buf[i], de la fin vers le début et caractère par caractère, directement dans la
RAM d’HyperTerminal. */
do{
i--;
envoi_car(buf[i]);
} while(i>0);
}
/**************************************************************************************
void envoi_float(float data, byte decimal)
Convertit, arrondit et affiche, à la position du curseur, data (type float 32 bits) au format décimal avec 1 à 6
décimales.
decimal: nombre de chiffres décimaux souhaités après la virgule. Il doit satisfaire:
0 <= decimal <= 6, decimal=0: n'affiche que la partie entière de data.
**************************************************************************************/
void envoi_float(float data, byte decimal){
byte i;
dword dec, dec10=10;
if(data<0){
envoi_car('-');
data*=-1;
}
for(i=0; i< decimal; i++)
dec10*=10;
//si data est négatif affiche '-'.
//data est rendu positif.
//dec10=10^(decimal+1).
dec=dec10*(data-(dword)data);
//partie décimale, à (decimal+1) chiffres, est rangé dans dec,
if(dec%10>=5)
dec+=10;
//puis arrondis à la valeur supérieure.
if(dec > dec10-1){
//si Overflow,
_____________________________________________________________________________________ 8
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
}
data +=1;
dec=0;
//ajoute 1 à la partie entière,
//et la partie décimale est mise à 0.
envoi_base(data, 10);
//tronque data et affiche la partie entière.
if(decimal !=0){
envoi_car('.');
dec10/=100;
dec=dec/10;
//dec10=10^(decimal-1).
//dec est à decimal chiffres.
while(dec/dec10==0 && decimal>1){
envoi_car('0');
//affiche les éventuels zéros à gauche de la partie décimale.
dec10/=10;
decimal--;
}
}
}
envoi_base(dec, 10);
//affiche le reste de la partie décimale.
/**************************************************************************************
void envoi_CAN(byte CAN, byte decimal)
Le résultat de la conversion A/N (8 bit) issu du CAN du micro, est converti en volts et envoyé à
HyperTerminal de windows.
decimal <=7: le nombre de chiffres souhaité de la partie décimale.
**************************************************************************************/
void envoi_CAN(byte CAN, byte decimal){
envoi_float(5.0*CAN/255, decimal);
envoi_txt(" V");
}
/**************************************************************************************
void envoi_heure(byte heures, byte minutes, byte secondes)
Envoie, à la position du curseur, l'heure sous la forme HH:MM:SS.
**************************************************************************************/
void envoi_heure(byte heures, byte minutes,byte secondes){
}
if(heures<10)
envoi_car('0');
envoi_base(heures, 10);
envoi_car(':');
if(minutes<10)
envoi_car('0');
envoi_base(minutes, 10);
envoi_car(':');
if(secondes<10)
envoi_car('0');
envoi_base(secondes, 10);
//insertion de 0 à gauche.
//insertion ':'.
//insertion ':'.
//*************************************************************************************
_____________________________________________________________________________________ 9
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI
numEctron
http://nalhossri.free.fr
_______________________________________________________________________________________
#endif
/************************************** FIN ******************************************/
Cette bibliothèque, sous forme d'un fichier en-tête "SCI_terminal.h" est téléchargeable :
ici
Rendez vous à la maison bleue
_____________________________________________________________________________________ 10
Bibliothèque de fonctions – SCI - HyperTerminal
Nabil AL HOSSRI

Documents pareils