×
单片机 > 单片机程序设计 > 详情

51单片机———串口通讯的疑惑

发布时间:2020-08-24 发布时间:
|
/*程序的功能是在T1定时器工作方式2下使用串口工作方式1实现串口通讯,
	即PC机发送一串数据,51单片机将数据反馈回来。使用回车符作为一串字符串的结束标志

总结:
	我是参照郭天祥51单片机写的,
	这个程序写得还是有点疑惑,就是下面在接受完数据后
	一定要先将串口中断关闭(即ES = 0),然后再进行处理,
	如果不关闭中断的话,反馈回PC机的数据就是I get\n*/

#include
//#define DEBUG
#define u8 unsigned char
#define u16 unsigned int
#define MAXSIZE 64
u8 code table[] = "I get ";
u8 flag,index,i,Len;

u8 Buff[MAXSIZE];

void Configuration()
{
	TMOD = 0x20;
	TH1 = 0xF3;							//设置波特率为4800
	TL1 = 0xF3;
	TR1 = 1;
	
	SCON = SCON & (0x3<<6);	
	SCON = SCON | (0x01<<6) | (1<<4);	//设置串口工作模式和使能接受
	PCON = PCON | (1<<7);				//设置波特率加倍,即最终的波特率为9600
	
	EA = 1;								//开启中断
	ES = 1;
			
}

void Recieve() interrupt 4
{
	RI = 0;
 	Buff[index++] = SBUF;

	#ifdef DEBUG
	SBUF = Buff[index-1];
	while(!TI);
	TI = 0;
	#endif

	if (Buff[index-1]=='\n' )			//这一串数据结束
	{
		Len = index;
		index = 0;
		flag = 1;	
	}
}

void main()
{
	Configuration();
	while(1)
	{
		if (1==flag)					//判断是否有数据到来
		{
	 	  	ES = 0;						//要关闭中断,否则程序有问题
			for(i=0;i<6;i++)
			{
				SBUF = table[i];
				while(!TI);				//等待数据发送完毕
				TI = 0;
			}
			for(i=0;i


『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
采用AT89C2051的数字可调稳压电源单片机源程序