7.3. Communications série d'échantillonnage (sondage)
Exemple de communication série à l'aide de la méthode d'échantillonnage (interrogation):
/************************************************* *********
Exemple d'un programme de transmission de données par
port série RS-232, l'échantillonnage d'exploitation (de vote).
Pour la Keil C51 compilateur C et les microcontrôleurs
8051.
Description: Un programme qui donne un caractère a, b, c.. dans
minuscules ou en majuscules à 0 ou 1 bits
port P1.
Auteur: Rafael Aranda
Date: 11/20/2009
Version: 1.0
************************************************** ********/
# Inclure <reg52.h> / / Inclure les domaines génériques de 8052
/ / Définit la position du bit P1, microcontrôleur 8051
SBIT Led_0 = P1 ^ 0; / / Assigne la P1.0 bits symbole Led_0
SBIT LED_1 = ^ P1 1; / / Assigne le symbole LED_1 bits P1.1
SBIT LED_2 = P1 ^ 2 / / Assigne la P1.2 bits symbole LED_2
SBIT Led_3 = P1 ^ 3; / / Assigne le symbole bit P1.3 Led_3
SBIT Led_4 = P1 ^ 4; / / Assigne la P1.4 bits symbole Led_4
SBIT Led_5 = P1 ^ 5; / / Assigne la P1.5 symbole Led_5 bits
SBIT Led_6 = P1 ^ 6; / / Assigne le symbole Led_6 bits P1.6
SBIT Led_7 ^ = P1 7; / / Assigne le symbole Led_7 bits P1.7
/ / Déclaration des fonctions prototypes
void InitSerial (void) / / Démarre le port série
void RecDat (void) / / Fonction Recevoir des données
/ / Déclaration de variable globale
//------------------------------------------------ ----------
/ / Programme principal
//------------------------------------------------ ----------
void main (void) {
/ / Force la préparation initiale
P1 = 0, / / Mettez tous les bits de P1 à 0
InitSerial (); / / Commencer communications
/ / Corps du programme dans une boucle infinie
while (1) {
/ / Affiche le RI jusqu'à l'arrivée d'un nouveau Byte
if (RI) {
RecDat ();
}
}
}
//------------------------------------------------ ----------
/ / Fonction Recevoir des données
//------------------------------------------------ ----------
void RecDat (void) {
unsigned char dat;
RI = 0, / / Clear reçoivent un drapeau
dat = SBUF; / / Récupération de l'octet de mémoire tampon de réception
SBUF = dat; / / Echo des données reçues
/ / Analyser les données reçues et en fonction de la nature
/ / Mettre à 0 ou 1 du bit correspondant
switch (dat) {
/ / Port Zero 1 bits
cas 'a':
Led_0 = 0, / / Bit P1.0 à 0
break;
case 'b':
LED_1 = 0, / / Bit P1.1 à 0
break;
case 'c':
LED_2 = 0, / / Bit P1.2 à 0
break;
cas «d»:
Led_3 = 0, / / Bit P1.3 à 0
break;
cas «e»:
Led_4 = 0, / / Bit P1.4 à 0
break;
case 'f':
Led_5 = 0, / / Bit P1.5 à 0
break;
cas «g»:
Led_6 = 0, / / Bit P1.6 à 0
break;
case 'h':
Led_7 = 0, / / Bit P1.7 à 0
break;
/ / Faire un port 1 bits
cas «A»:
Led_0 = 1, / / Bit P1.0 à 1
break;
cas «B»:
LED_1 = 1, / / Bit P1.1 à 1
break;
cas «C»:
LED_2 = 1, / / Bit P1.2 à 1
break;
cas «D»:
Led_3 = 1, / / Bit P1.3 à 1
break;
cas «E»:
Led_4 = 1, / / Bit P1.4 à 1
break;
case 'F':
Led_5 = 1, / / Bit P1.5 à 1
break;
cas de «G»:
Led_6 = 1, / / Bit P1.6 à 1
break;
cas de «H»:
Led_7 = 1, / / Bit P1.7 à 1
break;
}
}
//------------------------------------------------ ----------
/ / Démarre le port série
//------------------------------------------------ ----------
void InitSerial (void) {
TMOD | = 0x20 / / Timer 1 en mode 2 (rechargement automatique)
TL1 = 0xFD / / un débit de 9600
TH1 = 0xFD;
SCON = 0x50, / / Setup UART mode 2
TR1 = 1, / / Start Timer1 et UART
}