单片机原理及应用C语言版7节.pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
本章小结 本章介绍了数据通信的一般概念和单片机串行口基本组成与应用。 通信是计算机与外设之间的数据传送。通信方式有串行通信和并行通信,串行通信又分为同步通信和异步通信。 MCS-51单片机有一个全双工UART,工作方式有4中,方式0为移位寄存器方式,主要用来进行串行与并行数据的转换,方式1、2、3为通用的异步传送方式。 本章完 7.4.1 同步方式应用 图7-13 方式0扩展输入输出电路 解:数据的输入输出通过RXD接收和发送,移位时钟通过TXD送出,74HC164用于串/并转换,74HC165用于并/串转换。 C语言程序清单: #includereg52.h sbit P1_0=P1^0; sbit P1_1=P1^1; unsigned char data1; void main() { SCON=0x10; //串行口方式0,允许接收 ES=1; EA=1; //允许串行口中断 7.4.1 同步方式应用 P1_0=0; //关闭并行输出 P1_1=1; //并行置入数据 P1_1=0; //开始串行移位 SBUF=0; //送入串行数据 while(1); //等待中断 } void s_srv() interrupt 4 //中断服务程序 { if(TI) //发送中断 { TI=0; P1_0=1; //打开并行输出 } 7.4.1 同步方式应用 else //接收中断 { RI=0; data1=SBUF; //读取接收的数据 P1_0=0; //关闭并行输出 SBUF=~data1; //送入串行数据 P1_1=1; //为接收下一次 P1_1=0; //数据做准备 } } 汇编语言程序清单: ORG 0000H SJMP MAIN ORG 23H SJMP S_SRV ;串行口中断服务程序 7.4.1 同步方式应用 MAIN: MOV SCON,#10H ;串行口方式0初始化 SETB ES SETB EA MOV A,#0 CLR P1.0 ;关闭并行输出 MOV SBUF,A ;开始串行输出 SETB P1.1 CLR P1.1 SJMP $ ;等待中断 7.4.1 同步方式应用 S_SRV: JBC TI,SEND CLR RI MOV A,SBUF CLR P1.0 CPL A MOV SBUF,A SETB P1.1 CLR P1.1 RETI SEND: SETB P1.0 RETI 7.4.1 同步方式应用 7.4.2 异步方式应用 串行口方式1与方式3很近似,波特率设置一样,不同之处在于方式3比方式1多了一个数据附加位。 方式2与方式3基本一样(只是波特率设置不同),接收/发送11位信息:开始为1位起始位(0),中间8位数据位.数据位之后为1位程控位(由用户置SCON的TB8决定),最后是1位停止位(1)。只比方式1多了一位程控位。 例7-3 将片内RAM 50H~5FH中的数据串行发送,用第9个数据位作奇偶校验位,设晶振为11.059 2MHz,波特率为2 400b/s,编制串行口方式3的发送程序。 解:用TB8作奇偶校验位,在数据写入发送缓冲器之前.先将数据的奇偶位P写入TB8,这时,第9位数据作奇偶校验用,发送采用中断方式。 7.4.2 异步方式应用 C语言程序清单: #includereg52.h unsigned char i=0; unsigned char array[16] _at_ 0x50; //发送缓冲区 void main() { SCON=0xc0; //串行口初始化 TMOD=0x20; //定时器初始化 TH1=0xf4; TL1=0xf4; TR1=1; ES=1; EA=1; //中断初始化 ACC=array[i]; //发送第一个数据送 TB8=P; //累加器,目的取P位 SBUF=ACC; //发送一个数据 while(1); //等待中断 } 7.4.2 异步方式应用 void server() interrupt 4 //串行口中断服务程序 { TI=0; //清发送中断标志 ACC=array[++i]; //取下一个数据 T

文档评论(0)

精品课件 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档