1、信息流中的字符与字符间和字符内部位与位之间都 需要一个同步时钟。,可以把许多字符组成一个信息组,也称 为一帧。串行通信数据传输速率:意义是每秒钟传送多少个二进制数。一般异步通信在:509600bit/s 同步通信在:1002Mbit/s我们称之为比特率,但在二进制的情况下,比特率和波特率数值相同,故而一般称作“波特率”。串行口简介: 组成:两个数据缓冲寄存器SBUF一个串行口控制寄存器SCON一个输入移位寄存器串行口波特率发生器用于控制串行通信的速率(由内部的分频器 和控制开关电路组成),它的振荡源可以来自单片机的振荡频率 fOSC,也可以来自定时/计数器的时钟输出。外界数据通过引脚RXD(P
2、3.0)输入。数据先逐位进入输入移位寄存器,在进入接收寄存器(SBUF),在接收器中采用了双缓冲结构,避免数据重叠(因为CPU是被动的)。要发送的数据通过发送控制器控制逻辑门电路经输出移位寄存器一位一位输出到TXD(P3.1)。串行口控制寄存器SCON:SM0,SM1为串行方式选择位,可以有四种方式;SM2为多机通信控制位,在方式2、3中配合发送/接收数据的第九位(TB8/RB8)对主机发来的数据识别并处理。REN为允许串行接收位,要由软件控制置1为允许接收。TI、RI为发送/接收中断标志位。注意:在发送完数据后硬件会自动置TI为1,若要继续发送,必 须用软件清零。准备接收时,首先要清零RI,
3、接收完8位数据后 硬件会自动置RI为1,然后执行读数据指令MOV A,SBUF,然后一 定要清RI为0。波特率的设置:方式0:时钟频率的1/12,不受 SMOD位影响。方式2: (2SMOD/64)*fosc方式1和3:(2SMOD/32)*T1溢出率T1溢出周期:(12/fosc)*(256-X)和定时器有关了我们一般是根据波特率计算溢出初值X。串行口工作方式:由于我们最常用的是方式1,故重点介绍如下:执行MOV SBUF,A指令时,CPU将一个数据写入发送缓冲寄存器,就启动发送器发送。发送完一帧数据后,TI置1,通知CPU可以发送下一个数据了。接收时,首先置RI为0,REN为1;CPU开始
4、从RXD采样,当发现1至0的负跳变时,确定是起始位0。当停止位到来之后送入RB8,RI=1,申请中断,通知CPU取走SBUF中数据。计算机仿真可以看出,方式一下的波特率误差最小,数据最稳定。总的来说,方式2,3均为11位异步通信方式,只是波特率的设置方法不同。发送或接收时和数据的第九位相关,联系到一个应用领域即多机通信。多机通信:80C51的串行通信方式2、3有一个专门的应用领域:多机通信TXDRXD主机TXD RXD从机0从机1从机2从机3主要靠主从机之间正确的设置与判断多机通信控制位SM2和发送/接收数据的第九位(D8)。主机发送地址帧数据: MOV SCON,#0D8H /1101100
5、0置TB8为以表示1地址帧所有从机初始化SM2=1,处于接收地址帧的状态MOV SCON,#0F0H /11110000当从机接收到主机发来的信息后,若RB8=1,则置RI=1, 中断后判断发来的地址与自己是否相符。若相符,SM2=0;准备接收数据帧;并向主机返回地址核对;主机发送数据时,置TB8=0,此时各个从机都处于接收状态,但 只有SM2=0的那个从机才可以接收到数据。这里都是方式3;下面举例示范:#include#define uchar unsigned charuchar i;sbit D0=P10;sbit D1=P11;sbit D2=P12;sbit D3=P13;sbit
6、D4=P14;sbit D5=P15;sbit D6=P16;sbit D7=P17;void chuankou(void) /串口初始化函数 TMOD=0X20; /设置中断工作方式寄存器为00100000: /方式2(自动重载) /在方式2下,16位的定时/计数器被拆 /成两个:寄存器THI用以保持初值,TL0/计数,若溢出,则置/位中断。 TH1=0Xfd; TL1=0xfd; /以11.0592MHZ为晶振,波特率为9600时的初值; TR1=1; SCON=0X50; /01010000:串口方式1,REN置1; EA=1; /总中断打开 ES=1;void main(void) v
7、oid chaunkou(); while(1) /大循环 while(!RI); /等待RI置1 ,通知CPU从SBUF中取走数据 RI=0; /软件清0,继续循环采样 i=SBUF; switch(i) case 0x01:D0=D0;break; /取反 case 0x02:D1=D1; case 0x03:D2=D2; case 0x04:D3=D3; case 0x05:D4=D4; case 0x06:D5=D5; case 0x07:D6=D6; case 0x08:D7=D7; /使用串口调试助手发送数据,CPU根据SBUF接收到的数据使对应的LED亮; 编译:keilc中在target中设置频率:11.0592MHZ,并生成hex文件;利用USB转串口芯片,启动串口调试助手。在STC中下载时要把串口助手中的端口关闭,否则串口复用会报错。在串口助手中选择端口(不同的计算机不一样,我的是COM5)选择十六进制数发送(不然发送的是ASCII码),输入01并点击手动发送,会看到LED1被点亮。即完成了单片机接收电脑发送数据的实验。以上是学习中的总结,参考了相关书籍和文档,也经过实验验证叙述不清晰不到位的地方望见谅,或者和我交流。微信号:yr0868
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1