首页 » 互联网 » 8051 的串口通讯及应用_数据_比特率

8051 的串口通讯及应用_数据_比特率

神尊大人 2024-11-10 03:06:32 0

扫一扫用手机浏览

文章目录 [+]

串行式传输每次传输一个位,数据传输的速率表面上不怎么快,但连接两个别系之间,只要两条传输线即可,适宜长间隔的通信。
实际上,目前串行端口传输速率已比并行端口输出传输速率快。

实际中考虑利用并行式传输还是串行式传输要根据数据量与环境而定。
若要将8051系统的数据传至另一8051系统,则可以利用串行式数据传输。

8051 的串口通讯及应用_数据_比特率 互联网

最范例的串行式数据传输接口是RS232C,例如个人打算机的COM1、COM2接口便是属于RS232接口。

在串行式数据传输里有单工及双工之分

单工便是一条线只能有一种用场,例如输出线就只能将数据传出,输入线就只能将数据传入。

而双工便是一条线有两种用场,可传入数据么也可传出数据。

若系统上只有一条线,且在同一时候中不是进行传入数据就传出数据,则称之为“半双工”。

若在系统上有两条传输线,这两条传输线可同时进行数据输入与传出,则称之为“全双工”。

认识8051串行口

常日以每秒传输多少位(bit per second,简称bit/s)表示串行式数据传输的速率,又称为比特率(baud rate)。

常日,微掌握器里的数据处理属于并行式处理。
对8051而言,一次处理一个字节,也便是8个位,不管若何,串行式数据与并行式数据之间的转换是无法避免的。

在8051里,若要把8位的并行数据传出去,只要把数据放入并行寄存器(SBUF)即可,8051就会帮我们把这些数据一个位一个位送出去。

吸收串行数据也是一样,8051会把表面传入的数据,一个位一个位放入SBUF,当SBUF存满后,产生中断,即为并行数据,再将SBUF里的8位数据移做他用。

不论是吸收还是发送,很明显SBUF扮演了关键性的角色,在8051中吸收用的SBUF与传送用的SBUF虽然都叫做SBUF,但是它们分别是两个不同的8位寄存器。

8051串行事情模式

8051供应一个全双工的万用异步串行端口(Universal Asynchronous Receiver-Transmitter,简称UART),这个串行端口有4种事情模式(mode),利用不同事情模式其比特率各有不同,解释如下:

mode 0:

mode0事情模式是一固定比特率的位移式数据传输,其比特率为8051系统时钟脉冲的1/12,即OSC/12。
若在时钟脉冲为12MHz,则其比特率为1M bit/s。

在此模式下,不管是吸收还是发送,CPU的RxD引脚(P3.0)连接串行数据线,TxD引脚(P3.1)连接位移脉冲线。
实行数据吸收时,由TxD引脚送出位移脉冲,而由RxD引脚收下串行数据,如下图:

实行数据传送时,也是依据TxD引脚所送出的位移脉冲,由RxD引脚发送串行数据:

mode 1:

mode 1事情模式因此可变的比特率进行串行数据的传输,其比特率可由Timer 1来掌握(若是8052还可以利用Timer 2掌握比特率)。
在此模式下,8051的RxD引脚连接数据源的TxD引脚,8051的TxD引脚连接目的地的RxD引脚。

在mode 1下,每个数据是由10位组成,包括起始位(start bit)、8个位的数据以及停滞位(stop bit),个中第一个位便是低电平的起始位,紧接着是8位数据的bit0(LSB),bit7(MSB)之后是高电平的停滞位,如下图:

mode 2:

mode 2事情模式因此OSC/32或OSC/64的比特率进行串行数据的传输,而其线路的连接,也是8051的RxD引脚连接数据源的TxD引脚,8051的TxD引脚连接目的地的RxD引脚。
在mode 2下,每笔数据是由11位组成,包括起始位(start bit)、8个位的数据、奇偶位(parity bit)以及停滞位(stop bit),个中第一个位便是低电平的起始位,紧接着是8位数据的bit0(即LSB),而bit7之后的是奇偶位,末了则是高电平的停滞位:

当进行数据传出时,第9个位TB8(即SCON寄存器的TB8)为奇偶位,可取自程序状态字组寄存器PSW中的P位,以达到奇偶校验的目的。
当收到数据时,第9个位将直接移入SCON寄存器中RB8,而不必管停滞位。

mode3:

mode3事情模式因此可变的比特率进行串行数据的传输,其比特率可由Timer 1来掌握(若是8052则还可利用Timer 2掌握比特率)。
除此之外,mode 3与 mode 2险些完备一样。

认识SCON串行口掌握寄存器

串行端口掌握寄存器(serial port control register,简称SCON)是一个8位、可位寻址的寄存器,如上图其功能是设定与掌握串行端口。
下面是SCON各位的解释:

SM0和SM1

这两个位的功能是设定串行端口的模式:

SM2

本位为多重处理器通信启用位:

mode 0时,Sm2=0;

mode 1时,若SM2=1,且收到有效的停滞位,则RI=1(产生RI中断),否则RI=0;

mode 2或 mode 3时,若Sm2=1,且收到的第9位为1,则RI=1(产生RI中断),若第9位为1,则RI=0

REN

本位为串行吸收启用位,解释:

REN=1,开始吸收;

REN=0,停滞吸收;

TB8

mode 2或mode 3传送数据时,本位为第9传输位,可用软件来设定或打消。

RB8

mode 2或mode 3吸收数据时,本位为第9个吸收位;

mode 1时,若SM2=0,则本位为停滞位;

mode 0时,本位无浸染。

TI

本位为中断标识位,当中断结束时,本位并不会规复为0,必须由软件打消。

mode 1、mode 2或mode 3时,若完成传送停滞位,则本位自动设定为1,并产生TI中断。

mode 0时,若完成传送第8位,则本位自动设定为1,并产生TI中断。

RI

本位为吸收中断标志位,当中断结束时,本位并不会规复为0,必须由软件置0。

mode 1、mode2或mode 3时,若完成吸收到停滞位,则本位自动设定为1,并产生RI中断。

mode 0时,若完成吸收第8位,则本位自动设定为1,并产生RI中断。

比特率设定

8051串行口的比特率设定办法有如下几种:

一、在mode 0下,比特率固定为OSC/12,不须要进行设定!
完备是依照系统的时钟脉冲而定,不是软件所能改变的。

二、在mode 2下,其比特率可为OSC/32或OSC/64,即:

个中SMOD为PCON寄存器中的bit 7:

若将SMOD设定为0,则设定采取的比特率OSC/64;

若将SMOD设定为1,则设定采取的比特率OSC/32。

以12MHz的系统为例:

三、在mode 1或mode3下,比特率可由Timer 1(8052则还可以选择Timer 2)的溢出脉冲掌握,以Timer 1采取具有自动加载功能的mode 2为例,产生的比特率为:

如在11.0592MHz的系统下,若要产生19.2Kbit/s的比特率,且SMOD=1,则:

得出TH1= 253 = 0xfd;

下表利用Timer 1时常用的比特率设定:

8051串口运用:

把8051的串行事情模式设定为mode 1,REN=1; SCON寄存器为0101 000;

在OSC=11.0952MHz下,把比特率设定为9600bit/s,根据前文所述,mode 1比特率设定由Timer 1掌握,表格中也给出了TH1的值,以是SMOD=0,TH1 = 0xfd。

void uart_init(){//初始化 TMOD = 0x20; // 定时器1,模式2(8位自动装载) TR1=1;//启用Timer 1 TH1 = 0xfd; // 在Timer 1,mode 2, 11.0952MHz下,设定9600比特率 SCON = 0x50; //uart mode1,吸收使能}unsigned char rData;void uart_read() // 吸收{ // 等到收到字节 while(RI==0); rData = SBUF; //把吸收到的字节放到rData RI=0; //打消RI以吸收下一个字节}void uart_send(unsigned char sData){//发送 SBUF=sData; while(TI == 0); TI=0;}

标签:

相关文章