User: alciro    User
 

Microcontroladores 8051

Share |

7.3. Comunicaciones serie por muestreo (polling)

Ejemplo de comunicaciones en serie utilizando el método de muestreo (Polling):

/**********************************************************
 Ejemplo de un programa para la transmisión de datos por el
 puerto serie RS-232, operando por muestreo (polling).
 Para el compilador de c keil C51 y los microcontroladores
 8051.

 Descripción: Programa que dado un carácter a,b,c.. en 
 minusculas o mayusculas pone a 0 o a 1 los bits del
 puerto P1.

 Autor: Rafa Aranda
 Fecha: 20-11-2009
 Versión: 1.0
**********************************************************/

#include ‹reg52.h›	// Incluir los registros genéricos del 8052

// Definición de bit del puesto P1, microcontroladores 8051
sbit Led_0 = P1^0;	// Asignación del bit P1.0 al símbolo Led_0
sbit Led_1 = P1^1;	// Asignación del bit P1.1 al símbolo Led_1
sbit Led_2 = P1^2;	// Asignación del bit P1.2 al símbolo Led_2
sbit Led_3 = P1^3;	// Asignación del bit P1.3 al símbolo Led_3
sbit Led_4 = P1^4;	// Asignación del bit P1.4 al símbolo Led_4
sbit Led_5 = P1^5;	// Asignación del bit P1.5 al símbolo Led_5
sbit Led_6 = P1^6;	// Asignación del bit P1.6 al símbolo Led_6
sbit Led_7 = P1^7;	// Asignación del bit P1.7 al símbolo Led_7

// Declaración de las funciones prototipo
void InitSerial(void);		// Iniciar el puerto serie
void RecDat(void);		// Función Recepción de datos

// Declaración de Variables globales


//----------------------------------------------------------
// Programa principal
//----------------------------------------------------------
void main(void){
        
	// Tareas iníciales de preparación
	P1 = 0;		// Poner todos los bits del P1 a 0
	InitSerial();	// Iniciar las comunicaciones
	
	// Cuerpo del programa en un bucle infinito
	while(1){
		// Muestrear el indicador RI hasta la llegada de un nuevo Byte
		if(RI){
			RecDat();
		}
	}
}

//----------------------------------------------------------
// Función Recepción de datos
//----------------------------------------------------------
void RecDat(void){
	unsigned char dat;
	
	RI = 0;		// Borrar el flag de recepción
	dat = SBUF;	// Recuperar el byte del buffer de recepción
	SBUF = dat;	// Hacer eco del dato recibido
	
	// Analizar el dato recibido y en función del carácter
	// poner a 0 o 1 el bit correspondiente
	switch(dat){
		// Poner a cero los bits de puerto 1
		case 'a':
			Led_0 = 0;	//Bit P1.0 a 0
			break;
		case 'b':
			Led_1 = 0;	//Bit P1.1 a 0
			break;
		case 'c':
			Led_2 = 0;	//Bit P1.2 a 0
			break;
		case 'd':
			Led_3 = 0;	//Bit P1.3 a 0
			break;
		case 'e':
			Led_4 = 0;	//Bit P1.4 a 0
			break;
		case 'f':
			Led_5 = 0;	//Bit P1.5 a 0
			break;
		case 'g':
			Led_6 = 0;	//Bit P1.6 a 0
			break;
		case 'h':
			Led_7 = 0;	//Bit P1.7 a 0
			break;
		// Poner a uno los bits de puerto 1
		case 'A':
			Led_0 = 1;	//Bit P1.0 a 1
			break;
		case 'B':
			Led_1 = 1;	//Bit P1.1 a 1
			break;
		case 'C':
			Led_2 = 1;	//Bit P1.2 a 1
			break;
		case 'D':
			Led_3 = 1;	//Bit P1.3 a 1
			break;
		case 'E':
			Led_4 = 1;	//Bit P1.4 a 1
			break;
		case 'F':
			Led_5 = 1;	//Bit P1.5 a 1
			break;
		case 'G':
			Led_6 = 1;	//Bit P1.6 a 1
			break;
		case 'H':
			Led_7 = 1;	//Bit P1.7 a 1
			break;
	}

}

//----------------------------------------------------------
// Iniciar el puerto serie
//----------------------------------------------------------
void InitSerial(void){
	TMOD |= 0x20;	// Timer 1 en modo 2 (auto recarga)
	TL1 = 0xFD;	// Velocidad de 9600 Bauds
	TH1 = 0xFD;
	SCON = 0x50;	// Configuración de la UART en modo 2
	TR1 = 1;	// Arrancar el Timer1 y la UART

}

 

Loading

copyright © 2007-2024  www.alciro.org  All rights reserved.         
Share |