控制/MCU
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;
}
}
全部0条评论
快来发表一下你的评论吧 !