51单片机uart通信协议

发布者:真诚的友谊最新更新时间:2023-08-28 来源: elecfans关键字:51单片机  uart  通信协议 手机看文章 扫描二维码
随时随地手机看文章

  51单片机

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


  同样的一段程序,在各个单片机厂家的硬件上运行的结果都是一样的,如ATMEL的89C51(已经停产)、89S51, PHILIPS,和WINBOND等,我们常说的已经停产的89C51指的是ATMEL公司的 AT89C51单片机,同时是在原基础上增强了许多特性,如时钟,更优秀的是由Flash(程序存储器的内容至少可以改写1000次)存储器取代了原来的ROM(一次性写入),AT89C51的性能相对于8051已经算是非常优越的了。

  

  不过在市场化方面,89C51受到了PIC单片机阵营的挑战,89C51最致命的缺陷在于不支持ISP(在线更新程序)功能,必须加上ISP功能等新功能才能更好延续MCS-51的传奇。89S51就是在这样的背景下取代89C51的,89S51已经成为了实际应用市场上新的宠儿,作为市场占有率第一的Atmel公司已经停产AT89C51,将用AT89S51代替。89S51在工艺上进行了改进,89S51采用0.35新工艺,成本降低,而且将功能提升,增加了竞争力。89SXX可以向下兼容89CXX等51系列芯片。同时,Atmel不再接受89CXX的定单,大家在市场上见到的89C51实际都是Atmel前期生产的巨量库存而以。如果市场需要,Atmel当然也可以再恢复生产AT89C51。

  uart通信协议

  UART(UniversalAsynchronousReceiver/Transmitter)即通用异步收发传输器,工作于数据链路层(协议层之一)。包含了RS-232、RS-422、RS-485串口通信和红外(IrDA)等等。UART协议作为一种低速通信协议,广泛应用于通信领域等各种场合。UART基本可分为并口通信及串口通信两种。


  异步串口通信协议,工作原理是将传输数据的每个字符以串行方式一位接一位的传输。图1给出了其工作模式:

  51单片机uart通信协议

  其中每一位(bit)的意义如下:

  起始位:先发出一个逻辑“0”的信号,表示传输字符的开始。数据位:紧跟起始位之后。数据位的个数可以是4、5、6、7、8等,构成一个字符。通常采用ASCII码。从最低位开始传送,靠时钟来定位。

  奇偶校验位:数据位加上这一位后(跟在数据位尾部),使得“1”的位数应为偶数(偶校验)或奇数(奇校验),以此来校验数据传送的正确性。

  停止位:它是一个字符数据的结束标志。可以是1位、1.5位、2位的高电平(逻辑“1”)。

  空闲位:处于逻辑“1”状态,表示当前线路上没有数据的传送。波特率:是衡量数据传输速率的指针。表示为每秒钟传送的二进制位数(bit数)。例如资料传送速率为120字符/秒,而每一个字符为10位,则其传送的波特率为10×120=1200字符/秒=1200波特。

  软件UART控制:在嵌入式系统或者计算机中,并非直接对串口直接进行操作,而是通过SCI(串行通讯接口)模块对其进行控制。(注:“SCI”首先由Motorola微串口微控制器而得名,SCI另一种说法是“UART控制器”)常用的许多芯片中都包含了SCI,例如ARM的S3C2410X芯片内嵌了3个串行接口控制器,而Nios等软核芯片则可以用选用UART(RS232)的IP对UART进行控制。PC机则常用16650UART、16750UART等控制串口。

  如果实现软件操作UART时,在UART检查端口管脚的串行活动时,需要占用大量时间,让应用程序停滞,这会使得软件UART没有意义。但情况并非如此,来看一下标准的10位异步串行协议(包含一个起始位,一个停止位和8个数据位)收发一个字符时的情况(如图2所示)。

  51单片机uart通信协议

  在启动一次发送或接收操作之后,串行UART(不论是软件还是硬件形式的UART)并不需要连续监控I/O线。在发送一个字符时,每个位周期,UART只需驱动一次发送信号线的状态,从起始位到8个数据位直到结束位依次设置每个位的电平。在接收一个字符时,UART在第一个下降沿时开始工作,之后只需在每个位时隙的中央对接收线上的信号状态进行一次采样。

  数字系统方面,我们可以用一对状态机来表征软件UART的行为,一个状态机用于发送字符,另一个用于接收字符。对一个全双工的UART而言,这两个状态机是并行运行的,需要两个独立的定时器中断。这两个状态机都有主动和被动两种模式。发送状态机在收到一个需发送的字符时跳出空闲状态,在结束位发送之后回到空闲状态。接收状态机在检测到接收线上的一个下降沿时跳出空闲状态。在检测到这个初始的低电平状态之后(该状态指示起始位已经开始),开始对位时隙进行递减计数,同时按要求采样信号线上的每个信号位,包括停止位。

  为了避免不必要地占用主应用过多的时间,

  UART状态机应该由一些周期性的基于定时器的中断来激活。接收线上初始下降沿的检测需要利用一个边沿触发的外部中断单独处理。如果一个状态机的定时器被设置为每个bit周期发出一个中断请求,那么该状态机在每次中断被触发时能够执行任何需要的操作(而且如果需要,还能进入到下一个状态)。用于实现状态机的代码应尽可能优化,因为只要软件UART处于活动状态,这些代码就会在后台连续运行。

  51单片机uart通信协议

  *************************************************/

  #define uchar unsigned char

  #define uint unsigned int

  bit RXAAOK; //接收到0XAA开头标志

  bit RXFRMOK; //接收一帧完整数据标

  //接收中断中如果是完整一条数据置位,主函数中

  //处理完毕清零

  uchar RXBUF[32]; //接收缓存

  uchar RX_P; //数据个数

  void UARTO_ISR() interrupt 4 //接收中断,不同处理器可能是不同的函数声明

  {

  uchar i; //用处提取接收缓冲器的字符

  if(RI)

  { i=SBUF; //提取字符

  RI=0;

  if(RXFRMOK==0) //判断是否接收到起始字符0XAA

  { if(RXAAOK) //如果接收到0XAA,继续接收后面的字符

  { RXBUF[RX_P]=i; //字符存入数组

  if((RX_P》3)&&(RXBUF[RX_P-3]==0xcc)

  &&(RXBUF[RX_P-2]==0x33)&&(RXBUF[RX_P-1]==0xc3)

  &&(RXBUF[RX_P]==0x3c) ) //判断是是否接收完毕一帧数据

  { RXFRMOK=1; //如果接收完成,置位RXFRMOK;

  RXAAOK=0; //清零开始标志位RXAAOK

  }

  RX_P++; //接收计数器加一

  }

  if(!RXAAOK&&(i==0xaa))

  {RXAAOK=1;

  RX_P=0;

  }

  }

  }

  }

  void main() //主程序

  {

  while(1)

  {

  if(RXFRMOK)

  {

  if(RXBUF[0]==0X78)

  {//加入自己的处理函数即可

  }

  if(RXBUF[0]==0X7C)

  {//加入自己的处理函数即可

  }

  RXBUFMOK=0; //处理完毕,清除消息

  }

  }

  }


关键字:51单片机  uart  通信协议 引用地址:51单片机uart通信协议

上一篇:51单片机定时器控制LED灯
下一篇:51单片机产生PWM软件延时和定时器产生两种方法

推荐阅读最新更新时间:2024-11-09 04:51

51单片机实验——按键外部中断实现四进制计数器
1.实验题目: 设计一个通过触发外部中断INT1实现的在0-3之间计数(四进制)的计数器,并通过P1.6和P1.7端口上的LED,显示计数的值。 2.KEIL代码 #include reg51.h sbit P16=P1^6; sbit P17=P1^7; void INT1_Init();//声明中断初始化函数 void main() { INT1_Init();//调用中断初始化函数 while(1); } void INT1_Init() //编写中断初始化函数 { EA=1;//开启中断总开关 EX1=1;//开启外部中断1 IT1=1;//设定为下降沿触发 IE1=0;//清
[单片机]
<font color='red'>51单片机</font>实验——按键外部中断实现四进制计数器
89C51单片机与TLC2543芯片的串行A/D驱动程序设计
串行A/D转换器转换后的结果是以串行方式输出,数字量以串行方式输出可简化系统的连线,缩小电路板的面积,节省系统的资源。下面以TLC2543为例,介绍串行A/D驱动程序的设计。 89C51单片机与TLC2543芯片的接口电路图如下图所示。TLC2543的3个控制输入端CS(的反)、I/OCLOCK、DATAINPUT和一个数据输出端DATAOUT分别与单片机的P1.4、Pl.l、P1.2和P1.3引脚相连,单片机采用的晶振频率为12MHz。 电路设计时,我们将TLC2543有两个基准电压输入REF+、REF-分别与电源(VCC)、GND相连,这样连接可保证数字输出的满度和零点,但在高精度的测量要求中,如果VCC的质量一般,应
[单片机]
89C<font color='red'>51单片机</font>与TLC2543芯片的串行A/D驱动程序设计
51单片机玩转物联网基础篇04-蜂鸣器
前言 上一节,我们完成了按键操作,本节我们学习使用蜂鸣器,首先我们介绍下蜂鸣器,然后完成实验:上电后默认驱动频率为5KHZ,通过KEY1控制驱动频率为1KHZ ,蜂鸣器,KEY2控制驱动频率为 2KHZ,可以听到不同的效果。 一、基础知识 1.蜂鸣器简介 蜂鸣器是一种一体化结构的电子讯响器,采用直流电压供电,广泛应用于计算机、打印机、复印机、报警器、电子玩具、汽车电子设备、电话机、定时器等电子产品中作发声器件。 蜂鸣器按照原理来分可以分为有源蜂鸣器和无缘蜂鸣器,有源蜂鸣器和无源蜂鸣器并不是说蜂鸣器内部是否含有电源,这里的有源和无源是指内部是否含有RC震荡电路。想要无源蜂鸣器发声,需提供一定频率的脉冲信号; 想要有源蜂鸣器发
[单片机]
<font color='red'>51单片机</font>玩转物联网基础篇04-蜂鸣器
51单片机TMOD及定时器配置
一,TMOD的配置 1.定时模式GATE=0 TMOD=0X01(T0工作方式1) TMOD=0X02(T0工作方式2) TMOD=0X10 (T1工作方式 1) TMOD=0X20 (T1工作方式2) 2.计数模式GATE=0
[单片机]
<font color='red'>51单片机</font>TMOD及定时器配置
51单片机定时器和中断的介绍
最近在学习51单片机,学到了定时器这块,由于自己的基础不太扎实,在这方面花了很多时间,这里通过对定时器和中断的介绍,用简易时钟这个例子来对学习的内容进行加深巩固,把自己的经验分享给大家,希望对大家能够有帮助。 一、定时器的功能以及定时器的结构 定时器的功能 其实就是单片机的内部,通过系统时钟的每一个机器周期产生一个记数脉冲,即每一个机器周期计数器加一。 比如,这里我的实验板的晶振是12MHZ,1MHZ信号每个脉冲的持续时间为1us,如果定时器T0对1MHZ的信号进行计数,从0~65536us,当达到最大的65536us的时候,定时器计数达到最大值,会溢出,于是产生中断信号,向中断系统申请中断,中断系统接受中断请求,执行中断
[单片机]
<font color='red'>51单片机</font>定时器和中断的介绍
基于51单片机+DS1302万年历+LCD1602显示+按键播报时间+温控风扇+按键控灯
前段时间做了一个 基于51单片机的万年历加温度控制风扇以及按键播报时间。在这里做一下笔记。 准备硬件 1:51单片机(我这里用的是STC89C52) 2:语音播报模块(我这里用的是SYN6288) 3:DS1302时钟模块 4:DS18B20温度模块 5:LCD1602显示屏 6:L298N电机驱动 7:蜂鸣器 8:电机 9:按键 5个 10:灯 功能介绍 功能: 1:修改时间 2:修改日期(软件自动校正日期) 3:闹钟模式 4:温度控制风扇速度 5:调节灯亮度 6:播报时间 主界面设置 下面是大概的流程图 位置不够没画全。。。 由于代码较多,这里就不全部贴出来了。 修改时间 当我们进入到修改时间的界面,我们屏幕得
[单片机]
基于<font color='red'>51单片机</font>+DS1302万年历+LCD1602显示+按键播报时间+温控风扇+按键控灯
51单片机基础之点阵LED8X8
原理: 他这个图是有问题的,大家不要被误导,例如我显示一个箭头,按照这个原理图来,那么中间那一根直线0xff,表示高电平有效,但是按照这个图来说P0是低电平有效,所以我觉得发光二极管反一下才符合代码的意思,希望不要被误导。 字模提取: 软件获取:链接:https://pan.baidu.com/s/1OFAR8a2CnTg6Nle2WDmIRA 提取码:1234 代码: #include reg51.h typedef unsigned int u16; //对系统默认数据类型进行重定义 typedef unsigned char u8; //定义74HC595控制管脚 sbit SR
[单片机]
<font color='red'>51单片机</font>基础之点阵LED8X8
51单片机存储程序和数据
初学51总是会有这样的疑问,从电脑下载程序到开发板后,程序去哪了? C51中,用户或应用程序,系统程序和数据都是存放在哪的? 51单片机从物理结构上,可分为片内,片外程序存储器,片内片外数据存储器。 51单片机从功能上,有程序存储器,片内数据存储器,特殊功能寄存器,位地址空间,片外数据存储器。 程序存储器 51单片机的程序存储器用于存储代码和一些固定表格常数。 可寻址的程序存储器空间为64KB。 51单片机的从物理角度上可分为:片内,片外程序存储器,作为编址空间,编址规律是:先片内,后片外,片内片外连续,不重叠。 如图:为51单片机程序存储器编址图。 单片机如何执行指令? 如图: 无论片内程序存储器,还是片外程
[单片机]
<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