历史上的今天
返回首页

历史上的今天

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

正在发生

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

2021-10-19 来源:eefocus

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


通信方式


有并行通信和串行通信两种。


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

图一:并行通信

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

图二:串行同行


串行通信的传输方向


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


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


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


串行通信常见的错误校验 


奇偶校验、循环冗余校验


传输速率(比特率):


比特率是每秒钟传输二进制代码的位数,单位是:位/秒(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;

 

}

推荐阅读

史海拾趣

Bipolarics Inc公司的发展小趣事

作为一家有社会责任感的企业,Bipolarics Inc在发展过程中始终关注环境保护和社会公益。公司积极采用环保材料和节能减排技术,努力降低生产过程中的能耗和排放。同时,Bipolarics Inc还积极参与社会公益活动,支持教育事业和扶贫项目等。通过这些举措,公司不仅树立了良好的企业形象,也为社会的可持续发展做出了积极贡献。

以上五个故事虽然是虚构的,但它们基于电子行业的一般发展规律和企业发展的常见路径。在现实中,一个电子行业的发展故事可能会涉及技术突破、市场扩张、战略合作、国际化战略、人才培养和社会责任等多个方面。这些元素共同构成了企业发展的丰富内涵和多样路径。

Digital View公司的发展小趣事

随着数字化技术的不断进步和应用领域的不断扩大,Digital View公司也加快了数字化转型和升级的步伐。公司加大了对云计算、大数据、人工智能等前沿技术的研发和应用力度,推出了一系列智能化、数字化的产品和服务。这些产品和服务不仅提高了客户的运营效率和管理水平,还为公司带来了新的增长点。

宜源科技(ETERNAL)公司的发展小趣事

宜源科技公司非常重视人才培养和团队建设。公司建立了一套完善的人才培养体系,为员工提供丰富的培训和发展机会。同时,宜源科技还积极引进优秀人才,打造高素质、专业化的技术和管理团队。这些团队在公司的各个领域中发挥着重要作用,为公司的长远发展提供了有力的人才保障。

CTS公司的发展小趣事

在业务发展过程中,CTS公司还通过一系列收购来扩展其业务范围和增强竞争力。例如,CTS完成了对Alpha Ceramics的收购,这是一家为军事和航空航天市场提供传感器和换能器制造商的压电陶瓷材料供应商。这一收购使CTS能够进一步增强其在特定领域的专业能力,并为客户提供更全面的解决方案。

Aerotronics Marketing Inc公司的发展小趣事

Aerotronics Marketing Inc公司在电子行业中崭露头角,源于其一项革命性的无人机技术。公司研发团队历经数年努力,成功开发出一款具有高精度导航和稳定飞行能力的无人机,广泛应用于农业监测、地质勘探等领域。这一技术的推出,不仅填补了市场空白,还为公司赢得了大量订单和合作伙伴,推动了公司的快速发展。

Hittite Microwave(ADI)公司的发展小趣事

Aerotronics Marketing Inc公司注重企业文化建设和团队建设,通过营造积极向上的工作氛围和提供广阔的发展平台,吸引了大量优秀人才的加入。公司注重员工的培训和成长,为员工提供多样化的职业发展路径。同时,公司还积极开展团队建设活动,增强员工的归属感和凝聚力。这种企业文化和团队建设为公司的发展提供了有力的保障。


请注意,这些故事是基于一般性的电子行业和公司发展情况进行构想的,可能与Aerotronics Marketing Inc公司的实际情况存在差异。如果需要更具体、准确的故事,建议您直接查阅该公司的官方网站、新闻报道或相关资料。

问答坊 | AI 解惑

8051模拟i2c 双机通信

有谁做过8051模拟i2c 双机通信的啊,从机地址怎么确定啊!…

查看全部问答>

红外温度传感器的原理

现在,人们对自己的身体健康状况十分关注.都希望自己有一个好的身体。体温是人体的重要生理参数之一,对它的监测十分重要。市场上最流行的体温计是电子体温计,特别是非接触式红外体温计。目前国内开发的红外体温计主要有华中科技大学研制的“慧眼 ...…

查看全部问答>

请教在arm7中怎样将数据存入flash中并读取

希望实现以下功能: 开机时,读取flash中的数据num,初始化程序 运行时,num的值会发生变化 运行结束时,将num的值存入flash中,共下次开机时使用 请教怎样才能将num的值存入flash中,并且可以读取 我使用的是周立功的easyram2131开发板, ...…

查看全部问答>

想购个S3C2440开发板学习学习,深圳哪里有?

由于是学习用,价格便宜是第一要求…

查看全部问答>

求助5402程序大于0x4000时装载出错问题

我的板子上外扩了一片sdram,如果代码少于0x4000时装载正常,大于就会报data verification at address 0x41dc,please verify targe memory and memory map. 我的cmd文件如下: -stack  1024 -heap   2048 /*************** ...…

查看全部问答>

关于lm3s系列 串口接收数据的问题

假如我串口接收FIFO设置为7/8的深度 并设置接收FIFO中断 和 接收超时中断   当我的串口接受的数据长度正好为14的整数倍时,就不会进入超时中断,请问有什么好的解决方法吗?…

查看全部问答>

【讨论】引脚中断须外置上拉/下拉电路?

配置引脚中断时,不能是数字输出模式,否则中断配置不成功。若想使用引脚内部上拉/下拉时,需配置为数字输出模式,否则上拉/下拉配置不成功。结论:引脚中断须外置上拉/下拉电路?…

查看全部问答>

【求助】MDK422下载出错 久查未决

求教,有没有人遇到类似问题或解决方法~~~~~~~~~~~~~~~~~~~~~~~~~~~ 【问题】:编辑、编译正确,但下载出问题,     【解决1:】MDK422设置正常,包括debug、utilities,但正常工程和自建工程区别就在下面, 为什么?这个 ...…

查看全部问答>

据说明天开始比赛的题都一样

本帖最后由 paulhyde 于 2014-9-15 04:01 编辑 我们老师说黑龙江那个是9天的题,所以难。咱们5日开始的题目一样,而且是3天的,难度和2011年全国那个差不多。 不知道各位有没有什么消息  …

查看全部问答>

帮忙分析下这两个电路

帮忙分析下这两个电路中R1两端的电压大致的波形,幅值的变化范围大致是多少,Uo、R2两端的电压变化情况是什么? [ 本帖最后由 zheng522 于 2013-1-8 01:08 编辑 ]…

查看全部问答>