Diewuxi

Belive tomorrow will be better, love science and technology, support communication and understanding, always ready for thought turn.

Blog / engineering_technology / electronic_electrical / mcu / 51 内核单片机方式 1 串口通信设置与使用简介

Blog


Article^ Parent

51 内核单片机方式 1 串口通信设置与使用简介


Date: 2017-07-25 12:53:05
Description: 51 单片机串口通信方式 1 需要设置的寄存器有串口控制寄存器(SCON),电源管理寄存器(PCON),定时器/计数器控制寄存器,定时器/计数器 1,中断允许寄存器(IE)。
Keywords: 单片机, 串口通信, 方式 1, 中断, 设置
Category: engineering_technology/electronic_electrical/mcu
Tag: mcu, serial_port
Link: https://www.diewuxi.com/blog/article/21.html

串行口方式 1 为 10 位异步收发(8 位数据),波特率(由定时器/计数器 1 溢出频率和电源管理寄存器 SMOD 位有关)可变的串口通信方式。此方式需要设置的寄存器有串口控制寄存器(SCON),电源管理寄存器(PCON),定时器/计数器控制寄存器,定时器/计数器 1,中断允许寄存器(IE)。

串口发送与接受的数据都使用 SBUF 寄存器存储。

1 设置中断允许(设置中断允许寄存器 IE)

  • EA=1 打开总中断
  • ES=1 打开串口中断

2 设置串口(设置串行口控制寄存器 SCON)

  • SM0=0, SM1=1 设置串口工作方式为 1
  • REN=1 允许接收串口信息

3 设置串口通信波特率

根据公式,由目标波特率计算定时器/计数器 1 的初值和波特率倍率

TH1=X,TL1=X,X 为计算出来的定时器/计数器 1 的初值,SMOD=0 或 SMOD=1 为倍率

设置波特率倍率(设置电源控制寄存器 PCON)

  • SMOD=0 设置倍率为 1 波特率不加倍

设置定时器/计数器 1 (设置定时器/计数器控制寄存器 TMOD 和定时器/计数器 1 T1)

  • TMOD=0x20 设置定时器 1 工作方式为 2,初值自动重装的 8 位定时器/计数器
  • TH1=X,TL1=X,设置定时器/计数器 1 的初值为 X,X 为计算出的值
  • TR1=1 启动定时器/计数器 1

4 编写串口中断服务程序,串口中断号为 4

5 发送与接收串口消息

发送

串口发送需要一定时间完成,发送结束时 SCON TI 位被硬件设置为 1,然后请求中断,所以可以通过 TI 的值或是否发生中断判断是否发送结束,确认结束之后需要再把 TI 人工设置为 0 以等待下次硬件置 1。

发送串口消息不必通过是否进入中断服务程序来判断是否发送结束,因为在特定程序代码下,发送的开始处是确定的,发送结束可以通过判断 TI 来确定,而串口接收时,接收开始和结束是不确定的,必须使用中断服务程序判断,以下的发送没有使用串口中断。

  • ES=0 关闭串口中断
  • SBUF=a 把字符型变量 a 中的字符写入串口缓存数据寄存器
  • 等待发送过程结束(等待 SCON 寄存器发送中断标志位 TI=1)
  • TI=1 后,再把 TI=0
  • ES=1 打开串口中断

接收

以下操作语句位于串口中断服务程序中。进入串口中断服务程序说明可能是发送中断申请或接收中断申请,但在特定程序代码下这是确定的,以下是接收中断。

串口接收需要一定时间完成,接收结束时 SCON RI 位被硬件设置为 1,然后请求中断,所以可以通过是否进入串口中断来判断是否接收结束,确认结束之后需要再把 RI 人工设置为 0 以等待下次硬件置 1。

  • RI=0 把 SCON 中接受中断标志位清零
  • a=SBUF 把串口缓存数据寄存器中的数据保存到字符型变量 a 中

参考文献

  • 郭天祥. 51 单片机 C 语言教程――入门、提高、开发、拓展全攻略. 电子工业出版社, 2009

Comments [0]

There is no comments now.

Write comment(* is necessary, and email is not shown to public)


Diewuxi 2017--2024