基于51单片机的UART串口通信

发布时间:2024-03-19  

  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004单片机取得了长足的进展,成为应用最广泛的8位单片机之一,其代表型号是ATMEL公司的AT89系列,它广泛应用于工业测控系统之中。很多公司都有51系列的兼容机型推出,今后很长的一段时间内将占有大量市场。51单片机是基础入门的一个单片机,还是应用最广泛的一种。需要注意的是51系列的单片机一般不具备自编程能力。


  UART是一种通用串行数据总线,用于异步通信。该总线双向通信,可以实现全双工传输和接收。在嵌入式设计中,UART用于主机与辅助设备通信,如汽车音响与外接AP之间的通信,与PC机通信包括与监控调试器和其它器件,如EEPROM通信。


  计算机内部采用并行数据,不能直接把数据发到Modem,必须经过UART整理才能进行异步传输,其过程为:CPU先把准备写入串行设备的数据放到UART的寄存器(临时内存块)中,再通过FIFO(First Input First Output,先入先出队列)传送到串行设备,若是没有FIFO,信息将变得杂乱无章,不可能传送到Modem。它是用于控制计算机与串行设备的芯片。有一点要注意的是,它提供了RS-232C数据终端设备接口,这样计算机就可以和调制解调器或其它使用RS-232C接口的串行设备通信了。


  作为接口的一部分,UART还提供以下功能:将由计算机内部传送过来的并行数据转换为输出的串行数据流。将计算机外部来的串行数据转换为字节,供计算机内部并行数据的器件使用。在输出的串行数据流中加入奇偶校验位,并对从外部接收的数据流进行奇偶校验。在输出数据流中加入启停标记,并从接收数据流中删除启停标记。处理由键盘或鼠标发出的中断信号(键盘和鼠标也是串行设备)。


  可以处理计算机与外部串行设备的同步管理问题。有一些比较高档的UART还提供输入输出数据的缓冲区,比较新的UART是16550,它可以在计算机需要处理数据前在其缓冲区内存储16字节数据,而通常的UART是8250。如果您购买一个内置的调制解调器,此调制解调器内部通常就会有16550 UART。接下来我们一起了解一下基于51单片机的UART串口通信。

  51串行口结构

  51单片机的UART串行通信是基于其串行口的可编程硬件结构,只要用正确的程序代码通过初始化串行口对应寄存器的形式将其串行硬件结构初始化,再编写符合此串行口通信的程序代码便能够实现串行通信,其硬件结构决定了编程机制( 当然还要靠51芯片内CPU等机制 )。

  此结构具有UART( 通用异步收发器 )的全部功能,能同时进行数据的发送和接收,也可作为同步移位寄存器使用。此结构集成于单片机内部。

  基于51单片机的UART串口通信


  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控制的,所以不必程序用户担忧。


  程序实现串行通信

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

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

  基于51单片机的UART串口通信

  (2)用程序实现发数据

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

  基于51单片机的UART串口通信

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

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

  基于51单片机的UART串口通信

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

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

  【1】发数据显示

  设置串口调试助手:

  基于51单片机的UART串口通信

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

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

  基于51单片机的UART串口通信

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


文章来源于:电子工程世界    原文链接
本站所有转载文章系出于传递更多信息之目的,且明确注明来源,不希望被转载的媒体或个人可与我们联系,我们将立即进行删除处理。

相关文章

    引脚为P3.0引脚与P3.1引脚,分别是RXD和TXD引脚。串口通信可以用于单片机和其它芯片通信或者单片机之间通信或者单片机与电脑通信串口通信一般都是交叉连接。标准的串口有9个引脚,我们......
    ') {    // 开启蜂鸣器 } 当然上面的只是粗略的卡命令,也可以写的更详细。 八、实战项目 8.1 前期准备 • CH340驱动 • USB转TTL,用于单片机与电脑的通信串口调试助手 刚买......
    平标准是不一样的。 单片机的电平标准 TTL电平 :+5V表示1 0V表示0。 RS232的电平标准 +15/+13 V表示1 -15/-13 表示0。 所以 单片机与电脑串口通信就应该遵循下面的连接方式: 在单片机与......
    如何使用AT89C51的串口和电脑的串口进行通信原理与实验;串口通讯对单片机而言意义重大,不但可以实现将单片机的数据传输到电脑端,而且也能实现电脑对单片机的控制,比如你可以把写入单片机的数据码显示在电脑......
    tx——接usb转串口的rx端,P3^1 gnd——接地 5v——接5V电 en——接任意单片机i/o,高电平 1、需要接通en,并给高电平 2、通信线路:电脑-->usb转串口......
    。 所以 单片机与电脑串口通信就应该遵循下面的连接方式: 在单片机与上位机给出的rs232口之间 通过电平转换电路(最上面图中的Max232芯片) 实现TTL电平与RS232电平之间的转换,PC串口与单片机串口......
    。注意:单片机和RS232的电平标准是不一样的。 单片机的电平标准 TTL电平 :+5V表示1 0V表示0。 RS232的电平标准 +15/+13 V表示1 -15/-13 表示0。 所以 单片机与电脑串口通信......
    RDX上。注意:单片机和RS232的电平标准是不一样的。 单片机的电平标准 TTL电平 :+5V表示1 0V表示0。 RS232的电平标准 +15/+13 V表示1 -15/-13 表示0。 所以 单片机与电脑串口通信......
    结果就出来了!!! 第2款:串口调试助手,单片机和电脑串口通信必备的工具! 第3款:色环电阻计算器,输入色环电阻的颜色,然后阻值和精度就会自动计算出来! 第4款:51单片机......
    51单片机串口通信实验电路详解;  51单片机是对所有兼容Intel 8031指令系统的单片机的统称。该系列单片机的始祖是Intel的8004单片机,后来随着Flash rom技术的发展,8004......

我们与500+贴片厂合作,完美满足客户的定制需求。为品牌提供定制化的推广方案、专属产品特色页,多渠道推广,SEM/SEO精准营销以及与公众号的联合推广...详细>>

利用葫芦芯平台的卓越技术服务和新产品推广能力,原厂代理能轻松打入消费物联网(IOT)、信息与通信(ICT)、汽车及新能源汽车、工业自动化及工业物联网、装备及功率电子...详细>>

充分利用其强大的电子元器件采购流量,创新性地为这些物料提供了一个全新的窗口。我们的高效数字营销技术,不仅可以助你轻松识别与连接到需求方,更能够极大地提高“闲置物料”的处理能力,通过葫芦芯平台...详细>>

我们的目标很明确:构建一个全方位的半导体产业生态系统。成为一家全球领先的半导体互联网生态公司。目前,我们已成功打造了智能汽车、智能家居、大健康医疗、机器人和材料等五大生态领域。更为重要的是...详细>>

我们深知加工与定制类服务商的价值和重要性,因此,我们倾力为您提供最顶尖的营销资源。在我们的平台上,您可以直接接触到100万的研发工程师和采购工程师,以及10万的活跃客户群体...详细>>

凭借我们强大的专业流量和尖端的互联网数字营销技术,我们承诺为原厂提供免费的产品资料推广服务。无论是最新的资讯、技术动态还是创新产品,都可以通过我们的平台迅速传达给目标客户...详细>>

我们不止于将线索转化为潜在客户。葫芦芯平台致力于形成业务闭环,从引流、宣传到最终销售,全程跟进,确保每一个potential lead都得到妥善处理,从而大幅提高转化率。不仅如此...详细>>