单片机和PC机间的通讯有许多方法,下面的程序首要用到的是51单片机的异步串行通讯。
一.51单片机的串行通讯管脚
P3.1为单片机的TXD管脚(Transfer Data),P3.2为单片机的RXD管脚(Receive Data)。
经过TXD管脚能够将CPU要发送的数据输出,RXD管脚能够将串行数据线传来的数据读入。
二.51单片机的串行通讯操控寄存器SCON,电源操控寄存器PCON
SCON:
其间,SM0,SM1操控着串行通讯的作业方法。
SM0 | SM1 | 作业方法 | 阐明 | 波特率 |
0 | 0 | 0 | 移位寄存器 | fosc/12 |
0 | 1 | 1 | 10位异步收发器(8位数据) | 可变 |
1 | 0 | 2 | 11位异步收发器(9位数据) | fosc/64或fosc/32 |
1 | 1 | 3 | 11位异步收发器(9位数据) | 可变 |
其间作业方法1在运用傍边比较多。
SM2为多机通讯操控位,SM2=1,允许多机通讯,=0不允许,完成点对点通讯。这儿先不评论。
TB8用于贮存发送数据的第9位。在方法2和方法3中,发送数据除了开始位,数据位,中止位外,还有一位校验位,存储在TB8中。
RB8用于存储接纳数据的第9位。接纳到传来的代码后,数据位存储在SBUF中,而校验位就存储在RB8中。经过剖析,能够判别承受的数据是否正确。
TI为发送中止请求标志。当发送数据缓冲区为空的时分,TI经过硬件置1,告诉CPU数据发送结束,需求有软件清零。
RI为接纳中止请求标志。总线上的数据经过RXD引脚串行送入单片机内,经过移位寄存器将串行数据变成并行数据,送入SBUF中。若接纳的SBUF现已满,经过硬件置1,告诉CPU一帧数据现已接纳结束,能够进行读取。相同需求软件清零。
PCON中只要最高位SMOD与串行通讯有关。
SMOD=1,波特率在本来的基础上加倍;
不然,不加倍。
三.波特率的核算
关于方法1和方法3,波特率核算公式为:(2^SMOD/32)*(T1的溢出率);
关于方法2,为fosc*(2^SMOD/64);
关于方法1,由晶振决议,为固定值。
T1也便是定时器1,做波特率发生器时,一般典型用法为作业在方法2,也便是主动装载的8位计数模式。TH,TL各8位,但只要TL部分计数,故最大计数值为255。溢出后,TH中的数主动装载到TL中。
所以,T1溢出率=fosc/{12x(256-TH1)};
所以能够列出右边为咱们所要波特率的方程。一起网上也有许多波特率的核算东西,也能够拿来运用。
最终总结起来,串行通讯大致要有这样几步:
1.确认定时器T1作业方法,也便是编程TMOD寄存器;
2.装载T1的初值,也便是给TH1,TL1赋值;
3.确认串行口作业方法,也便是编程SCON和PCON寄存器;
4.发动T1定时器,也便是令TR1=1;
5.假如运用中止查询的话,编写中止服务函数
上面这些大约便是串口通讯的基本常识了。有了这些常识,就能够编写程序来实践了。