历史上的今天

今天是:2024年10月19日(星期六)

正在发生

2021年10月19日 | 51单片机的串口通信(一)

发布者:浊酒 来源: eefocus关键字:51单片机  串口通信  1602显示 手机看文章 扫描二维码
随时随地手机看文章

随着多微机系统的广泛应用和计算机网络技术的普及,计算机的通信功能愈来愈显得重要。计算机通信是指计算机与外部设备或计算机与计算机之间的信息交换。


通信方式


并行通信串行通信两种。


并行通信通常是将数据字节的各位用多条数据线同时进行传送 。

图一:并行通信

串行通信是将数据字节分成一位一位的形式在。

图二:串行同行


串行通信的传输方向


单工是指数据传输仅能沿一个方向,不能实现反向传输。


半双工是指数据传输可以沿两个方向,但需要分时进行。


全双工是指数据可以同时进行双向传输。


串行通信常见的错误校验 


奇偶校验、循环冗余校验


传输速率(比特率):


比特率是每秒钟传输二进制代码的位数,单位是:位/秒(bps)。


80C51串行口的结构

图三:串口结构

有两个物理上独立的接收、发送缓冲器SBUF,它们占用同一地址99H ;接收器是双缓冲结构 ;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。


串行口的控制寄存器(SCON)(有点复杂,没咋整明白,以后用的时候再说)


用以设定串行口的工作方式、接收/发送控制以及设置状态标志:

图四:SCON

SM0和SM1为工作方式选择位,可选择四种工作方式:

图五:工作方式

SM2,多机通信控制位,主要用于方式2和方式3。当接收机的SM2=1时可以利用收到的RB8来控制是否激活RI(RB8=0时不激活RI,收到的信息丢弃;RB8=1时收到的数据进入SBUF,并激活RI,进而在中断服务中将数据从SBUF读走)。当SM2=0时,不论收到的RB8为0和1,均可以使收到的数据进入SBUF,并激活RI(即此时RB8不具有控制RI激活的功能)。通过控制SM2,可以实现多机通信。在方式0时,SM2必须是0。在方式1时,如果SM2=1,则只有接收到有效停止位时,RI才置1。


REN,允许串行接收位。由软件置REN=1,则启动串行口接收数据;若软件置REN=0,则禁止接收。


TB8,在方式2或方式3中,是发送数据的第九位,可以用软件规定其作用。可以用作数据的奇偶校验位,或在多机通信中,作为地址帧/数据帧的标志位。在方式0和方式1中,该位未用。


RB8,在方式2或方式3中,是接收到数据的第九位,作为奇偶校验位或地址帧/数据帧的标志位。在方式1时,若SM2=0,则RB8是接收到的停止位。


TI,发送中断标志位。在方式0时,当串行发送第8位数据结束时,或在其它方式,串行发送停止位的开始时,由内部硬件使TI置1,向CPU发中断申请。在中断服务程序中,必须用软件将其清0,取消此中断申请。


RI,接收中断标志位。在方式0时,当串行接收第8位数据结束时,或在其它方式,串行接收停止位的中间时,由内部硬件使RI置1,向CPU发中断申请。也必须在中断服务程序中,用软件将其清0,取消此中断申请。 


PCON中只有一位SMOD与串行口工作有关 :

图六:PCON

SMOD(PCON.7)  波特率倍增位。在串行口方式1、方式2、方式3时,波特率与SMOD有关,当SMOD=1时,波特率提高一倍。复位时,SMOD=0。 


波特率的计算(用波特率计算器)


方式0的波特率 =  fosc/12


方式2的波特率 =(2SMOD/64)· fosc


方式1的波特率 =(2SMOD/32)·(T1溢出率)


方式3的波特率 =(2SMOD/32)·(T1溢出率)


 T1 溢出率 = fosc /{12×[256 -(TH1)]}


在单片机的应用中,常用的晶振频率为:12MHz和11.0592MHz。所以,选用的波特率也相对固定。常用的串行口波特率以及各参数的关系如表所示。

图七:波特率

串口如何使用 


确定串行口控制(编程SCON寄存器);


确定T1的工作方式(编程TMOD寄存器);


计算T1的初值,装载TH1、TL1;


启动T1(编程TCON中的TR1位);


PC和单片机通信:


#include

 

typedef unsigned char uchar;

 

void Serial_comInit()

{

SCON=0X50; //设置为工作方式1 ,既然是方式一,自然要确定波特率,设置定时器1

TMOD=0X20;//8位重装载

PCON=0X80;

TH1=0xF3;//波特率4800

TL1=0XF3;

ES=1; //打开通信中断

EA=1; //打开总中断

TR1=1; //打开计数器

}

 

void main(void)

{

Serial_comInit();

while(1);

}

 

void communication() interrupt 4

{

uchar receiveData;

receiveData=SBUF;//出去,接,收到的数据

RI = 0;//清除接收中断标志位

SBUF=receiveData;//将接收到的数据放入到发送寄存器

while(!TI); //等待发送数据完成

TI=0; //清除发送完成标志位

}

 


 电脑发送数据到单片机:


(来源:https://blog.csdn.net/u014453898/article/details/57123007)


 

#include

 

#define uchar unsigned char

 

#define uint  unsigned int

uchar buf;

 

#define led P2

 

void main(void)

 

{

 

SCON=0x50;//设定串口工作方式0101 0000

 

PCON=0x00;

 

TMOD=0x20;

 

EA=1;

 

ES=1;

 

TL1=0xfd;//波特率9600

 

TH1=0xfd;

 

TR1=1;

 

while(1);

 

}

 

 

 

//串行中断服务函数

 

void serial() interrupt 4

 

{

 

ES=0; //暂时关闭串口中断

 

RI=0;

 

buf=SBUF; //把收到的信息从SBUF放到buf中。

 

switch(buf)

 

{

 

case 0x31: led=0xfe;break;   //二进制 0011 0001  十进制 49 控制字符 1  16进制 0X31

 

case 0x32: led=0xfd;break; //1111 1101

 

case 0x33: led=0xfb;break;

 

case 0x34: led=0xf7;break;

 

case 0x35: led=0xef;break;   

 

case 0x36: led=0xdf;break;

 

case 0x37: led=0xbf;break;

 

case 0x38: led=0x7f;break;

 

}

 

ES=1; //重新开启串口中断

 

SBUF=buf;

while(!TI);

TI=0;

 

}

关键字:51单片机  串口通信  1602显示 引用地址:51单片机的串口通信(一)

上一篇:51单片机双向通信实例
下一篇:C51单片机串口工作的四种方式总结

推荐阅读

全球连接和传感领域的技术领军企业泰科电子(TE Connectivity,以下简称“TE”)将携严苛航空航天环境下的电气互联解决方案亮相2018中国国际航空航天博览会,为本地客户带来创新性系统连接解决方案,帮助飞机平台享受更低成本,更高效电力及数据连接,助力中国航空工业智能化升级。新一轮工业革命下,中国制造核心聚焦于“中国装备”,航空制造业作为先进...
1 前言美国Microchip公司的PIC16系列单片机是一种新型的CMOS工艺的8位单片机。其中,PIC16FXX单片机的程序存储器为电可擦除闪速存储器(flash),可多次修改程序,甚至可以在线编程。PIC16F83和PIC16F84片内数据存储器除RAM外,还有64字节的EEPROM,可以当作一般的或非易失性的数据存储器使用,简单方便。它还具有片内上电复位、延时电路、看门狗电路等。...
据外媒报道,美国专利商标局(U.S. Patent and Trademark Office)公布了苹果公司泰坦项目相关的一项专利,能够帮助自动驾驶汽车安全变道。(图片来源:https://www.patentlyapple.com)苹果公司指出,该项专利描述了车辆自动执行变道操作的综合决策和运动规划解决方案。专利系统所包含的决策组件可以确定自动驾驶汽车所要遵循的行为模式,运动规划组...
高频电流探头主要是针对浮地系统的测量。电源系统测试中经常要求测量三相供电中的火线与火线,或者火线与零(中)线的相对电压差,很多用户直接使用单端探头测量两点电压,导致探头烧毁的现象时有发生。采用特殊的电源供电模块,使高频电流探头拥有更高的稳定度以及更低的噪声。其LVC高精度系列的高频电流探头,内部元件采用极低的温度系数和电压系数,可...

史海拾趣

问答坊 | AI 解惑

低噪声晶体管放大器的设计

摘要以实现声频放人器低澡声化为出发点,阐述了具体设计的几个方面.从低噪声放大器设计的基本原理和方法入手,对晶体管放人器的噪声模型作了分析,并推导出一种实用的最佳源电阻近似求法.还对系统电路的低噪声设计略加探讨.…

查看全部问答∨

嵌入式系统建模资料

台湾UML专家高焕堂讲解嵌入式系统建模的好书,下面是书的内容简介:      UML是当今最流行的标准建模语言,它与嵌入式系统设计愈来愈密切。本书深入浅出地介绍 了两者之间的密切关系,并通过精彩的实例讲解,让读者迅速掌握U ...…

查看全部问答∨

单电源运放图集

本帖最后由 paulhyde 于 2014-9-15 09:05 编辑 单电源运放图集 翻译自TI的《A Single-Supply Op-Amp Circuit Collection》 [ 本帖最后由 open82977352 于 2010-1-22 09:42 编辑 ]  …

查看全部问答∨

如何用定时器T2控制电机移动到一定距离自动停下,那位高手可提供代码或方法

 Atmel公司的AT89C52有定时/计数器2,可利用T2的加减计数功能.T2有两个输入端,T2(P1.0)为脉冲输入端,T2EX(P1.1)为加减计数控制端。利用90°相差的信号可以实现加减计数。圆度仪的电机I 控制电感测微仪的上下位置运动,速度的大小由数据采集板的D/A ...…

查看全部问答∨

请问下GPSONE怎么样改变operation mode?

发起一次GPSONE就相当于建立一次DO连接,这个可以通过QXDM信令中看到, 我现在默认的operation mode = MS-assisted,我试过将operation mode 设置成MS-Based Mode或者tandalone mode,但是都不成功,无法建立DO连接,请问如何变化模式到MS-Based Mode ...…

查看全部问答∨

请教一个运行l2tp客户端守护进程出现不能加载动态库的问题

在嵌入式开发板上移植l2tp客户端rp-l2tp后运行l2tpd守护进程出现could not dload sync-pppd.so:File not found,但在lib下是有sync-pppd.so的,在板子上是无法设置动态库搜索路径的,有那位大虾作过或者是碰到过类似的问题的希望能指点一二,谢谢!…

查看全部问答∨

XIPKERNEL.BIN下载出错?

XIPKERNEL.BIN下载出错?如下所示,我将所有文件都包含到xipkernel里,下载到ARM时缺认为格式错误, 请问什么原因,是EBOOT版本问题吗? Download BIN file information: ----------------------------------------------------- [0]: Base A ...…

查看全部问答∨

一封来自大四学生的信,虚心请教

    开始做一下自我介绍吧,我是一名湘潭大学05级自动化专业的学生。性格能内能外,觉得 还应该不断完美。下面说一说我大学前面三年的生活吧。     大一大二没学什么课外的知识,平平淡淡,如果参加社团不算的话。大三有机会 ...…

查看全部问答∨

高分请教简单问题:AT89s52的访问外部地址问题

我的硬件原理图如下链接:请放心打开! http://www.dzjia.cn/html/jiejuefangan/20070619/24939_2.html 如图示:P2.7接到RC500的NCS片选脚上,这时我想要访问RC500的内部地址,我就应该先定义要访问的地址,如下: #define Page_Sel      ...…

查看全部问答∨

103VE的SPI3使用求助

系统SPI1和SPI2工作正常,SPI3初始化后引脚状态都不对,请版主指点,谢谢! RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOB, ENABLE); RCC_APB1PeriphClockCmd(RCC_APB1Periph_SPI2, ENABLE); GPIO_InitStructure.GPIO_Pin = GPIO_Pin_13 ...…

查看全部问答∨
小广播
设计资源 培训 开发板 精华推荐

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

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

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

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