欢迎来到天天文库
浏览记录
ID:60824679
大小:12.39 KB
页数:3页
时间:2020-12-20
《基于51单片机异步串行通信程序.docx》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、基于51单片机的异步串行通讯1.串行工作方式1,波特率与T1定时器的溢出率有关2.进行中断法的串行通讯#include#defineucharunsignedchar#defineuintunsignedint//------------------宏定义-------------------//ucharcodeprefix[]="Iget";//前缀---字头ucharflag,a_receive,i;/*--------------------------------------------------------------------
2、------------------------------------------------------本程序的思想:一串口通讯方式一进行单片机与上位机(串口调试助手)的实时通讯,反应异步串行通讯特点---------------------A:设置定时器1,形成波特率,进行中断形式的串口通讯---------------------------------------------------------------------B:单片机先发送字头(prefix),接收到调试助手发送来的数据后紧随发送回调试助手------------------------
3、-----------------C:本程序中进入中断是由串行接收中断标志(RI=1单片机接收到一帧数据后由硬件自身引起,后续软件复位,以接收下次中断)-------D:发送完一帧数据,不进入中断程序,(复位发送中断标志,时间较短也不一定能进入中断,可能中断确认不能完成)-----间歇肯定串口中断功能进行避免由发送中断标志引起的串口中断--------------------------------------------------------------------E:主程序中的delay()函数的应用原因,由于所采用的的波特率较低300,所以读取数据较慢,
4、以延时函数等待数据的读取,--读取时,是在T1定时器决定的波特率确定的,来一个周期,读一个位的数据,所以采用延时保证数据可读完。----------------------------F:采用波特率300的原因在于,本设备晶振频率12MHZ,在300波特率时其误差为零。--------------------------------------------G:在上位机中发送字符时,只能发送一个字节的数据,其原因在于,在中断程序中仅进行了一次读的操作,即只读到一个字节的数据----------------------------------------------
5、-----------------------------------------------------------------//-------------------------------------------------------------------------------------------------------------------*/voidinit_timer1(){TMOD=0X20;TH1=TL1=0X98;TR1=1;}//---------------定时器设置------------------------------
6、----------//voidinit_serial(){REN=1;//------允许串行接收------------//SM0=0;//------工作方式一--------------//SM1=1;//-------------------------------//}//------------------串口工作方式设置SCON---------------------------//voidinit_s_break(){EA=1;//总中断ES=1;//串口中断允许位}//-----------------设置串口中断进行串口通信-------
7、---------------------//voiddelay(){uintx,y;for(x=1000;x>0;x--)for(y=110;y>0;y--);}//-------------------------------------------------------------------//voidmain(){init_timer1();init_serial();init_s_break();while(1){if(flag==1){ES=0;for(i=0;i<6;i++){SBUF=prefix[i];delay();while(!TI)T
8、I=0;}SBUF=a_
此文档下载收益归作者所有