MCS-51单片机提供了4种串口的方式,但是我们只有方式1最常用(可变的10位串行通讯方式),下面就方式1的使用进行讲解。
在开始之前先明确一个概念,中断会产生中断标志位,而CPU检测到中断标志位后,如果没有其他更高的中断在执行,CPU会响应该中断,并进入中断服务函数。串行通讯属于中断方式的一种,它服从这个概念。此外串行通讯并不是需要进入串行通讯的时候,会产生中断标志位;而是发送或者接收成功后,会产生中断标志位。
通过中断向量,可以知道串行通讯只有一个中断号4,也就是说当进入无论是发送或者接收成功,都会触发中断服务函数,因此如果需要区分发送与接收需要在中断服务函数中实现区分,可以通过判断中断标志位(TI == 1或者RI == 1)进行区分。
在实际应用中,发送数据成功就成功,一般不会在发送成功后再进入中断服务函数;在处理接串行通信数据的时候,中断服务函数是非常必要,当接收到外面的数据成功时RI =1,触发中断通知CPU,CPU进入中断服务函数,对接收到的数据进行处理。
串行通讯方式1,需要满足以下条件
1)中断总允许打开 EA = 1;
2)中断源允许打开 ES = 1;
3)设置SCON=0x50(SM0 =0;SM1 =1;REN = 1,开启接收),由于SCON可以位寻址,可以位设置SM0 =0;SM1 =1;REN = 1;
4)设置SMOD,由于SMOD在PCON寄存器中,不能位寻址。如果需要SMOD=1,设置PCON=0x80;如果需要SMOD = 0,则不需要设置PCON,因为PCON复位值为0,上电后默认SMOD = 0;
5)设置TMOD与预装值(TH1与TL1),定时器T1设置(定时器工作方式,不是计数模式),一般设置工作在方式2(8位自动重装);
6)开启定时器 TR1 = 1;
7)中断服务函数。
注:使用串行通讯方式1时,SMOD的值、TH1与TL1可以通过计算公式计算的得到。
波特率 = ( fosc*2SMOD)/(32*12*(256-X))
在51单片机中的波特率有,4800、9600、19200。除了公式计算得到,也可以通过开发小工具得到。
链接:https://pan.baidu.com/s/1xJNgKILVPiACX-fEpwWihg
提取码:ibe7
串行通讯在工作方式1,波特率19200的接收程序,代码实现。
/****************************************
Header:
File Name: main.c
Author: adam
Date: 2020年9月19日
******************************************/
#include "reg52.h"
#include "stdio.h"
void main(){
//波特率为19200bps,如果需要9600,将SMOD =0即可;
EA = 1; //总中断允许
ES = 1; //串行源中断允许
PCON = 0x80; //SMOD =1,
SCON = 0x50; //SM0 =0;SM1 =1;REN = 1;
TMOD = 0x20; //设置T1为模式2,定时器模式:C/T=0;不启动外部,INT0控制开始定时:GATE=0;
TH1 = 0xFD; //预装值
TL1 = 0xFD; //自动重装值
TR1 =1; //启动定时器T1
while(1);
}
void uart(void) interrupt 4
{
//判断串行中断是否属于接收
if(RI==1){
P2 = SBUF;
RI=0;
}
}
代码实现后,可以使用串口调试助手,通过电脑发送数据到单片机。需要注意的是,该串口调试助手,发送设置的hex方式,没有实现,只能用ASCII码的方式发送数据,也就是说当发送框中,写入“1”,将会发送16进制的数据位ASCII码,单片机接收到的数值为0x31,0x31将会中断服务函数中,赋值为P2,如果P2口有接LED,对应的LED将会被点亮。
工具链接地址:
链接:https://pan.baidu.com/s/1aGfcqwGE0E9R1FyeNO8FTg
提取码:jpv7
注:此外如果不是使用上面的串口调试助手,如果发现数值不对,除了检查数据以外,还需要注意工具是不是发送数据时,有默认添加换行符。
下面是笔者在用以下的串口调试助手测试时,发送数1时。P2的LED会闪以下,然后保持数据在0x0A,0x0A在ASCII编码中为换行,也就是说软件在发送的时候,发送数据1后,会默认再发送换行符。
上一篇:C51编程18-中断篇(串行通讯2)
下一篇:C51编程20-应用篇(LCD1602显示-1)
推荐阅读最新更新时间:2024-11-17 03:26
设计资源 培训 开发板 精华推荐
- 基于 AD5684R 的适用于 I/O 卡和 PLC 应用的 4 通道、灵活、可配置的电压和电流输出电路
- OPA4377八通道运放 开源
- ADR392A 4V 输出微功率、低噪声精密电压基准的典型应用
- AP3602A 100mA 稳压电荷泵的典型应用
- 使用具有 PowerPath 和 2A 输入限制的 LTC4162EUFD-L41M 9V 至 35V、2 节、3.2A 充电器的典型应用
- ReflowMaster:基于魔改烤箱的开源回流焊主控(原理图、PCB、gerber、源码等)
- 根据 EN55022 A 类(双输出)使用具有 EMC 滤波的 RP40-2412SFR DC/DC 转换器的典型应用
- LTC2290IUP 演示板,MUX 双路 ADC,VDD=+3.0V,10Msps,12Bit,1MHz < AIN< 70MHz
- DC382A 演示板采用 LTC2415 差分输入无延迟 24 位模数转换器
- TCR5SB30U、200mA、3V输出电压CMOS低压降稳压器的典型应用
- 有奖国产芯直播:先楫800MHz RISC-V MCU高能秀,岂止控4只伺服电机,干货多多
- 泰克专家邀你了解大数据时代全新解决方案,参与翻盖有礼!
- 扒一扒KEYSIGHT频谱分析仪
- 有奖直播|TI DLP® 技术如何推动AR HUD和汽车大灯的发展
- Microchip有奖问答 | 新品 MCU 独立于内核的外设(CIP)技术解密
- 月度原创精选评选2018年5月(总第4期)
- 劳动五月 晒“现场”,谁是电子工作狂?
- 南芯SC8905 评估板免费测评,支持充放电双向操作
- 【看电源研讨会 抽好礼】 高密度电源系统的PCB布局与散热设计系统
- 【边分享,边成长,11月有奖】EEWORLD优秀主题/回复第16期活动开始拉