我是靠谱客的博主 传统砖头,最近开发中收集的这篇文章主要介绍51单片机入门 - UART串口,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

博主福利:100G+电子设计学习资源包!

http://mp.weixin.qq.com/mp/homepage?__biz=MzU3OTczMzk5Mg==&hid=7&sn=ad5d5d0f15df84f4a92ebf72f88d4ee8&scene=18#wechat_redirect
--------------------------------------------------------------------------------------------------------------------------

 

对于单片机来说,通信则与传感器、存储芯片、外围控制芯片等技术紧密结合,成为整个单片机系统的“神经中枢”。


1、初步认识

 

一位一位的发送出去的,要发送 8 次才能发送完一个字节。

 

STC89C52有两个引脚是专门用来做 UART串行通信的,一个是 P3.0一个是 P3.1,它们还分别有另外的名字叫做 RXD和TXD,由它们组成的通信接口就叫做串行接口,简称串口。

 

波特率:发送二进制数据位的速率,习惯上用 baud 表示;即我们发送一位二进制数据的持续时间=1/baud。

             

通信过程:在UART 通信的时候,一个字节是 8 位,规定当没有通信信号发生时,通信线路保持高电平,当要发送数据之前,先发一位 0 表示起始位,然后发送 8 位数据位,数据位是先低后高的顺序,数据位发完后再发一位 1 表示停止位。

 

 
2、RS232通信接口与USB转串口通信


RS232 接口一共有 9 个引脚,分别定义是: 1、载波检测 DCD; 2、接收数据 RXD; 3、发送数据 TXD; 4、数据终端准备好 DTR; 5、信号地线 SG; 6、数据准备好 DSR; 7、请求发送 RTS; 8、清除发送 CTS; 9、振铃提示 RI。我们要让这个串口和我们单片机进行通信,我们只需要关心其中的 2 脚
 RXD、 3 脚 TXD 和 5 脚 GND 即可。
           

负逻辑:低电平代表的是 1,而高电平代表的是 0,因此需要电平转换芯片 MAX232。 RS232 串口和 UART 串口,它们的协议类型是一样的,只是电平标准不同而已,而 MAX232 这个芯片起到的就是中间人的作用,它把 UART 电平转换成 RS232 电平,也把 RS232 电平转换成 UART 电平。
           

USB 转串口芯CH340T:实现 USB通信协议和标准UART 串行通信协议的转换。
 


3、通信的三种基本类型


单工通信就是指只允许一方向另外一方传送信息,而另一方不能回传信息;
半双工通信是指数据可以在双方之间相互传播,但是同一时刻只能其中一方发给另外一方;
全双工通信就发送数据的同时也能够接收数据,两者同步进行。
 


4、串口通信


1、配置串口为模式 1。
2、配置定时器 T1 为模式 2,即自动重装模式。
3、根据波特率计算 TH1 和 TL1 的初值,如果有需要可以使用 PCON 进行波特率加倍。
4、打开定时器控制寄存器 TR1,让定时器跑起来。
定时器的重载值计算公式为:TH1= TL1 = 256 - 晶振值/12 /2/16 /波特率

 

 


#include<reg52.h>

 

void ConfigUART(unsigned int baud);

 

int  main(void)

{

  EA = 1;  //使能总中断

  ConfigUART(9600);  //配置波特率为9600

  while (1);

 

  return 0;

}

/* 串口配置函数,baud-通信波特率 */

void ConfigUART(unsigned int baud)

{

  SCON = 0x50;  //配置串口为模式1

  TMOD &= 0x0F;  //清零T1的控制位

  TMOD |= 0x20;  //配置T1为模式2

  TH1 = 256 - (11059200 / 12 / 32) / baud; //计算T1重载值

  TL1 = TH1;     //初值等于重载值

  ET1 = 0;       //禁止T1中断

  ES  = 1;      //使能串口中断

  TR1 = 1;       //启动T1

}

/*UART中断服务函数 */

void InterruptUART() interrupt 4

{

  if (RI) //接收到字节

  {

    RI = 0;   //手动清零接收中断标志位

    SBUF = SBUF + 1;  //接收的数据+1后发回,左边是发送SBUF,右边是接收SBUF

  }

  if (TI) //字节发送完毕

  {

    TI = 0;   //手动清零发送中断标志位

  }

}

 

最后

以上就是传统砖头为你收集整理的51单片机入门 - UART串口的全部内容,希望文章能够帮你解决51单片机入门 - UART串口所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(48)

评论列表共有 0 条评论

立即
投稿
返回
顶部