07MCS-51的串行口范例.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(3)程序设计 ORG 0000H LJMP MAIN ORG 0023H ;串口中断入口 JC TI ,INTI;串口输出中断服务程序 JC RI ,INRI;串口输入中断服务程序 ORG 0200H INRI:CLR RI MOV A ,SBUF XRL A , #02H ;判别从机的应答信号 JNZ RS1 CLR F0 ;地址判别取消 CLR TB8 ;地址帧改为数据帧 RS1 :RETI (3)程序设计 ORG 0000H LJMP MAIN ORG 0023H ;串口中断入口 JC TI ,INTI;串口输出中断服务程序 JC RI ,INRI;串口输入中断服务程序 ORG 0200H INRI:CLR RI JNB RB8,RS1 ;判别地址帧,数据帧跳 MOV A ,SBUF XRL A , #02H ;判别是找我的地址吗 JNZ RS3 ;不是找我的跳 CLR SM2 ;置SM2=0 MOV SBUF, #02H ;给主机一个应答信号 SJMP RS2 RS1: MOV A,SBUF ;取一个接收字符 MOV @R0,A ;保存一个字符 INC R0 ;修改指针 DJNZ R7,RS3 ;全部字符接收完? SEBT SM2 ; 接收置SM2=1 RS3: RETI SJMP L2 L1: JB RB8,ERP ;RB8=1,跳ERP L2: MOV @R0,A INC R0 POP Acc POP PSW ERP: ……… ;出错处理程序段 ……… RETI 7.2.4 方式3 SM0、SM1=11,串口为方式3。 波特率可变的9位异步通讯方式,除波特率外,方式3和方式2相同。方式3的时序见方式2。方式3波特率=(2SMOD/32)×定时器T1的溢出率 4 . 波特率的制定方法 方式0、方式2的波特率是固定的;方式1、方式3波特 率由定时器T1的溢出率来确定。 7.4.1 波特率的定义 波特率的定义。 对于定时器的不同工作方式,波特率的范围不一 7.4.2 定时器T1产生波特率的计算 (1)方式0波特率=时钟频率fosc×1/12,不受SMOD位的值的影响。若fosc=12MHz,波特率为fosc/12即1Mb/s。 (2)方式2波特率=(2SMOD/64)×fosc 若fosc=12MHz: SMOD=0 波特率=187.5kb/s; SMOD=1 波特率=375kb/s (3)方式1或方式3时,波特率为: 波特率=(2SMOD/32)×T1的溢出率 实际设定波特率时,T1常设置为方式2定时(自动装初值)这种方式不仅操作方便,也可避免因软件重装初值而带来的定时误差。 实际使用时,为避免烦杂的初值计算,常用的波特率和初值X间的关系列成表7-2(P165),以供查用。 表7-2有两点需要注意: (1) 时钟振荡频率为12MHz或6MHz时,表中初值X和相应的波特率之间有一定误差。例如,FDH的对应的理论值是10416波特(时钟6MHz)。与9600波特相差 816波特,消除误差可以调整时钟振荡频率fosc实现。例如采用的时钟振荡频率为11.0592MHz。 例3 若8051单片机的时钟振荡频率为11.0592MHz,选用T1为方式2定时作为波特率发生器,波特率为2400b/s,求初值。 上述结果可直接从表7-2中查到。 这里时钟振荡频率选为11.0592 MHz,就可使初值为整数,从而产生精确的波特率。 表7-3 常用的波特率及计算器初值 二、发送程序 1. 查询方式: TRAM: MOV A,@R0 ;取数据 MOV SBUF,A ;发送一个字符 WAIT: JBC TI,NEXT ;等待发送结束 SJMP WAIT NEXT: INC R0 ;准备下一次发送 SJMP TRAM 2.中断方式: ORG 0023H ;串行口中断入口 A

文档评论(0)

4477769 + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档