您好,欢迎访问三七文档
当前位置:首页 > 电子/通信 > 综合/其它 > 51串口发送和接收程序
/*********************************************************************文件名:串口发送试验.c*描述:该文件实现通过串口把数据从单片机发送到电脑,通过串口调试助手显示出来。***********************************************************************/#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedint/*********************************************************************名称:Com_Init()*功能:初始化串口程序,晶振11.0592,波特率9600*输入:无*输出:无***********************************************************************/voidCom_Init(void){TMOD=0x20;PCON=0x00;SCON=0x50;TH1=0xFd;TL1=0xFd;TR1=1;}/*********************************************************************名称:Main()*功能:主函数*输入:无*输出:无***********************************************************************/voidMain(){uchari=0;ucharcodeBuffer[]=当前时间;//所要发送的数据uchar*p;Com_Init();P2=0x00;p=Buffer;while(1){SBUF=*p;while(!TI)//如果发送完毕,硬件会置位TI{_nop_();}p++;if(*p=='\0')break;//在每个字符串的最后,会有一个'\0'TI=0;//TI清零}while(1);}/*********************************************************************文件名:串口接收试验.c*描述:该文件实现通过单片机从电脑接收数据。通过数码管显示该试验使用的晶振是11.0592,如果使用12M晶振,会出现串口接收不正常的情况。原因是用12M晶振,波特率9600时的误差率达8%当下载这个程序到单片机时,单片机的最高为为乱码,是正常现象,按一下复位键便可。是由于单片机下载也是通过串口下载引起的。***********************************************************************/#includereg52.h#includeintrins.h#defineucharunsignedchar#defineuintunsignedintucharcodetable[10]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};ucharLED_Buffer[8]={0};//从串口接收的数据/*********************************************************************名称:Delay_1ms()*功能:延时子程序,延时时间为1ms*x*输入:x(延时一毫秒的个数)*输出:无***********************************************************************/voidDelay_1ms(uinti)//1ms延时{ucharx,j;for(j=0;ji;j++)for(x=0;x=148;x++);}/*********************************************************************名称:Com_Int()*功能:串口中断子函数*输入:无*输出:无***********************************************************************/voidCom_Int(void)interrupt4{staticuchari=7;//定义为静态变量,当重新进入这个子函数时i的值不会发生改变EA=0;if(RI==1)//当硬件接收到一个数据时,RI会置位{LED_Buffer[i]=SBUF-48;//这里减去48是因为从电脑中发送过来的数据是ASCII码。RI=0;if(i==0)i=8;i--;}EA=1;}/*********************************************************************名称:Com_Init()*功能:串口初始化,晶振11.0592,波特率9600,使能了串口中断*输入:无*输出:无***********************************************************************/voidCom_Init(void){TMOD=0x20;PCON=0x00;SCON=0x50;TH1=0xFd;//设置波特率9600TL1=0xFd;TR1=1;//启动定时器1ES=1;//开串口中断EA=1;//开总中断}/*********************************************************************名称:Main()*功能:主函数*输入:无*输出:无***********************************************************************/voidMain(){uchari=0;Delay_1ms(100);Com_Init();P2=0x80;//这里把P2口的最高为置1,进入循环后循环左移一位正好是P2最低为置1while(1){P0=table[LED_Buffer[i]];P2=i++;Delay_1ms(1);if(i==8)i=0;}}
本文标题:51串口发送和接收程序
链接地址:https://www.777doc.com/doc-6874922 .html