您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 其它行业文档 > 51单片机串口通讯UART头文件的源代码
#includeAT89X52.h#includestdio.h#defineXTAL11059200#definebaudrate9600#defineOLEN8//串行发送缓冲区大小unsignedcharostart;//发送缓冲区起始索引unsignedcharoend;//发送缓冲区结束索引charidataoutbuf[OLEN];//发送缓冲区存储数组#defineILEN8//串行接收缓冲区大小unsignedcharistart;//接受缓冲区起始索引unsignedchariend;//接收缓冲区结束索引charidatainbuf[ILEN];//接收缓冲区存储数组bitbdatasendfull;//发送缓冲区满标志bitbdatasendactive;//发送有效标志/*串行中断服务程序*/staticvoidcom_isr(void)interrupt4using1{//----------接收数据---------------charc;if(RI)//接收中断置位{c=SBUF;//读字符RI=0;//清接收中端标志if(istart+ILEN!=iend)inbuf[iend++&(ILEN-1)]=c;//缓冲区接收数据}//------------发送数据------if(TI){TI=0;//清发送中断标志if(ostart!=oend){SBUF=outbuf[ostart++&(OLEN-1)];//向发送缓冲区传送标志sendfull=0;//设置缓冲区满标志位}elsesendactive=0;//设置发送无效}}//PUTBUF:写字符到SBUF或发送缓冲区voidputbuf(charc){if(!sendfull)//如果缓冲区不满就发送{if(!sendactive){sendactive=1;//直接发送一个字符SBUF=c;//写到SBUF启动缓冲区}else{ES=0;//暂时串行口关闭中断outbuf[oend++&(OLEN-1)]=c;//向发送缓冲区传送文字if(((oend^ostart)&(OLEN-1))==0)sendfull=1;//设置缓冲区满标志ES=1;//打开串口行中断}}}//替换标准库函数putchar程序//printf函数使用putchar输出一个字符charputchar(charc){if(c=='\n')//增加新的行{while(sendfull);//等待发送缓冲区空putbuf(0x0D);//对新行在LF前发送CR}while(sendfull);putbuf(c);return(c);}//替换标准库函数_getkey程序//getchar和gets函数使用_getkeychar_getkey(void){charc;while(iend==istart)//判断接收缓冲区起始索引是否等于接收区结束索引{;}ES=0;c=inbuf[istart++&(ILEN-1)];ES=1;return(c);}/*初始化串行口和UART波特率函数*/voidcom_initialize(void){TMOD|=0x20;//设置定时器1工作在方式2,自动重载模式SCON=0x50;//设置串口行工作方式1,即SM0=0,SM1=1,REN=1TH1=0xfd;//波特率9600TL1=0xfd;TR1=1;//启动定时器ES=1;//开串口行中断,见表6-2}voiduart_Init(){com_initialize();EA=1;//开总中断,见表6-2}
本文标题:51单片机串口通讯UART头文件的源代码
链接地址:https://www.777doc.com/doc-2402416 .html