关于51的串口处理程序之方案一.docx
- 文档编号:3041664
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:8
- 大小:17.31KB
关于51的串口处理程序之方案一.docx
《关于51的串口处理程序之方案一.docx》由会员分享,可在线阅读,更多相关《关于51的串口处理程序之方案一.docx(8页珍藏版)》请在冰豆网上搜索。
关于51的串口处理程序之方案一
关于51的串口处理程序之方案一
//来源于网络,经过调试成功运行
//优点是在中断内做的事情很少,对程序的实时性影响很小
//实际应用中,有部分函数可以不用
#include
#defineucharunsignedchar
#defineuint unsignedint
#defineOLEN 255 /*sizeofserialtransmissionbuffer*/
ucharxdata outbuf[OLEN]; /*storagefortransmissionbuffer*/
ucharxdata outlast=0; //最后由中断传输出去的字节位置
ucharxdata putlast=0; //最后放入发送缓冲区的字节位置
#defineILEN255 /*sizeofserialreceivingbuffer*/
ucharxdatainbuf[ILEN];
ucharxdatainlast =0; //最后由中断进入接收缓冲区的字节位置unsigned
ucharxdatagetlast=0; //最后取走的字节位置
bitoutbufsign; //输出缓冲区非空标志有=1
bitinbufsign; //接收缓冲区非空标志有=1
bitinbufful; //输入缓冲区满标志满=1
#defineCRputstring("\r\n") //CR=回车换行
uchar getbyte(void); //从接收缓冲区取一个byte,如不想等待则在调用前检测inbufsign是否为1。
void getline(uchar*return_line,ucharidatan);
//获取一行数据回车结束,已处理backspce和delete,必须定义最大输入字符数
void putinbuf(ucharidatac); //模拟接收到一个数据
void putbyte(ucharidatac); //放入一个字节到发送缓冲区
void putbytes(uchar*outplace,ucharidataj);
//放一串数据到发送缓冲区,自定义长度
void putstring(uchar *puts); //发送一个字符串到串口
void puthex(ucharidatac); //发送一个字节的hex码,分成两个字节发。
void putchar(ucharidatac,ucharidataj); //发送一个字节数据的asc码表达方式,需要定义小数点的位置
void putint(uintidataui,ucharidataj); //发送一个整型数据的asc码表达方式,需要定义小数点的位置
//CR;发送一个回车换行
ucharcodehex_[]={"0123456789ABCDEF"};
//*************************************************************************
//放入一个字节到发送缓冲区
void putbyte(ucharidatac)
{
uchari,j;
ES=0; /*暂停串行中断,以免数据比较时出错*/
if(outlast==putlast)
{
i=(0-TH1);
do
{
i--;
j=36;
do
{
j--;
}
while(j!
=0);
}
while(i!
=0);
//延时一个字节发送时间
}
outbuf[putlast]=c;//放字节进入缓冲区
putlast++; //发送缓冲区指针加一
if(putlast==OLEN) //指针到了顶部
{
putlast=0; //指针到了顶部换到底部
}
if(!
outbufsign)
{
outbufsign=1;
// TI=1;
} //缓冲区开始为空置为有,启动发送
while(outbufsign)//
{
if(putlast==outlast)
{
outbufsign=0;//
}
else
{
SBUF=outbuf[outlast]; //未发送完继续发送
while(TI==0);
TI=0;
outlast++; //最后传出去的字节位置加一
if(outlast==OLEN)
{
outlast=0; //地址到顶部回到底部
}
if(putlast==outlast)
{
outbufsign=0;//数据发送完置发送缓冲区空标志
}
}
}
ES=1;
}
//******************************//放一串数据到发送缓冲区
void putbytes(uchar*outplace,ucharidataj)
{
intidatai;
for(i=0;i { putbyte(*outplace); outplace++; } } //****************************** //putchar(ucharc,ucharj);发送一个字节数据的asc码表达方式,需要定义小数点的位置 void putchar(ucharidatac,ucharidataj) { uchar idatafree[4]; uchardatai; i=0; free[i++]=(c/100+0x30); //百位 if(j==3) { free[i++]='.'; } free[i++]=(c%100)/10+0x30; //十位 if(j==2) { free[i++]='.'; } if(j==2&&free[i-3]==0x30) { free[i-3]=0x20; } free[i++]=(c%10)+0x30; //个位 if(j==1&&free[i-3]==0x30) { free[i-3]=0x20; } if(j==1&&free[i-3]==0x20&&free[i-2]==0x30) { free[i-2]=0x20; } putbytes(free,i); } //****************************** //putint(uintui,ucharj);发送一个整型数据的asc码表达方式,需要定义小数点的位置 void putint(uintidataui,ucharidataj) { ucharidatafree[6]; uchardatai; i=0; free[i++]=(ui/10000+0x30); if(j==5) { free[i++]='.'; } free[i++]=((ui%10000)/1000+0x30); if(j==4) { free[i++]='.'; } if(j==4&&free[i-3]==0x30) { free[i-3]=0x20; } free[i++]=((ui%1000)/100+0x30); if(j==3) { free[i++]='.'; } if(j==3&&free[i-4]==0x30) { free[i-4]=0x20; } if(j==3&&free[i-4]==0x20&&free[i-3]==0x30) { free[i-3]=0x20; } free[i++]=((ui%100)/10+0x30); if(j==2) { free[i++]='.'; } if(j==2&&free[i-5]==0x30) { free[i-5]=0x20; } if(j==2&&free[i-5]==0x20&& free[i-4]==0x30) { free[i-4]=0x20; } if(j==2&&free[i-5]==0x20&& free[i-4]==0x20&&free[i-3]==0x30) { free[i-3]=0x20; } free[i++]=(ui%10+0x30); if(j==1&&free[i-5]==0x30) { free[i-5]=0x20; } if(j==1&&free[i-5]==0x20&& free[i-4]==0x30) { free[i-4]=0
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 关于 51 串口 处理 程序 方案
![提示](https://static.bdocx.com/images/bang_tan.gif)