51单片机串口通信讲解

控制/MCU

1879人已加入

描述

1、串行通信与并行通信

并行通信控制简单、传输相对较快,但是需要的传输线较多,长距离传送成本高,收发双方同时接收存在困难。

串行通信将数据字节分成多个位进行传输,只需要一根数据线,外加一条公共信号底线和若干控制线。对于一个字节的数据,需要分8位传输。

串行通信包含两种方式:串行同步和串行异步。

串行同步需要建立发送方时钟对接收方时钟的直接控制,控制收发双方保持完全同步。

异步通信则不需要严格时钟要求,双方各有各的时钟,尽可能保持一致即可,也就是波特率的由来。异步通信以字符为单位传输,包括起始位、数据位、奇偶检验位和停止位。

在单片机与单片机,单片机与上位机之间通信时,采用最多的方式就是异步串行通信方式。

串口通信

串口通信在硬件电路设计时最常用的是CH340系列的芯片

串口通信

51单片机的P3.1和P3.0具有串行通信的第二功能,因此设计这两个IO口与CH340相连,注意CH340的TXD要接单片机的RXDP3.0,如上图所示。

串口通信

2、寄存器讲解

串口通信

只讲解最常用的四个,SCON控制寄存器,数据缓冲寄存器SBUF、波特率选择控制寄存器PCON,中断IE控制寄存器。

PCON的SMOD0位复位时清零(也就是通常情况下),此时SCON的SM0和SM1一起指定串行通信的工作方式。

串口通信

四种方式中最常用的是方式1,因此多了解此方式即可,并可以看到后面提示的是定时器1的溢出率。SCON中REN是串行接收控制位,接收数据则需要开启置1,TI是发送中断请求标志位,硬件自动置1,需要软件清0。RI为接收中断标志位,用法同TI。

串口通信

波特率:每秒传输二进制代码的位数,1波特=1位/s,单位bps。计算与定时器1的初始值确定,定时器1工作在8位重装载方式,不需要溢出后重新赋值。

3、代码展示

#include"reg52.h"


sbit KEY6=P3^2;
unsigned char num=0;
unsigned char index=0;
unsigned char table[]="Happy New Year!";
void delay(unsigned char time)
{
  unsigned char i,j;
  for(i=0;i< time;i++)
    for(j=0;j< 120;j++);
}


void init_serial()
{
  TMOD=0x21;
  TL1 = 0xFD;    
  TH1 = 0xFD;//模式介绍,TL1溢出直接使用TH1中的值,往复使用(自动装载)
  TR1=1;  //定时器1开启  9600bps
  SM0=0;
  SM1=1;
  REN=0;  //关掉接收
  ES=1;
  EA=1;
}


int main()
{
  unsigned char index = 0;
  init_serial();
  while(1)
  {
    delay_ms(1000);
    ES=0;//防止中断再次进入
    SBUF=table[index];
    while(!TI);
    TI=0;
    ES=1;
    index+=1;
  }
}
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分