微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51串口 单片机上接收数据程序

51串口 单片机上接收数据程序

时间:11-17 来源:互联网 点击:
#include

#include

#define uchar unsigned char
#define uint unsigned int

//sbit BEEP = P1; // P1接8个LED
unsigned char Receive(void)
{
unsigned char dat;
while(RI==0) //只要接收中断标志位RI没有被置“1” 当接收完毕时,中断标志RI被置1
; //等待,直至接收完毕(RI=1)
RI=0; //为了接收下一帧数据,需将RI清0
dat=SBUF; //将接收缓冲器中的数据存于dat
return dat;
}

void main (void)
{
int i =0;
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式2
TMOD|= 0x20; //定时器1工作方式2
// PCON|= 0x80; //波特率提高一倍
//TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无(11.0592)
TH1 = 0xFD;// //baud /* 波特率9600、数据位8、停止位1。效验位无 (11.0592M)
TL1 = 0xFD;
TR1 = 1; //开启定时器1
//ES = 1; //开串口中断 是否开串口中断和开总中断不影响。
//EA = 1; // 开总中断
// IE = 0x0;
REN=1; //允许接收
while(1)
{
P1=Receive(); //将接收到的数据送P2口显示
}

}

c51串口接收并发送数据程序
2007年11月02日 下午 10:00


#include
#defineBUFFERLEGTH 10
//-----------------------------------------------------------------
void UART_init();//串口初始化函数
void COM_send(void);//串口发送函数
char str[20]="hello\r\n";

//-------------------------------------------------------------------
void main(void)
{
unsigned char i;
UART_init();//初始化串口
for(i = 0;i < 10 ;i++)
{
COM_send();//首先发送一次数据作为测试用

};

while(1);
}

//-------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: UART_init()串口初始化函数
// 函数功能: 在系统时钟为11.059MHZ时,设定串口波特率为9600bit/s
//串口接收中断允许,发送中断禁止
//--------------------------------------------------------------------------------------------------
void UART_init()
{
//初始化串行口和波特率发生器
SCON =0x50;//选择串口工作方式1,打开接收允许
TMOD =0x20;//定时器1工作在方式2,定时器0工作在方式1
TH1 =0xfA;//实现波特率9600(系统时钟11.0592MHZ)
PCON = 0x80;
TR1 =1;//启动定时器T1
ET1 =0;
ES=1;//允许串行口中断
PS=1;//设计串行口中断优先级
EA =1;//单片机中断允许
}
//------------------------------------------------------------
void COM_send(void)
{
unsigned char point = 0;
for(point=0;point< 20;point++)//连续发送二十位数据//把缓存区的数据都发送到串口
{
SBUF=str[point];
while(!TI);
TI=0;
}
}
//--------------------------------------------------------------
//--------------------------------------------------------------------------------------------------
// 函数名称: com_interrup()串口接收中断处理函数
// 函数功能: 接收包括起始位S在内的十位数据到数据缓冲区
//--------------------------------------------------------------------------------------------------
void com_interrupt(void) interrupt 4 using 3
{
unsigned char RECEIVR_buffer;
if(RI)//处理接收中断
{
RI=0;//清除中断标志位
RECEIVR_buffer=SBUF;//接收串口数据

if (RECEIVR_buffer == s)
{
SCON =0x40;//接收不允许
COM_send();//发送数据
SCON =0x50;//接收允许
}
}


Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top