单片机双机通信设计.ppt

  1. 1、本文档共48页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
单片机双机通信设计.ppt

1 任务1 单片机双机通信设计 单片机系统设计中,经常要使用串口进行外部通信,单片机与PC机通信是单片机功能模块使用中极为重要的一部分,应用也较广泛。本项目以两个任务来学习单片机通信方面的内容。 任务1 单片机双机通信设计 1.1 提出任务 单片机甲向单片机乙发送“READY”字符串,然后等待接收。如果接收到乙机发送的“OK”字符串,则蜂鸣器响,否则就不响。 1.2 分析任务 1. 硬件电路设计 电路组成如图8-1所示。这里选择具有内部ROM的AT89S51单片机,如果PROTEUS软件中没有AT89S51单片机,就选用AT89c51单片机。两块单片机串口相接,即甲机的P3.0接乙机的P3.1, 甲机的P3.1接乙机的P3.0,也就是说甲机的发送端接乙机的接收端,甲机的接收端接乙机的发送端;甲机的P1.0接蜂鸣器。当甲机的P1.0管脚输出高电平时,蜂鸣器就响,输出低电平时,蜂鸣器不响。 任务1 单片机双机通信设计 任务1 单片机双机通信设计 使用查询方式,实现双机串口异步通信。所谓的查询方式,是指通过查看中断标志位RI和TI来接受和发送数据。在这种方式下,当串口发送完数据或接收到数据时,仅仅置位相应的标志位而不会以任何其它的形式通知主程序。主程序只能通过定时查询发现标志位的状态改变,从而作出响应的处理。注意,在查询方式中,标志位的位置由硬件完成,而标志位的清除需要软件进行处理。 首先由甲机发送“READY”字符串,然后等待接收。如果接收到乙机发送的“OK”字符串,则蜂鸣器响,否则就不响。总程序流程图(甲机)如图8-2。 任务1 单片机双机通信设计 数据的接收和发送均使用查询方式。程序大致分为3个部分:初始化部分、发送数据部分、接受数据部分。 (1)系统初始化部分 系统初始化部分应完成 如下方面的工作: 关闭所有中断; 设置串口工作模式; 设置串口为接收允许状态; 设置串行口通信波特率; 其它数据初始化; 任务1 单片机双机通信设计 串口使用工作方式1,其波特率可以是软件设置的。波特率的设置是通过改变定时器T1的溢出率来控制。设定单片机为如下环境: 单片机外接晶振频率为11.0592Hz; 定时器T1工作在工作模式2,既自动装入初值8位定时器; 波特率选择位SWOD置为1; 设置通信波特率为9600bit/s; 按照上述条件,定时器T1的初值N应设为: N=256 -(2smod?晶振频率)/(波特率?32?12)=256 – (21?11.0592?106)/(9600?32?12) = 250 =FAH 任务1 单片机双机通信设计 (2)发送数据部分 在程序中,发送一个字节的过程如下: 将数据传送至SBUF; 检测TI位,如果数据传送完毕,则TI位被硬件置1,如果TI为0,则继续等待; TI=1,表示发送完成,此时需要将TI软件清0,然后继续发送下一个字符; 程序中,使用 put_string()发送数据,当检测到“\0”字符时,表示到达发送字符串结尾,停止数据发送。 任务1 单片机双机通信设计 (3)接收数据部分 在程序中,接收一个字节的过程如下: 检测RI位,如果接收到数据,则RI位被硬件置1,如果TI为0,则继续等待; RI=1,表示已接收到一个字节,此时,可以将SBUF中的内容读入缓冲区; 将RI软件清0,准备接收下一字节; 程序中,使用 get_string()发送数据,当检测到“\0”字符时,表示已接收到完整的字符串,函数返回。 任务1 单片机双机通信设计 #includeAT89X51.H #includeSTRING.H #define _SEND_STRING_ “READY” //发送的字符串 #define _RECV_STRING_ “OK” //接收的字符串 #define _MAX_LEN_ 16 //数据最大长度 void put_string(unsigned char *str); //串口发送字符串 void get_string(unsigned char *str); //串口接收字符串 void Beep(); //蜂鸣表示成功接收到返回信号 /*----------------------------------程序初始化部分--------------------------------------------*/ void main() { char buf[_MAX_LEN_]; /*系统初始化*/ TMOD = 0x20; //定时器T1使用工作方式2 TH1 =250;

文档评论(0)

文档分享 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档