第7章80C51单片机串行口单片机原理及应用(C51编程)-.pptVIP

第7章80C51单片机串行口单片机原理及应用(C51编程)-.ppt

  1. 1、本文档共51页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第7章80C51单片机串行口单片机原理及应用(C51编程)-.ppt

* * 串行口初始化步骤 确定T1的工作方式(TMOD) 计算T1的初值,装载TH1、TL1 启动T1(置位TR1) 确定串行口工作方式(SCON) 串口中断设置(IE、IP) * * 7.3 80C51单片机的串行口应用 7.3.1 利用单片机串口的并行I/O扩展 占用串口! 单片机端的电平转换 7.3.2 单片机与PC机间的通信 与PC机的硬件连接 直通连接 交叉连接 PC机串行口检查 PC机的串行口的收、发信号引脚短接 运行串口调试软件 连机编程测试 void main(void) { uchar temp; init(); while (1) { temp = ReceiveChar();//接收数据 SendChar(temp); //发送数据 } } void init(void) { SCON = 0x50; //方式1(N,8,1),接收允许 PCON = 0x00; //波特率不倍增 TMOD = 0x20; //置T1为8位自动重装方式 TL1 = 0xfd; TH1 = 0xfd; //波特率9600 TR1 = 1; } 7 6 5 4 3 2 1 0 SCON SM0 SM1 SM2 REN TB8 RB8 TI RI 字节地址:98H uchar ReceiveChar() { uchar ch; while (!RI); //等待接收完 ch = SBUF; RI = 0; return (ch); } void SendChar(uchar ch) { SBUF = ch; //发送字符 while (!TI); //等待发送完 TI = 0; //清标志 } 通信程序的扩充与完善 通讯协议: 每帧:数据8位,起始位1位,停止位1位,无检验,波特率9600。 PC机作为主机,主机命令由4个字符形成的字符串构成,首字符‘$’是同步头,次字符为命令关键字,其他2个字符未定义。 设命令关键字为1时,单片机要将缓冲区的数据以由前至后的顺序发送到PC机端;当命令关键字为2时,单片机要将缓冲区的数据以由后至前的顺序发送到PC机端,其他关键字未定义。 单片机端程序: void DataInit(void) { //设置缓冲区调试数据 uchar i; for(i=0;i10;i++) OutBuff[i]=i+0x30; } void SPortInit(void) { TMOD |=0x20; SCON=0x50; TH1=0xfd; TL1=0xfd; TR1=1; ES = 1; EA = 1; } void SendChar(uchar ch) { SBUF = ch; //发送字符 while (!TI); //等待发送完 TI = 0; } void SPortIsr () interrupt 4 { uchar i,ch; ES=0; ch = SBUF; RI=0; if(ch= =0x24) //检测‘$’ { InBuff[0]=ch; for(i=1;i4;i++) { while (!RI); RI=0; InBuff[i] = SBUF; } InFullFlag=1; } ES=1; } void main(void) { DataInit(); SPortInit(); InFullFlag = 0; while(1) { if(InFullFlag) { switch(InBuff[1]) {//依命令完成相应功能 } InFullFlag = 0; } } } switch(InBuff[1]) {//依命令完成相应功能 case 0x31: for(i=0;i10;i++) SendChar(OutBuff[i]); break; case 0x32: for(i=0;i10;i++) SendChar(OutBuff[9-i]); break; default:break; } * * PC机端程序: Private Sub Form_Load() MSComm1.CommPort = 1 设置通信端口号为COM1 MSComm1.Settings = 9600,n,8,1

文档评论(0)

kfcel5460 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档