51单片机串口通讯详解

发布者:知识智慧最新更新时间:2021-09-02 来源: eefocus关键字:51单片机  串口通讯  在线调试 手机看文章 扫描二维码
随时随地手机看文章

串口,作为单片机程序开发中最常用、最方便,也是应用最广泛的程序调试方法;无论是作为调试工具,打印出调试信息,还是对功能模块进行通信,串口是每个单片机开发人员最常用的单片机外设。


由于大部分51单片机不支持在线调试功能,所以串口作为一种有效的调试功能,所以在51单片机程序开发时,无法进行在线调试,不妨可以多采用串口来进行调试。


1.串口配置


51单片机配置除了需要配置2个8位寄存器SCON、PCON外,还要配置定时器1的控制寄存器TMOD,因为串口在进行收发需要使用定时器来采样。


(1)状态控制寄存器 SCON

SCON 是一个逐位定义的 8 位寄存器,用于控制串行通信的方式选择、接收和发送,指 示串口的状态,SCON 即可以字节寻址也可以位寻址,字节地址 98H,地址位为 98H~9FH。 它的各个位定义如下:

在这里插入图片描述

SM0 和 SM1 是串口的工作方式选择位,2 个选择位对应 4 种工作方式,如下表,其中 Fosc 是振荡器的频率。

在这里插入图片描述

(2)电源与波特率控制寄存器

控制寄存器 PCON 也是一个逐位定义的 8 位寄存器,目前仅仅有几位有定义,如下所示:

在这里插入图片描述

仅最高位 SMOD 与串口的控制有关,其他位与掉电方式有关。PCON 的地址为 87H 只能按 字节寻址,SMOD 是串行通信波特率系数控制位,当串口工作在工作方式 1、2 时,若使用 T1 作为波特率发生器其 SMOD=1 则波特率加倍。


(3)定时器控制模式寄存器

TMOD是定时器、计数器模式控制寄存器,它是一个逐位定义的8为寄存器,但只能使用字节寻址

在这里插入图片描述

当串口工作在工作方式0和2是,波特率固定,方式0时fosc/12;方式2时fosc/32或fosc/64(根据SMOD判断)。当串口工作在方式1时,波特率=(2^SMOD/32)*(单片机时钟频率/(256-X)),X是初值;C/T#为定时器和计数器选择位,0为定时器,1为计数器


2.串口通用程序

为了有较好的通用性,将串口程序配置为一个H文件和C文件,往后只要开发51单片机程序,都可以将该两个文件复制在工程中直接使用,无须修改。

(1)uart.H


#ifndef _UART_H_

#define _UART_H_


#include "reg52.h"


void UartInit(void);

void Send_string(unsigned char *c);

void Send_Data(unsigned char DAT);


#endif


(2)uart.c


#include "uart.h"


//串口初始化

void UartInit(void)

{

/*串口初始化 */

TMOD = 0x20;   //定时器T1使用工作方式2

SCON = 0x50;   //工作方式1,,允许接收   

PCON = 0x10;

TH1 = 253;        // 设置初值,波特率9600bps

TL1 = 253;

TR1 = 1;          // 开始计时

ES = 1;         //打开接收中断

EA = 1;           // 打开所以中断   

TI = 0;

RI = 0;

}


void Send_Data(unsigned char DAT)

{

ES = 0;

TI=0;

SBUF = DAT ;

while(TI==0);

TI=0;

ES = 1;

}


void Send_string(unsigned char  *c)

{

while(*c != '')

{

Send_Data(*c++);

}

}


void RSINTR() interrupt 4 using 2

{

EA=0;

if(TI==1) //发送中断   

{

TI=0;

}


if(RI==1) //接收中断   

{


RI=0;  


}

EA=1;

}

关键字:51单片机  串口通讯  在线调试 引用地址:51单片机串口通讯详解

上一篇:51单片机串口通信(UART)
下一篇:stc51单片机串口通信程序

推荐阅读最新更新时间:2024-11-03 10:43

一种51单片机虚拟实验室的建立方法
0 引 言 单片机的学习是一个实践性很强的过程,目前的单片机实验室基本采用硬件仿真设备搭建,受资金和场地的限制,单片机实验室配置的灵活性和完整性受到一定的限制。针对这些问题,在此提出一种建立基于个人PC和各种软件的单片机个人虚拟实验室方案。所谓“虚拟实验室”,就是将计算机上的各种虚拟仪器,按实验要求和设计原理,虚拟出与现实相同的实验系统,进而在这个系统上完成整个实验。与传统实验模式相比,虚拟实验具有比较明显的优势,例如,涉及的实验内容全面,硬件投入少,学生可自行实验,实验过程中损耗小,与工程实践最为接近等。一般的虚拟实验室仅包含单片机系统的调试,本文在此基础上又加入了与上位机的联合调试。 在此,以使用VB通过RS 232串
[单片机]
一种<font color='red'>51单片机</font>虚拟实验室的建立方法
51单片机P0口使用上拉电阻的作用
P0口作为I/O口输出的时候时,输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态,也就是说P0 口不能真正的输出高电平)。给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。P0作输入时不需要上拉电阻,但要先置1。因为P0口作一般I/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据。 由于P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。 1.一般51单
[单片机]
stm8s 串口通讯源码程序(8位数据,奇校验,2个停止位)
串口初始化第一步,配置波特率,波特率是和时钟相关的,因此首先要配置时钟,时钟的配置参见上一篇博客。stm8s主时钟设置 如果在串口初始化中,如果串口时钟没有打开,请在主时钟配置中打开串口时钟。 配置波特率,stm8s的波特率,时钟,波特率寄存器值的计算相比avr和51又是巨大的进步,stm8s算波特率寄存器值只要Fmaster/波特率就可以了,不需要加加减减。 但是在写入寄存器时需要注意。 一,先写BBR2,再写BBR1。 二,BBR2写的是高四位和低四位,BBR1是中间八位,例如,Fmaster = 8 mhz,波特率1200,求得BBR寄存器值为8000000/1200 = 0x1A0A,那么写入寄存器的值
[单片机]
stm8s <font color='red'>串口通讯</font>源码程序(8位数据,奇校验,2个停止位)
51单片机音乐盒设计 按键可以上一曲,下一曲,开始或暂停
功能介绍: 本设计采用STC89C51/52(与AT89C51/52、AT89S51/52通用,指定单片机请留言)单片机做为主控制器 主要功能: 单片机内置8首歌曲,按键可以上一曲,下一曲,开始或暂停。电位器可以调节音量。LM386驱动喇叭,够响亮! 使用说明: 一共4个按键 上面那个独立的是复位按键,按下去程序从头执行,详情请看视频讲解文件夹中的最小系统介绍。 下面3个按键分别是:上一曲、开始/暂停、下一曲。 单片机源程序如下: ////////////////////////////////////////////// //51单片机音乐播放器程序 // //共三个按键:上
[单片机]
通过51单片机定时器/计数器实现精确延时
  MCS-51单片机内部共有两个16位可编程定时器,计数器,即TO、Tl。既有定时功能,又有计数的功能。每个定时器都是由两个8位的特殊功能寄存器THi和TLi组成(i=0、1)。TMOD是TO和Tl的工作方式控制寄存器,TCON是TO和Tl的运行状态控制寄存器。在实际应用时,应首先根据需要对这些寄存器进行初始化,即设置TO和Tl的工作方式并对TO和Tl定时器装入初始值以得到精确的定时时间。TO和Tl的工作方式及运行状态是由TMOD和TCON两个特殊功能寄存器控制的,而TMOD和TCON是由用户所编的程序控制的。      定时器的核心是一个加l计数器,加l计数器的脉冲有两个来源:一个是系统时钟振荡器,另一个是外部脉冲,计数器对脉
[单片机]
通过<font color='red'>51单片机</font>定时器/计数器实现精确延时
基于AT89C51单片机的LED汉字显示屏的设计与仿真
O 引言 LED显示屏是利用发光二极管点阵模块或像素单元组成的平面式显示屏幕。它具有发光率高、使用寿命长、组态灵活、色彩丰富以及对室内外环境适应能力强等优点。并广泛的用于公交汽车、商店、体育场馆、车站、学校、银行、高速公路等公共场所的信息发布和广告宣传。LED显示屏发展较快,本文讲述了基于AT89C51单片机16×16LED汉字点阵滚动显示的基本原理、硬件组成与设计、程序编写与调试、Proteus软件仿真等基本环节和相关技术。 1 硬件电路组成及工作原理 本产品采用以AT89C51单片机为核心芯片的电路来实现,主要由AT89C51芯片、时钟电路、复位电路、列扫描驱动电路(74HCl54)、16×16LED点阵5部分组成,
[单片机]
基于AT89C<font color='red'>51单片机</font>的LED汉字显示屏的设计与仿真
基于51单片机中断跳出指令“RETI”浅议
RETI =RET指令+通知CPU中断服务已结束。 最近在基于51单片机编程的过程中出现了个很奇怪的问题 程序执行中在寄存器EA=1,ET0=1,TR0=1条件下,单TF0=1时并没有执行中断 。在有过单片机中断编程经历者都知道当EA=1,ET0=1的条件下,满足TF0=1时,如果在此期间没有更高优先级的中断执行的情况下定时器中断0必定会产生中断响应。而在我所编写的程序中仅使用了定时器中断0,一个中断也就谈不上存在优先级问题。经过我对自己程序的检查并对各教材中断程序对比发现我的程序中的一个问题:由于中断的不可控性决定其跳出中断返回主程序的不确定,而由于程序需要中断跳出后能跳到指定的地址。为了解决这个问题我在中断结束的地方
[单片机]
51单片机逻辑运算指令表与示例
1.逻辑运算 指令 的一般性说明 与、或、异或的逻辑运算指令可以Acc或direct为目标。但是以direct为目标时,另一操作数只能是Acc或立即数。 与、或、异或是对位逻辑运算。 其他逻辑运算指令只对Acc操作。 小循环不影响Cy,大循环Cy在循环圈内。 除了RLC和RRC,逻辑运算指令不影响P以外的标志位。 2.与、或、异或的特殊用途 用ANL指令屏蔽指定位 例:ANL A,#0FH ;屏蔽高4位 用ORL指令将指定位置1 例:ORL A,#0FH ;将低4位置1 用ORL指令拼接一个字节 例:ANL A,#0FH ANL B,#0F0H ORL A,B 用XRL指令将指定位取反
[单片机]
<font color='red'>51单片机</font>逻辑运算指令表与示例
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved