UART一般用于板间通讯,即单片机和外围设备之间的通讯。
当单片机的电压与外设之间的电压不同时,需要一个中介芯片来转换:
常用的是CH340T,原理图如下:
先发一位 0 表示起始位,然后发送 8 位数据位,数据位是先低后高的顺序,数据位发完后再发一位 1 表示停止位。这样本来要发送一个字节的 8 位数据,而实际上我们一共发送了 10 位,多出来的两其中一位起始位,一位停止位。
有关寄存器:
SCON:串行口控制寄存器
`SM0`,`SM1`:工作方式选择位(方式)
`TI`:发送中断标志,发送一帧结束,`TI = 1`,必须软件清0
`RI`:接受中断标志,接受一帧结束,`RI = 1`,必须软件清0
PCON:波特率加倍寄存器
`SMOD`:串行口波特率倍增位
1:串行口波特率加倍
0:不变,默认为0
IE:中断允许寄存器
SBUF:串行发送/接受数据缓冲器
两个独立的物理单元,但有着相同的地址,可同时发送,接收数据
补充:
TMOD—不可位寻址
方式2—八位自动重装模式
代码:非中断法串口通讯:(电脑发送数据给单片机)
.初始化串口:
1.IE:中断允许寄存器
- `EA`总中断
- `ES`串口中断
- `ET1`定时器1中断中断(可选择)
2.SCON:串行口控制寄存器
`SCON` = 0x50(记住)
3.TMOD-–不可位寻址
#includevoid main()
{
UART_init();//串口初始化
while(1)
{
while(!RI);//接收完成后自动变成1
RI = 0;
SBUF = SBUF;
while(!TI);
TI = 0;
}
}
void UART_init()
{
EA = 1;
SCON = 0x05;//串行口控制寄存器
TMOD &=0x0F;
TMOD |=0x20;//配置TMOD,八位自动重载模式
TH1 = 256-(11059200/12/32)/9600;
TL1 = TH1;
ET1 = 0;
ES = 1;//串行口中断
}
但是main()函数里面也不能一直处理通信,所以要用到串口中断.
串口中断有中断源,对应的中断号是4。
void interrupt1() interrupt 4
{
if(RI)
{
RI = 0;//接收完清0;
SUBF = SUBF;//接收缓存区的内容发送到发送缓存区
}
if(TI)
{
TI = 0;//接收完清0;
}
}
于是main()函数就能处理其它任务。
void main()
{
UART_init();
while(1)
{
;//其它程序
}
}
具体操作:
关键字:51单片机 UART 串口通信
引用地址:
51单片机学习笔记———12.1UART串口通信
推荐阅读最新更新时间:2024-11-10 10:41
充电桩NV400F- Flash语音芯片,支持UART更新音频 降低成本
充电桩是新能源汽车充电的基础设施,是实现新能源汽车快速发展和大众化的重要支撑。新能源汽车采用的是电能,需要经常充电才能行驶,在充电桩的支持下,新能源汽车才有了实际的用途。 充电桩语音方案设计需求 1、要帮助用户更快速地了解充电桩状态,操作流程和注意事项,并及时提醒用户注意安全问题,能够提高用户的使用体验。 2、要帮助用户快速了解充电桩的使用方法,避免因用户操作不熟悉导致充电效率低下的情况出现。 3、充电桩除了可以提示用户充电操作注意事项,还可以及时检测充电桩的故障状态,提高充电系统的安全性。 充电桩语音芯片选型 共享充电桩通常需要经常更换语音内容。随着社会的发展和技术的进步,充电桩所面临的用户、需求以及市场环境都在不断变化
[嵌入式]
8051单片机与RS485应用电路原理图
1 问题的提出 在应用系统中,RS-485半双工异步通信总线是被各个研发机构广泛使用的数据通信总 线,它往往应用在集中控制枢纽与分散控制单元之间。系统简图如图1所示。 图1. RS-485系统示意图 由于实际应用系统中,往往分散控制单元数量较多,分布较远,现场存在各种干扰,所 以通信的可靠性不高,再加上软硬件设计的不完善,使得实际工程应用中如何保障RS-485总 线的通信的可靠性成为各研发机构的一块心病。 在使用RS-485总线时,如果简单地按常规方式设计电路,在实际工程中可能有以下两个问 题出现。一是通信数据收发的可靠性问题;二是在多机通信方式下,一个节点的故障(如死 机),往往会使得整个系统的通信框架崩溃,而且给故障的排查
[单片机]
基于51单片机的pwm直流电机调速
仿真原理图如下 单片机源程序如下: #include reg52.h /********************************************* * 定时器初值 *********************************************/ #define T0HIGH 0xec #define T0LOWW 0x8a /********************************************* * *********************************************/ typedef unsigned char u8; typed
[单片机]
51单片机方波发生器程序100HZ和200HZ按键控制
//本机晶振11.0592,采用stc89c51单片机,P3.2 P3.3两个按键控制方波发生器的输出频率. #include reg52.h #define uchar unsigned char #define uint unsigned int sbit output=P1^7; //输出点 sbit oneset=P3^2; //设置100HZ sbit twoset=P3^3; //设置200HZ uint number1=0; //定时器0高8位 uint number2=0; //定时器0低8位 void main() { TMOD=0x01; TH0=0xee; //任意设定初值 TL0=0x0b; E
[单片机]
基于51单片机的温度+烟雾报警系统设计
一.硬件方案 本设计采用51单片机为核心控制器,利用气体传感器MQ-2、ADC0832模数转换器、DS18B20温度传感器等实现基本功能。通过这些传感器和芯片,当环境中可燃气体浓度或温度等发生变化时系统会发出相应的灯光报警信号和声音报警信号,以此来实现火灾报警,智能化提示。 主要由51单片机+最小系统+LCD1602液晶显示模块+MQ-2烟雾模块+ADC0832模块+DS18B20温度模块+蜂鸣器模块+LED指示灯模块+继电器驱动模块+风扇模块+按键模块;如图: 二.设计功能 (1)LCD1602液晶显示屏实时显示当前的烟雾值和温度值。 (2)温度和烟雾的报警值可以通过按键设定。 (3)当前温度值超过上限时,红灯亮,蜂鸣器
[单片机]
51单片机—8*8LED点阵—09—①
LED点阵,相信肯定知道单片机的人都该知道这个,我也就是一步一步发吧~~ 今天这个就是简单的控制8*8LED点阵亮0~F这16个数字,暂时不加左移啊~~,上移啊~~以及16*16的点阵呢~~ 不过也就这些天都发出来吧~~ 呵呵~~ 8*8LED点阵显示0~F(这里是静态显示) 注意: 用Proteus仿真开始还真的不知道那个是行,那个是列~~ 还得浪费我时间一点点看人家别人的东东~~ 1)红色LED上边为列,下边为行(其它颜色的正好相反,上为行,下为列~~) 2)对于红色来说,上边的列最低位在最右边;下边的行最低位也是恰好相反,在最左边(一会看图就知道了,我的就写反了~~正好可以反过来看了~~) 基本上就这么两点的
[单片机]
基于AT89C51单片机16×16LED汉字点阵滚动显示的设计
LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED显示屏发展较快,本文讲述了基于AT89C51单片机16×16LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术 1 硬件电路组成及工作原理 本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵5部分组成,如图1
[单片机]
51单片机“积木式”实验板原理
本实验板由一块主控板和若干受控子实验板组成。主控板为一单片机最小系统,原理如图2。主控板上由三端稳压器7805和电容C4,C5组成稳压滤波电路,将外部9~l2V左右的直流电压稳压滤波后变成5V,给主控板51单片机IC芯片供电,并从主板CN2和CN5接线柱输出,给外接被控子实验板供电。主控板上按键S1、1OμF电容C1、1OKΩ电阻R1组成按键式复位电路。12MHz晶振X1和30PF电容C2、C3组成晶振电路,接在51单片机IC的18、19脚。40脚、31脚接5V电源,20脚接地。在40脚的IC插座上再加插一个双列锁紧式插座,便于芯片的卸装,同时也便于紧锁式插座损坏后更换。单片机的PO、P1、P2、P3端口通过CN1、CN3、C
[单片机]