51 单片机UART 串口通信 方式1 实现

发布者:徽宗古泉最新更新时间:2016-05-17 来源: eefocus关键字:51单片机  UART  串口通信 手机看文章 扫描二维码
随时随地手机看文章
1  51串行口结构

51单片机的UART串行通信是基于其串行口的可编程硬件结构,只要用正确的程序代码通过初始化串行口对应寄存器的形式将其串行硬件结构初始化,再编写符合此串行口通信的程序代码便能够实现串行通信,其硬件结构决定了编程机制( 当然还要靠51芯片内CPU等机制 )。此结构具有UART( 通用异步收发器 )的全部功能,能同时进行数据的发送和接收,也可作为同步移位寄存器使用。此结构集成于单片机内部。

51 单片机UART 串口通信 方式1 实现

 

 

Figure1:51串行口结构

 

2  51串行口通信编程机制

决定编程机制的先决条件是51单片机的硬件结构及51芯片内部CPU的执行机制。根据串行通信口硬件结构,实现UART通信可以分为两步:

(1)初始化串行通信口( UART )

  •  配置SCON:设定串口方式( SM0及SM1位配置4种方式 );串口是否要接收数据(REN位 )
  • 设定PCON寄存器的SMOD位(若非串口方式0 )
  • 若串口为方式1和方式3,则需要配置TMOD:选择定时器1并配置其初值装载方式(MI M0位),并设置TH1,TL0的初值以确定通信的波特率(由波特率的计算公式 ),然后配置TCON:开启定时器1( TR1 )。
  • 允许使用中断( ES ),开启UART中断( EA )

 可以这些寄存器的配置含义可以查看相应的知识点:中断配置IE寄存器、定时/计数方式配置寄存器TMOD、定时/计数控制寄存器及通信寄存器SCON寄存器笔记。

 

(2)程序实现:编写发送/接收数据代码及中断服务程序

注:TI及RI的置位可查看SCON寄存器TI  RI被置位的条件

[1]发送的数据需要通过程序指令“SBUF =数据;”来将数据送往串行发送缓冲寄存器中,在此条语句后,要用循环判断SCON寄存器中的TI位是否被硬件置位1(表示发送完毕),等待发送完毕,TI置位被置为1时会进入串行中断服务程序[由此不能在串行中断服务程序里面将TI置0,因为从循环里面进入中断后会返回到循环语句中来,所以要在串行中断服务程序之外将TI置0,置0的目的是提供下一次数据发送成功的依据或进入中断服务器程序 ],需要用程序代码将TI重新置为0;然后再由CPU控制的时序将数据从TXD( P3.1 )脚发出,经过连接的串口线到从设备(接收数据的设备 )。

[2]获取接收到数据时需要通过程序指令“存数据变量=SBUF;”将串行接收缓冲寄存器接收到的数据读取到程序中来,当接收到数据完毕后,RI会被硬件置位1,此时也会进入串行中断服务程序,需要用程序指令将RI重新置位0。当然接收数据是由RXD( P3.0 )引脚完成。

[3]串行中断服务程序的中断号为4,所以编写串行中断服务程序时需要有以下格式:

void 函数名() interrupt 4

{

         中断服务程序内容

}

串行中断服务函数当TI或RI被硬件置位1时才被系统调用。TI被硬件置1的情况是,当串行发送缓冲寄存器内的数据被通过TXD( P3.1 )发送完毕时( 不同的串口方式置1条件不同 )不是指将数据存入串行发送缓冲器中时TI会被置1,同理RI被置1的情况是当RXD( P3.0 )接收到数据将此数据按位存入串行接收缓冲寄存器内完毕时( 不同串口方式置1的条件不同 )不是指从串行接收缓冲寄存器读完数据时RI会被置1。这个数据的长度和TI( RI )被置位1根据串行通信方式不同而不同。

 

对于用程序来实现51单片机中的串行通信还需要明确两点(与其它部分的联系):

(1)在51单片机串行通信的方式1和方式3中,波特率由定时器1的溢出率决定。

(2)SBUF为特殊功能寄存器,它在程序中的两种不同的指令形式表示不同的含义,当在程序中用写指令“SBUF=a;”时,表示将a存入串行数据发送缓冲寄存器中;当在程序中使用读指令“a=SBUF;”时,表示向串行数据接收缓冲寄存器读数据并将得到数据赋值于a。接收器具有双缓冲结构,即在从接收寄存器中前一个已经收到的字节之前,便能接收第二个字节,如果第二个字节已经接收完毕,第一个字节还没有被读出,则第一个字节就损失( 被覆盖 )。而发送器中的数据是由CPU控制的,所以不必程序用户担忧。

 

3  程序实现串行通信

程序的大体框架为main主函数、串行中断服务程序、子函数(初始化串口、延时函数,字符串处理函数等)

 

(1)首先是用程序实现串行通信的初始化

//串口初始化

void UART_Init(void)

{

         SCON  = 0x40;                   //串口方式1

         PCON  = 0;                     //SMOD=0

         REN  = 1;                               //允许接收

        

         TMOD = 0x20;                            //定时器1定时方式2

         TR1  = 1;                                   //启动定时器

         ES  = 1;                                                              //UART中断

         EA  = 1;                                                              //中断使能

}

 

(2)用程序实现发数据

将要发送的数据赋值给SBUF即可。

SBUF = aChar;

while(TI == 0);//等待,直到发送成功

TI = 0;

这是发送一次数据(如一个字符,在串口发送方式1下占10个位)的代码,可单独写成函数。此种写法不可以将“TI = 0;”写在中断函数中,不然会造成死循环。

 

(3)在中断函数中接受数据

不管发送数据成功还是接受到数据都会进入到中断程序中,故而在中断程序中判断是否RI被置位为1,如是则表示收到了数据。

void UART_Receive_Int() interrupt 4

{       

         if(  RI == 1)

         {

                   RI     = 0;           

                   if(  index < 1 )

                   {

                           Receive[index] = SBUF;

                            index++;

                   }else{

                            index  = 0;

                   }                

         }       

}

然后只需要在主程序main函数中调用串行口初始化函数及用一定的逻辑调用数据发送函数即可。

 

(4)通过串口调试助手来观察程序执行效果

 

发数据显示

设置串口调试助手:

51 单片机UART 串口通信 方式1 实现

 

 

Figure2:向调试助手发数据显示

在串口调试助手中按照下划线部分设置后,结果显示区域就会显示由程序发将上来的数据。

 

串口调试助手往单片机发送数据并再显示到串口调试界面之上

51 单片机UART 串口通信 方式1 实现

 

 

Figure3:调试助手向单片机发送数据显示界面

对串口调试助手的设置除了发送数据之上的设置之外还需要在表格中填入字符串,然后点击表格下画圈使之为“停止循环发送”,然后就可以将收到的数据同将要发送的数据一起发送到串口调试界面之上来。

 

此次笔记记录完毕。

关键字:51单片机  UART  串口通信 引用地址:51 单片机UART 串口通信 方式1 实现

上一篇:C语言实现51单片机中的PID算法
下一篇:51 线反转法 实现矩阵键盘检测

推荐阅读最新更新时间:2024-03-16 14:54

提高51单片机TCP通信效率的软件方法
1 嵌入式TCP/IP通信系统 目前,工业控制领域典型的80C51嵌入式TCP/IP通信系统,主要有两种硬件方案,(1)采用80C51+网卡芯片,在单片机中实现TCP/IP协议并接入Internet;(2)采用固化TCP/IP协议的硬件芯片自动解析协议,实现Internet接入,后者程序已固化在硬件中,一般难以通过软件方法提高通信速率,因此,主要分析提高前一种方案的通信速率,其接口电路如图1所示。 图1 RTL8019AS与51单片机的接口电路 由于单片机中断资源有限,嵌人式系统与以太网通信主要采用的是软件查询方式,而不是中断响应方式,从以太网上传来的数据会先存至芯片上16 kB的数据缓存区,当单片机空闲
[单片机]
提高<font color='red'>51单片机</font>TCP通信效率的软件方法
51单片机模拟解码2272程序
以下是软件模拟PT2272解码程序,索性就放上来,大家参考一下。 软件解码程序(仿真PT2272) ; ;晶体频率为11.0592MHz ; 本程序中的时间定位关系只适用于接3.3M振荡电阻的PT2262解码 ; 使用其它阻值电阻时,应将定位时间按电阻比例缩放 ;下面的程序中 REM 为信号输入端 ; RECEIVE 检测到有效信号标志位 ; ENABLE_DETE 连续按键标志 ; 3AH,3BH用作定时器 ; ; PT2262共12根地址线 ; ;31H,32H:接收的前8 位地址编码 ; ;33H,30H:接收的后4 位地址编码(若最后4位用作数据端,则只须读第33H单元的内容即可) ; 当用作数据端时,P
[单片机]
实验八--uart
一。环境   系统:ubuntu12.04   开发板:jz2440   编译器:gcc 二。说明 有空补上 三。代码 head.S 1 @****************************************************************************** 2 @ File:head.S 3 @ 功能:设置SDRAM,将程序复制到SDRAM,然后跳到SDRAM继续执行 4 @****************************************************************************** 5
[单片机]
PC机与多MCS-51单片机间的串行通信设计
1 引 言   在测控系统和工程应用中,常遇到多项任务需同时执行的情况,因而主从式多机分布式系统成为现代工业广泛应用的模式。它们大多由IBM-PC微机和MCS-51单片机组成。单片机功能强、体积小、价格低廉、开发应用方便,尤其具有全双工串行通讯的特点,在工业控制、数据采集、智能仪器仪表、家用电器方面都有广泛的应用。同时,IBM-PC机正好补充单片机人机对话和外围设备薄弱的缺陷。各单片机独立完成数据采集处理和控制任务,同时通过通信接口将数据传给PC机,PC机将这些数据进行处理、显示或打印,把各种控制命令传给单片机,以实现集中管理和最优控制。   故IBM-PC机(上位机)与各MCS-51单片机(下位机)之间的通信显得尤其重要。本文主要
[单片机]
PC机与多MCS-<font color='red'>51单片机</font>间的串行通信设计
51单片机的启动文件内容
在我们使用kei c51创建一个 51单片机 项目时,会有如下图所示的提示: keil 创建新项目时,提示是否添加启动文件 一般情况下,需要选择“是”。当然,也可以选择不加。那么,这个启动文件的作用是什么?什么情况下需要加,什么情况下可以不加? 今天我们就来详细了解一下这个启动文件的内容,看明白这个内容后,我们就会有种恍然大悟的感觉:“哦,原来是这样啊!” 启动代码第一段 ▼以下是启动代码原文第一段: $NOMOD51 ;------------------------------------------------------------------------------ ; This file is
[单片机]
<font color='red'>51单片机</font>的启动文件内容
高速DSP与PC实现串口通信的方法
  数字信号处理器(Digital Signal Processor,DSP)在图形图像处理、高精度测量控制、高性能仪器仪表等众多领域得到越来越广泛的应用,实际运用中,通常须将DSP采集处理后的数据传送到PC机,然后进行存储和处理。   T1公司的TMS320VC33微处理器具有性价比高,同时,该芯片的I/O电平、字长、运行速度、串口功能具有大多数DSP的共同特点。本文针对TMS320VC33与PC RS-232的通讯,分析三种具体的接口电路和软件设计方法,实现高速DSP与低速设备的通讯:①通过TMS320VC33的通用I/O口实现通信;②通过TMS320VC33中可设置为通用I/O的串行引脚实现通信;③直接利用TMS320V
[网络通信]
基于8051单片机的中断控制
(1)由中断源提出中断请求,由中断控制允许控制决定是否响应中断,如果允许响应中断,则CPU按设定好的优先级的顺序响应中断。如果是同一优先级的中断,则按单片机内部的自然优先级顺序(外部中断0→定时器0中断→外部中断l→定时器1中断→串行接口中断)响应中断。 CPU响应中断请求后,就立即转入执行中断服务程序。保护断点、寻找中断源、中断处理、中断返回,程序返回断点处继续执行。 (2)由中断允许寄存器IE控制开放和禁止中断。欲开放某一中断,则应先开放总中断允许(EA置1),然后开放相应中断的中断允许(相应位置1);若要要禁止中断,则EA置O即可。 (3)由中断优先级控制寄存器IP控制中断优先级,相应位置1,则设为高级中断,置0
[单片机]
高速DSP与PC实现串口通信的方法
数字信号处理器(Digital Signal Processor,DSP)在图形图像处理、高精度测量控制、高性能仪器仪表等众多领域得到越来越广泛的应用,实际运用中,通常须将DSP采集处理后的数据传送到PC机,然后进行存储和处理。 T1公司的TMS320VC33微处理器具有性价比高,同时,该芯片的I/O电平、字长、运行速度、串口功能具有大多数DSP的共同特点。本文针对TMS320VC33与PC RS-232的通讯,分析三种具体的接口电路和软件设计方法,实现高速DSP与低速设备的通讯:①通过TMS320VC33的通用I/O口实现通信;②通过TMS320VC33中可设置为通用I/O的串行引脚实现通信;③直接利用TMS320VC33的串
[嵌入式]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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