串口的工作方式

参考博客:http://cqy-chenqiyao.blog.163.com/blog/static/66857812200921494227849/

串行工作方式0

1. 数据发送

   当数据写入SBUF后,数据从RXD端在移位脉冲(TXD)的 控制下,逐位移入74LS164,74LS164能完成数据的串并转换。当8位数据全部移出后,TI由硬件置位,发生中断请求。若CPU响应中断,则从0023H单元开始执行串行口中断服务程序,数据由74LS164并行输出。其接口逻辑如下图所示。

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

2. 数据接收

   要实现数据接收,必须首先把SCON中的允许接收位REN设置为1。当REN设置为1时,数据就在移位脉冲的控制下,从RXD端输入。当接收到8位数据时,置位接收中断标志位RI,发生中断请求。其接口逻辑如下图所示。由逻辑图可知,通过外接74LS165,串行口能够实现数据的并行输入。

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

串行工作方式1

   方式1为10位为一帧的异步串行通信方式。其帧格式为1个起始位、8个数据位和1个停止位。如下图所示。

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

1.   数据发送

    数据写入SBUF后,开始发送,此时由硬件加入起始位和        停止位,构成一帧数据,由TXD串行输出。输出一帧数据后,TXD保持在高电平状态下,并将TI置位,通知CPU可以进行下一个字符的发送。

2. 数据接收

   当REN=1且接收到起始位后,在移位脉冲的控制下,把接收到的数据移入接收缓冲寄存器(SBUF)中,停止位到来后,把停止位送入RB8中,并置位RI,通知CPU接收到一个字符。

3. 波特率的设定

  工作在方式1时,其波特率是可变的,波特率的计算公式为:

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

其中,SMOD为PCON寄存器最高位的值,其值为1 或0。

当定时器1作波特率发生器使用时,选用工作方式2(即自动加载定时初值方式)。选择方式2可以避免通过程序反复装入定时初值所引起的定时误差,使波特率更加稳定。假定计数初值为X,则计数溢出周期为:

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

溢出率为溢出周期的倒数。则波特率的计算公式为:

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

实际使用中,波特率是已知的。因此需要根据波特率的计算公式求定时初值X。用户只需要把定时初值设置到定时器1,就能得到所要求的波特率。

串行工作方式2

       方式2为11位为一帧的异步串行通信方式。其帧格式为1个起始位、9个数据位和1个停止位。如下图所示。

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

在方式2下,字符还是8个数据位,只不过增加了一个第9个数据位(D8),而且其功能由用户确定,是一个可编程位。

   在发送数据时,应先在SCON的TB8位中把第9个数据位的内容准备好。这可使用如下指令完成:

         SETB       TB8           ;TB8位置“1”

         CLR        TB8                ;TB8位置“0”

发送数据(D0~D7)由MOV指令向SBUF写入,而D8位的内容则由硬件电路从TB 8中直接送到发送移位器的第九位,并以此来启动串行发送。一个字符帧发送完毕后,将TI位置“1”,其他过程与方式1相同。

    方式2的接收过程也于方式1基本类似,所不同的只在第9数据位上,串行口把接收到的前8个数据位送入SBUF,而把第九数据位送入RB。

    方式2的波特率时固定的,而且有两种。一种是晶振频率的三十二分之一;另一种是晶振频率的六十四分之一。即fosc/32和fosc/64。如用公式表示则为:

串口工作方式 - cqy-chenqiyao - cqy-chenqiyao的博客

由此公式可知,当SMOD为0时,波特率为fosc/64,当SMOD为1时,波特率为fosc/32 

串行工作方式3

    方式3同方式2几乎完全一样,只不过方式3的波特率是可变的,有用户来确定。其波特率的确定同方式1。

转载于:https://www.cnblogs.com/yuqilihualuo/p/3382074.html

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值