《(67)--6章串行口程序设计双机通信(4).ppt》由会员分享,可在线阅读,更多相关《(67)--6章串行口程序设计双机通信(4).ppt(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、MCSMCS-51单片机 串行通信串行通信的应用编程的应用编程(一一)串行口串行口的应用的应用编程知识点回顾:编程知识点回顾:l串行口的波特率有两种方式:串行口的波特率有两种方式:1.固定波特率固定波特率2.可变波特率:使用可变波特率:使用可变波特率先确定可变波特率先确定T1的计数初值的计数初值,并对,并对T1进行初进行初始化。始化。l串行通信的编程方式:串行通信的编程方式:1.查询方式:查询查询方式:查询TI或或RI是否为是否为“1”。2.中断方式:若中断已打开,当中断方式:若中断已打开,当TI、RI 为为“1”,会自动产生中断,会自动产生中断,数据发送或接收都在中断程序中进行。数据发送或接
2、收都在中断程序中进行。注意:不管采用查询方式还是中断方式,注意:不管采用查询方式还是中断方式,发送或接收数据后都发送或接收数据后都要要软件软件清清TI或或RI。一、一、查询查询方式编写程序流程方式编写程序流程l查询方式发送程序:查询方式发送程序:(先发后查)先发后查)发送一个数据发送一个数据查询查询TI 发送下一个数据发送下一个数据l查询方式接收程序:(先查后收)查询方式接收程序:(先查后收)查询查询RI读入一个数据读入一个数据查询查询RI读下一数据读下一数据1.查询方式发送流程图查询方式发送流程图T1初始化、启动初始化、启动T1工作工作设定串行通信方式设定串行通信方式置发送数据块首址置发送数
3、据块首址数据块长度计数器数据块长度计数器清清TI发送数据发送数据TI1?修改地址指针修改地址指针和块长度计数器和块长度计数器全部数据发送完?全部数据发送完?开始开始结束结束YNYNT1初始化、启动初始化、启动T1工作工作设定串行通信方式,允许接收设定串行通信方式,允许接收置接收缓冲区首址置接收缓冲区首址接收数据块长度接收数据块长度清清RIRI1?修改地址指针修改地址指针和块长度计数器和块长度计数器全部数据接收完?全部数据接收完?开始开始结束结束接收数据接收数据2.查询方式接收流程图查询方式接收流程图YNYN 中断方式的初始化编程与查询方式很相似,不同的是要开中断方式的初始化编程与查询方式很相似
4、,不同的是要开中断,即置位中断,即置位EA和和ES,并编写中断服务程序。,并编写中断服务程序。l中断方式发送程序:中断方式发送程序:发送一个数据发送一个数据等待中断,中断中发送下一数据。等待中断,中断中发送下一数据。l中断方式接收程序:中断方式接收程序:等待中断,在中断中接收一个数据。等待中断,在中断中接收一个数据。二、中断二、中断方式方式T1初始化、启动初始化、启动T1工作工作设定串行通信方式设定串行通信方式置发送数据块首址置发送数据块首址数据块长度计数器数据块长度计数器发送数据发送数据全部数据发送完?全部数据发送完?1.中断方式发送流程图中断方式发送流程图等待中断等待中断1 EA,1ES发
5、送数据发送数据中断返回中断返回0 EA,0ES中断服务程序中断服务程序主程序主程序修改地址指针修改地址指针和块长度计数器和块长度计数器清清TIYNT1初始化、启动初始化、启动T1工作工作设定串行通信方式设定串行通信方式置接收数据块首址置接收数据块首址数据块长度计数器数据块长度计数器全部数据接收完?全部数据接收完?2.中断方式接收流程图中断方式接收流程图等待中断等待中断1 EA,1ES中断返回中断返回0 EA,0ES中断服务程序中断服务程序主程序主程序修改地址指针修改地址指针和块长度计数器和块长度计数器清清RI接收数据接收数据YN例例1.在内部数据存贮器在内部数据存贮器20H3FH单元中共有单元
6、中共有32个数据,个数据,要求采用方式要求采用方式1串行发送出去,串行发送出去,传送速率为传送速率为1200波特,波特,设设fosc12MHZ。分析:令分析:令T1工作于方式工作于方式 2 作波特率发生器,取作波特率发生器,取SMOD0,T1的时间常数计算如下:的时间常数计算如下:波特率波特率 代入数据得:代入数据得:1200(1/32)12106/12(256-x)求得:求得:x230E6H2 2SMODSMOD32foscfosc12(256-x)12(256-x)#includemain()unsigned char data i;unsigned char data*p;TH1=0 x
7、e6;TL1=0 xe6;TMOD=0 x20;TR1=1;SCON=0 x40;p=0 x20;for(i=0;i=32;i+)SBUF=*p;p+;while(!TI);TI=0;#include main()unsigned char data i;unsigned char data*p;TH1=0 xe6;TL1=0 xe6;TMOD=0 x20;TR1=1;SCON=0 x50;p=0 x20;for(i=0;i=32;i+)while(!RI);RI=0;*p=SBUF;p+;查询方式查询方式 C 语言发送程序语言发送程序查询方式查询方式 C 语言接收程序语言接收程序#inclu
8、demain()unsigned char data i;unsigned char data*p;TH1=0 xe6;TL1=0 xe6;TMOD=0 x20;TR1=1;SCON=0 x40;p=0 x20;for(i=0;i=32;i+)SBUF=*p;p+;while(!TI);TI=0;#include main()unsigned char data i;unsigned char data*p;TH1=0 xe6;TL1=0 xe6;TMOD=0 x20;TR1=1;SCON=0 x50;p=0 x20;for(i=0;i=32;i+)while(!RI);RI=0;*p=SBU
9、F;p+;查询方式查询方式 C 语言发送程序语言发送程序查询方式查询方式 C 语言接收程序语言接收程序main()TMOD=0 x20;TH1=0 xe6;TL1=0 xe6;TR1=1;EA=1;ES=1;SCON=0 x40;p=0 x20;SBUF=*p;for(i=0;i32;);/等待中断等待中断#includeunsigned char data i;unsigned char data*p;Trs()interrupt 4 TI=0;i+;p+;SBUF=*p;3.中断方式中断方式 C 语言发送程序语言发送程序main()TMOD=0 x20;TH1=0 xe6;TL1=0 xe6;TR1=1;EA=1;ES=1;SCON=0 x50;p=0 x20;for(i=0;i32;);#includeunsigned char data i;unsigned char data*p;Trs()interrupt 4 RI=0;i+;*p=SBUF;p+;4.中断方式中断方式 C 语言接收程序语言接收程序THE END !
限制150内