基于51单片机异步串行通信程序(共3页).docx
《基于51单片机异步串行通信程序(共3页).docx》由会员分享,可在线阅读,更多相关《基于51单片机异步串行通信程序(共3页).docx(3页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上基于51单片机的异步串行通讯1. 串行工作方式1,波特率与T1定时器的溢出率有关2. 进行中断法的串行通讯#include#define uchar unsigned char#define uint unsigned int/-宏定义-/uchar code prefix=I get ;/前缀-字头uchar flag,a_receive,i;/*-本程序的思想:一串口通讯方式一进行单片机与上位机(串口调试助手)的实时通讯,反应异步串行通讯特点-A:设置定时器1,形成波特率,进行中断形式的串口通讯-B:单片机先发送字头(prefix),接收到调试助手发送来的数据后紧
2、随发送回调试助手-C:本程序中进入中断是由串行接收中断标志(RI=1单片机接收到一帧数据后由硬件自身引起,后续软件复位,以接收下次中断)-D:发送完一帧数据,不进入中断程序,(复位发送中断标志,时间较短也不一定能进入中断,可能中断确认不能完成)-间歇肯定串口中断功能进行避免由发送中断标志引起的串口中断-E:主程序中的delay()函数的应用原因,由于所采用的的波特率较低300,所以读取数据较慢,以延时函数等待数据的读取,-读取时,是在T1定时器决定的波特率确定的,来一个周期,读一个位的数据,所以采用延时保证数据可读完。-F:采用波特率300的原因在于,本设备晶振频率12MHZ,在300波特率时
3、其误差为零。-G:在上位机中发送字符时,只能发送一个字节的数据,其原因在于,在中断程序中仅进行了一次读的操作,即只读到一个字节的数据-/-*/void init_timer1()TMOD=0X20;TH1=TL1=0X98;TR1=1;/-定时器设置-/void init_serial()REN=1;/-允许串行接收-/SM0=0;/-工作方式一-/SM1=1;/-/-串口工作方式设置SCON-/void init_s_break()EA=1;/总中断ES=1;/串口中断允许位/ -设置串口中断进行串口通信-/void delay()uint x,y;for(x=1000;x0;x-) for(y=110;y0;y-);/-/void main()init_timer1();init_serial();init_s_break();while(1) if(flag=1) ES=0; for (i=0;i6;i+) SBUF=prefixi; delay(); while(!TI)TI=0; SBUF=a_receive; delay(); while(!TI)TI=0; ES=1; flag=0; /-主程序-/void s_ri_break() interrupt 4RI=0;a_receive=SBUF;delay();flag=1;专心-专注-专业
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 51 单片机 异步 串行 通信 程序
限制150内