当前位置:文档之家› 单片机串行口介绍

单片机串行口介绍

单片机串行口介绍

单片机串行口介绍

串行口是单片机与外界进行信息交换的工具。

?

?8051单片机的通信方式有两种:

?

?并行通信:数据的各位同时发送或接收。串行通信:数据一位一位次序发送或接收。参看下图:

?

?

?

?串行通信的方式:

?

?异步通信:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下:

?

?在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(能省略),最后是停止位1。用这种格式表示字符,则字符能一个接一个地传送。

?

?在异步通信中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式能由通信的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。

MCS-51单片机串行接口

第七章MCS-51单片机串行接口 第一节串行通信的基本概念 (一)学习要求 1.掌握串行通信的基本概念。 2. 掌握异步通信和同步通信的区别。 (二)内容提要 一:基本概念及分类 串行通信是将数据的各位一位一位地依次传送。适合于计算机之间、计算机与外部设备之间的远距离通信。 串行通信从传输方式分为: 单工方式、半双工方式、全双工方式。 从接收方式来说,串行通信有两种方式: 异步通信方式、同步通信方式。 二:串行口的功能 MCS-51单片机中的异步通信串行接口能方便地与其他计算机或传送信息的外围设备(如串行打印机、CPU终端等)实现双机、多机通信。 串行口有4种工作方式,见表7-1。方式0并不用于通信,而是通过外接移位寄存器芯片实现扩展并行I/O接口的功能。该方式又称为移位寄存器方式。方式1、方式2、方式3都是异步通信方式。方式1是8位异步通信接口。一帧信息由10位组成,其格式见图7-2a。方式1用于双机串行通信。方式2、方式3都是9位异步通信接口、一帧信息中包括9位数据,1位起始位,1位停止位,其格式见图7-2b。方式2、方式3的区别在于波特率不同,方式2、方式3主要用于多机通信,也可用于双机通信。 表7-1 (三)习题与思考题 1、什么是并行通信?什么是串行通信?各有何优缺点? 答:并行通信指数据的各位同时传输的通信方式,串行通信是指各位数据逐位顺序传输的通信方式。 2、什么是异步通信?什么是同步通信?各有何优缺点? 3、什么是波特率?某异步串行通信接口每分钟传送1800个字符,每个字符由11位组成,请计算出传送波特率。 第二节MCS-51串行接口的组成 (一)学习要求

MCS-51单片机串行口工作方式与波特率计算举例

MCS-51单片机串行口工作方式与波特率计算举例 1)方式0 方式0是外接串行移位寄存器方式。工作时,数据从RXD串行地输入/输出,TXD 输出移位脉冲,使外部的移位寄存器移位。波特率固定为fosc/12(即,TXD每机器周期输出一个同位脉冲时,RXD接收或发送一位数据)。每当发送或接收完一个字节,硬件置TI=1或RI=1,申请中断,但必须用软件清除中断标志。 实际应用在串行I/O口与并行I/O口之间的转换。 2)方式1 方式1是点对点的通信方式。8位异步串行通信口,TXD为发送端,RXD为 接收端。一帧为10位,1位起始位、8位数据位(先低后高)、1位停止位。波特率由T1或T2的溢出率确定。 在发送或接收到一帧数据后,硬件置TI=1或RI=1,向CPU申请中断;但必须用软件清除中断标志,否则,下一帧数据无法发送或接收。 (1)发送:CPU执行一条写SBUF指令,启动了串行口发送,同时将1写入 输出移位寄存器的第9位。发送起始位后,在每个移位脉冲的作用下,输出移位寄存器右移一位,左边移入0,在数据最高位移到输出位时,原写入的第9位1的左边全是0,检测电路检测到这一条件后,使控制电路作最后一次移位,/SEND 和DATA无效,发送停止位,一帧结束,置TI=1。 (2)接收:REN=1后,允许接收。接收器以所选波特率的16倍速率采样RXD 端电平,当检测到一个负跳变时,启动接收器,同时把1FFH写入输入移位寄存器(9位)。由于接、发双方时钟频率有少许误差,为此接收控制器把一位传送时间16等分采样RXD,以其中7、8、9三次采样中至少2次相同的值为接收值。接收位从移位寄存器右边进入,1左移出,当最左边是起始位0时,说明已接收8位数据,再作最后一次移位,接收停止位。此后: A、若RI=0、SM2=0,则8位数据装入SBUF,停止位入RB8,置RI=1。

51单片机与串口通信代码

51单片机与串口通信代码 2011年04月22日 17:18 本站整理作者:佚名用户评论(0) 关键字:串口通信(35) 串口调试 1. 发送:向总线上发命令 2. 接收:从总线接收命令,并分析是地址还是数据。 3. 定时发送:从内存中取数并向主机发送. 经过调试,以上功能基本实现,目前可以通过上位机对单片机进行实时控制。 程序如下: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 #i nclude #i nclude #i nclude #define INBUF_LEN 4 //数据长度 unsigned char inbuf1[INBUF_LEN]; unsigned char checksum,count3 , flag,temp,ch; bit read_flag=0; sbit cp=P1^1; sbit DIR=P1^2; int i; unsigned int xdata *RAMDATA; /*定义RAM地址指针*/ unsigned char a[6] ={0x11,0x22,0x33,0x44,0x55,0x66} ; void init_serialcomm(void) { SCON=0x50; //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收

PCON=0x00; ES=1; TMOD=0x21; //定时器工作于方式2,自动装载方式 TH0=(65536-1000)%256; TL0=(65536-1000)/256; TL1=0xfd; TH1=0xfd; ET0=1; TR0=1; TR1=1; // TI=0; EA=1; // TI=1; RAMDATA=0x1F45; } void serial () interrupt 4 using 3 { if(RI) { RI=0; ch=SBUF; TI=1; //置SBUF空 switch(ch) { case 0x01 :printf("A"); TI=0;break; case 0x02 :printf("B"); TI=0;break; case 0x03 :printf("C"); TI=0;break;

51单片机和计算机之间实现串口通信的电路图

51单片机和计算机之间实现串口通信的电路图 串口通讯参考程序如下: 来源:深入浅出AVR单片机 #include unsigned char UART_RX; //定义串口接收数据变量 unsigned char RX_flag; //定义穿行接收标记 /**************************************************************************************** ***** 函数名:UART串口初始化函数 调用:UART_init(); 参数:无 返回值:无 结果:启动UART串口接收中断,允许串口接收,启动T/C1产生波特率(占用) 备注:振荡晶体为12MHz,PC串口端设置[ 4800,8,无,1,无] /**************************************************************************************** ******/ void UART_init (void){ EA = 1; //允许总中断(如不使用中断,可用//屏蔽) ES = 1; //允许UART串口的中断 TMOD = 0x20; //定时器T/C1工作方式2 SCON = 0x50; //串口工作方式1,允许串口接收(SCON = 0x40 时禁止串口接收) TH1 = 0xF3; //定时器初值高8位设置 TL1 = 0xF3; //定时器初值低8位设置 PCON = 0x80; //波特率倍频(屏蔽本句波特率为2400) TR1 = 1; //定时器启动 } /**************************************************************************************** ******/ /**************************************************************************************** ***** 函数名:UART串口接收中断处理函数 调用:[SBUF收到数据后中断处理] 参数:无 返回值:无 结果:UART串口接收到数据时产生中断,用户对数据进行处理(并发送回去)备注:过长的处理程序会影响后面数据的接收

单片机实验报告串行口

单片机实验报告 实验名称:串行通信实验 姓名:魏冶 学号:090402105 班级:光电一班 实验时间:2011-11-29 南京理工大学紫金学院电光系

一、实验目的 1、理解单片机串行口的工作原理; 2、学习使用单片机的TXD、RXD口; 3、了解MAX232芯片的使用。 二、实验原理 MCS-51单片机内部集成有一个UART,用于全双工方式的串行通信,可以发送、接收数据。它有两个相互独立的接收、发送缓冲器,这两个缓冲器同名(SBUF),共用一个地址号(99H),发送缓冲器只能写入,不能读出,接收缓冲器只能读出,不能写入。 要发送的字节数据直接写入发送缓冲器,SBUF=a;当UART接收到数据后,CPU从接收缓冲器中读取数据,a=SBUF;串行接口内部有两个移位寄存器,一个用于串行发送,一个用于串行接收。定时器T1作为波特率发生器,波特率发生器的溢出信号做接收或发送移位寄存器的移位时钟。TI和RI分别发送完数据和接收完数据的中断标志,用来向CPU发中断请求。 三、实验内容 1、学会DPFlash软件的操作与使用,以及内部内嵌的一个串口调试软件的使用。 2、用串口连接PC机和DP-51PROC单片机综合仿真实验仪。 3、编写一个程序,利用单片机的串行口发送0x55,波特率为9600。 程序设计流程图

4、程序下载运行后,可在PC机上的串口调试软件上(内嵌在DPFlash软件的串口调 试器,设置通信口为COM1口,波特率为9600,数据位8,停止位1)看到接收到“UUUUUU……”,出现这样的结果就基本达到要求。 (1)代码: #include void main() { long int i; SCON=0x40; PCON=0; TMOD=0x20; TH1=0xfd; TL1=0xfd; TI=1; TR1=1; star:for(i=0;i<5000;i++); SBUF=0x55; goto star; } (2)电路图; 5、在单片机接收到0x55时返回一个0x41,在PC机一端,以接收到0x41完成,波特率2400。

51单片机的串行接口

51单片机的串行接口 串行接口的一般概念 单片机与外界进行信息交换称之为通讯。 8051单片机的通讯方式有两种: 并行通讯:数据的各位同时发送或接收。 串行通讯:数据一位一位顺序发送或接收。参看下图: 串行通讯的方式 异步通讯:它用一个起始位表示字符的开始,用停止位表示字符的结束。其每帧的格式如下: 在一帧格式中,先是一个起始位0,然后是8个数据位,规定低位在前,高位在后,接下来是奇偶校验位(可以省略),最后是停止位1。用这种格式表示字符,则字符可以一个接一个地传送。 在异步通讯中,CPU与外设之间必须有两项规定,即字符格式和波特率。字符格式的规定是双方能够在对同一种0和1的串理解成同一种意义。原则上字符格式可以由通讯的双方自由制定,但从通用、方便的角度出发,一般还是使用一些标准为好,如采用ASCII标准。 波特率即数据传送的速率,其定义是每秒钟传送的二进制数的位数。例如,数据传送的速率是120字符/s,而每个字符如上述规定包含10数位,则传送波特率为1200波特。 同步通讯:在同步通讯中,每个字符要用起始位和停止位作为字符开始和结束的标志,占用了时间;所以在数据块传递时,为了提高速度,常去掉这些标志,采用同步传送。由于数据块传递开始要用同步字符来指示,同时要求由时钟来实现发送端与接收端之间的同步,故硬件较复杂。 通讯方向:在串行通讯中,把通讯接口只能发送或接收的单向传送方法叫单工传送;而把数据在甲乙两机之间的双向传递,称之为双工传送。在双工传送方式中又分为半双工传送和全双工传送。半双工传送是两机之间不能同时进行发送和接收,任一时该,只能发或者只能收信息。 2.8051单片机的串行接口结构 8051串行接口是一个可编程的全双工串行通讯接口。它可用作异步通讯方式(UART),与串行传送信息的外部设备相连接,或用于通过标准异步通讯协议进行全双工的8051多机系统也可以通过同步方式,使用TTL或CMOS 移位寄存器来扩充I/O口。 8051单片机通过引脚RXD(P3.0,串行数据接收端)和引脚TXD(P3.1,串行数据发送端)与外界通讯。SBUF是串行口缓冲寄存器,包括发送寄存器和接收寄存器。它们有相同名字和地址空间,但不会出现冲突,因为它们两个一个只能被CPU读出数据,一个只能被CPU写入数据。 串行口的控制与状态寄存器 串行口控制寄存器SCON 它用于定义串行口的工作方式及实施接收和发送控制。字节地址为98H,其各位定义如下表:

51单片机串口通信讲解

51系列单片机串口通信实例教程 单片机的串口通信看起来是很复杂的,主要是因为他用到了更多的寄存器,与前面的知识相比他更具综合能力,写起来考虑的问题自然也变多了.而前面学习过的定时器与中断将是单片机通信的基础. 单片机的中断系统中第4个中断就是串口中断,要进行串口通信首先就要打开CPU总中断EA,还要打开串口通信中断ES,这是串口通信的前堤,而串口通信也跟计时器一样有很多的模式,因此我们还要设置SCON寄存器来指定采用哪一种方式进行通信,而在通信的过程中,我们还要设定通信的波特率,不然的话,单片机是没办法进行采样的,这样也不会得到正确的结果了.我在实验过程中用到的是1号定时器来设定的波特率,用到了计时器方式2,也就是8位自动重装,这样可以简化编程,她的实现思想就是将常数放入TH,而TL中则是初始化参数,当溢出时,单片机会自动将TH中的常数装入TL中. 再来说说波特率,我们为什么要设定波特率,因为单片机会以16倍波特率的速度进行采样,而在实验中我们用的是10位异步收发方式,因此要将SM0置0,SM1置1.而其中的10位

有8位数据位,第一位和最后一位是发送数据的起始与结束.采用高的皮特率就不会出错啦.而波特率是有一个公式的: 方式0的波特率 = fosc/12 方式2的波特率 =(2SMOD/64)· fosc 方式1的波特率 =(2SMOD/32)·(T1溢出率) 方式3的波特率 =(2SMOD/32)·(T1溢出率) T1 溢出率= fosc /{12×[256 -(TH1)]} 根据公式我们很容易就算出当晶振为110592HZ时,要达到9600的波特率,我们只需要将TL1置FDH即可,如下图: 除此之外,你还要将SCON中的REN位置1,不然的话,单片机是不会接收数据的. 还有不要忘了选择定时器的工作方式,设置TMOD为0x20既是工作方式2,8位自动重装定时器. 这样一来,初始批工作算是差不多了.而串口通信分为中断方式,和查询方式,如果你想用查询方式你也不用设置IE寄存器了. 在串口通信中,还有一个很重要的寄存器SBUF,其实也不是一个,是两个,只是它们共用同一个地址,再热气表达式的不同,单片机会自动选择使用哪一个SBUF. 下面是我写的一个例子程序,产生的效果是:向单片机发送任一个0~255之间的数,将会被显示到数码管上.并且单片机还会自动把刚才传过去的数又发送回来 ,实验过程中用到了几个工具如下:

51单片机串口通信(相关例程)

51单片机串口通信 1./*打开串口调试程序,将波特率设置为9600,无奇偶校验 晶振11.0592MHz,发送和接收使用的格式相同,如都使用 字符型格式,在发送框输入hello,I Love MCU ,在接 收框中同样可以看到相同字符,说明设置和通信正确*/ #include /*主程序*/ void main (void) { SCON = 0x50; /* SCON: 模式1, 8-bit UART, 使能接收*/ TMOD |= 0x20; /* TMOD: timer 1, mode 2, 8-bit reload*/ TH1 = 0xFD; /* TH1: reload value for 9600 baud @ 11.0592MHz */ TR1 = 1; /* TR1: timer 1 run */ EA = 1; /*打开总中断*/ ES = 1; /*打开串口中断*/ while (1) /*主循环不做任何动作*/ { } } void UART_SER (void) interrupt 4 //串行中断服务程序 { unsigned char Temp; //定义临时变量 if(RI) //判断是接收中断产生 { RI=0; //标志位清零 Temp=SBUF; //读入缓冲区的值 P1=Temp; //把值输出到P1口,用于观察 SBUF=Temp; //把接收到的值再发回电脑端 } if(TI) //如果是发送标志位,清零 TI=0; } 2.51单片机与电脑串口通信的C程序,最好是中断方式的 #include #include unsigned char ch; bit read_flag= 0 ; void init_serialcom( void ) //串口通信初始设定 { SCON = 0x50 ; //UART为模式1,8位数据, 允许接收 TMOD |= 0x20 ; //定时器1为模式2,8位自动重装 PCON |= 0x80 ; //SMOD=1; TH1 = 0xFD ; //Baud:19200 fosc="11".0592MHz IE |= 0x90 ; //Enable Serial Interrupt TR1 = 1 ; // timer 1 run

51单片机--串口设置

51单片机---串口通讯 一、简介 MCS-51单片机内部有一个可编程的双向全双工串行通信接口,简称串口;该串口有4种工作方式,以适用于不同场合;其波特率由单片机内部的定时器/计数器产生,可由软件设置;接收和发送均可工作在查询模式和中断模式,比较灵活; 二、串口结构与控制 MCS-51单片机内部的串口拥有两个物理上相互独立的接收、发送缓冲器SBUF,可以同时接收和发送数据;发送缓冲器只能写入而不能读出,接收缓冲器只能读出而不能写入;两个缓冲器占用同一个地址(99H);控制MCS-51单片机串口的寄存器有两个SCON和PCON; 1、串口工作方式控制寄存器SCON(99H) 如下图: (1)、SM0和SM1:控制单片机的工作方式; (2)、SM2:允许方式2和方式3进行多机通信控制位; (3)、REN:允许串行接收控制位;1-允许接收;0-禁止接收; (4)、TB8:用于工作在方式2和方式3时存放要发送的第9位数据,根据需要,由软件设置; (5)、RB8:用于工作在方式2和方式3时存放接收到的第9位数据; (6)、TI:发送中断标志位,必须由软件清0;当发送完一帧数据时,就产生一个中断,此时TI被硬件自动置1,用于标记产生了发送中断; (7)、RI:接收中断标志位,必须由软件清0;当接收完一帧数据时,就产生一个中断,此时RI被硬件自动置1,用于标记产生了接收中断; 2、特殊功能寄存器PCON(87H) 如下图: (1)、SMOD:波特率倍增位;当SMOD=1时,波特率加倍;当SMOD=0时,波特率不加倍; (2)、GF1和GF0:两个通用标志,供用户使用; (3)、PD和IDL:CHMOS型8051单片机的低功耗控制位; 三、串口的工作方式 串口的工作方式有4种,由特殊功能寄存器SCON的SM0位和SM1位共同决定; 如下表:

51单片机串口调试程序

串口调试程序:(已通过编译) //串口调试程序51单片机 /******************************************************************/ #include//头文件调用,写程序时都要加上 #define uint unsigned int//宏定义,为了后面定义变量书写简便 #define uchar unsigned char /******************************************************************//*名称:主函数*/ /*内容:打开串口调试程序,将波特率设置为9600,无奇偶校验*/ /*晶振11.0592MHz,发送和接收使用的格式相同,如都使用*/ /*字符型格式,在发送框输入hello,ILoveMCU,在接*/ /*收框中同样可以看到相同字符,说明设置和通信正确*/ /******************************************************************/ //******波特率设置及串口初始化 #define baudrate 9600UL #define fosc 11059200UL//其中,UL是不能省略的,代表长整型。 unsigned char a,flag; void serial_init(void) { unsigned char S_MOD=1; TMOD=0x20;//T1工作在方式2 SCON=0x50;//SM0=0 SM1=1->串口通信在模式1, //SM2=0->多级通信中使用的位,REN=1; PCON=0; if((PCON&0x80)==0x80) S_MOD=2; TH1=256-(fosc*S_MOD)/(baudrate*12*32);//其中SMOD=0, TL1=256-(fosc*S_MOD)/(baudrate*12*32); TR1=1; ES=1; EA=1; } //************* void main(void) { serial_init(); //初始化 while(1) //主循环不做任何动作 {} } /******************************************************************//*串口中断程序*/ /******************************************************************/ void UART_SER() interrupt 4 {

51单片机模拟串口的三种方法

随着单片机的使用日益频繁,用其作前置机进行采集和通信也常见于各种应用,一般是利用前置 机采集各种终端数据后进行处理、存储,再主动或被动上报给管理站。这种情况下下,采集会需 要一个串口,上报又需要另一个串口,这就要求单片机具有双串口的功能,但我们知道一般的51 系列只提供一个串口,那么另一个串口只能靠程序模拟。 本文所说的模拟串口,就是利用51的两个输入输出引脚如P1.0和P1.1,置1或0分别代表高低电平,也就是串口通信中所说的位,如起始位用低电平,则将其置0,停止位为高电平,则将其置 1,各种数据位和校验位则根据情况置1或置0。至于串口通信的波特率,说到底只是每位电平持续 的时间,波特率越高,持续的时间越短。如波特率为9600BPS,即每一位传送时间为 1000ms/9600=0.104ms,即位与位之间的延时为为0.104毫秒。单片机的延时是通过执行若干条 指令来达到目的的,因为每条指令为1-3个指令周期,可即是通过若干个指令周期来进行延时的, 单片机常用11.0592M的的晶振,现在我要告诉你这个奇怪数字的来历。用此频率则每个指令周期 的时间为(12/11.0592)us,那么波特率为9600BPS每位要间融多少个指令周期呢? 指令周期s=(1000000/9600)/(12/11.0592)=96,刚好为一整数,如果为4800BPS则为 96x2=192,如为19200BPS则为48,别的波特率就不算了,都刚好为整数个指令周期,妙吧。至于 别的晶振频率大家自已去算吧。 现在就以11.0592M的晶振为例,谈谈三种模拟串口的方法。 方法一:延时法 通过上述计算大家知道,串口的每位需延时0.104秒,中间可执行96个指令周期。 #define uchar unsigned char sbit P1_0 = 0x90; sbit P1_1 = 0x91; sbit P1_2 = 0x92; #define RXD P1_0 #define TXD P1_1 #define WRDYN 44 //写延时 #define RDDYN 43 //读延时 //往串口写一个字节 void WByte(uchar input) { uchar i=8; TXD=(bit)0; //发送启始 位 Delay2cp(39); //发送8位数据位 while(i--) { TXD=(bit)(input&0x01); //先传低位 Delay2cp(36); input=input>>1; } //发送校验位(无) TXD=(bit)1; //发送结束 位 Delay2cp(46); } //从串口读一个字节 uchar RByte(void) { uchar Output=0; uchar i=8; uchar temp=RDDYN; //发送8位数据位 Delay2cp(RDDYN*1.5); //此处注意,等过起始位 while(i--) { Output >>=1; if(RXD) Output |=0x80; //先收低位 Delay2cp(35); //(96-26)/2,循环共 占用26个指令周期 } while(--temp) //在指定的 时间内搜寻结束位。

MCS-51单片机的串行通信口

MCS-51的串行通信口 MCS-51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据也可以发送数据。但接收缓冲器只能读出不能写入,而发送缓冲器则只能写入不能读出,它们的地址为99H。这个通信口既可以用于网络通信,亦可实现串行异步通信,还可以构成同步移位寄存器使用。如果在传行口的输入输出引脚上加上电平转换器,就可方便地构成标准的RS-232接口。下面我们分别介绍。 [1]. 基本概念 数据通信的传输方式 常用于数据通信的传输方式有单工、半双工、全双工和多工方式。 单工方式:数据仅按一个固定方向传送。因而这种传输方式的用途有限,常用于串行口的打印数据传输与简单系统间的数据采集。 半双工方式:数据可实现双向传送,但不能同时进行,实际的应用采用某种协议实现收/发开关转换。 全双工方式:允许双方同时进行数据双向传送,但一般全双工传输方式的线路和设备较复杂。 多工方式:以上三种传输方式都是用同一线路传输一种频率信号,为了充分地利用线路资源,可通过使用多路复用器或多路集线器,采用频分、时分或码分复用技术,即可实现在同一线路上资源共享功能,我们盛之为多工传输方式。 串行数据通信两种形式 异步通信 在这种通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的,异步通信用一帧来表示一个字符,其内容如下:一个起始位,仅接着是若干个数据位,图2是传输45H的数据格式。

同步通信 同步通信格式中,发送器和接收器由同一个时钟源控制,为了克服在异步通信中,每传输一帧字符都必须加上起始位和停止位,占用了传输时间,在要求传送数据量较大的场合,速度就慢得多。同步传输方式去掉了这些起始位和停止位,只在传输数据块时先送出一个同步头(字符)标志即可。 同步传输方式比异步传输方式速度快,这是它的优势。但同步传输方式也有其缺点,即它必须要用一个时钟来协调收发器的工作,所以它的设备也较复杂。 串行数据通信的传输速率 串行数据传输速率有两个概念,即每秒转送的位数bps(Bit per second)和每秒符号数—波特率(Band rate),在具有调制解调器的通信中,波特率与调制速率有关。 [2]. MCS-51的串行口和控制寄存器 串行口控制寄存器 MCS-51单片机串行口寄存器结构如图3所示。SBUF为串行口的收发缓冲器,它是一个可寻址的专用寄存器,其中包含了接收器和发送器寄存器,可以实现全双工通信。但这两个寄存器具有同一地址(99H)。MCS-51的串行数据传输很简单,只要向发送缓冲器写入数据即可发送数据。而从接收缓冲器读出数据即可接收数据。 此外,从图中可看出,接收缓冲器前还加上一级输入移位寄存器,MCS-51这种结构目的在于接收数据时避免发生数据帧重叠现象,以免出错,部分文献称这种结构为双缓冲器结构。而发送数据时就不需要这样设置,因为发送时,CPU是主动的,不可能出现这种现象。 串行通信控制寄存器 在上一节我们已经分析了SCON控制寄存器,它是一个可寻址的专用寄存器,用于串行数据的通信控制,单元地址是98H,其结构格式如下: 表1 SCON寄存器结构 SCON D7 D6 D5 D4 D3 D2 D1 D0 SM0 SM1 SM2 REN TB8 RB8 TI RI 位地址 9FH 9EH 8DH 9CH 9BH 9AH 99H 98H

第八课51单片机串行口工作原理

第八课:51单片机串行口工作原理 MCS-51系列单片机片内有一个串行I/O端口,通过引脚RXD(P3.0)和TXD(P3.1)可与外设电路进行全双工的串行异步通信。 1.串行端口的基本特点 8031单片机的串行端口有4种基本工作方式,通过编程设置,可以使其工作在任一方式,以满足不同应用场合的需要。其中,方式0主要用于外接移位寄存器,以扩展单片机的I/O电路;方式1多用于双机之间或与外设电路的通信;方式2,3除有方式l的功能外,还可用作多机通信,以构成分布式多微机系统。 串行端口有两个控制寄存器,用来设置工作方式、发送或接收的状态、特征位、数据传送的波特率(每秒传送的位数)以及作为中断标志等。 串行端口有一个数据寄存器SBUF(在特殊功能寄存器中的字节地址为99H),该寄存器为发送和接收所共同。发送时,只写不读;接收时,只读不写。在一定条件下,向阳UF写入数据就启动了发送过程;读SBUf就启动了接收过程。 串行通信的波特率可以程控设定。在不同工作方式中,由时钟振荡频率的分频值或由定时器Tl的定时溢出时间确定,使用十分方便灵活。 2.串行端口的工作方式 ①方式0 8位移位寄存器输入/输出方式。多用于外接移位寄存器以扩展I/O端口。波特率固定为fosc/12。其中,fosc为时钟频率。 在方式0中,串行端口作为输出时,只要向串行缓冲器SBUF写入一字节数据后,串行端口就把此8位数据以等的波特率,从RXD引脚逐位输出(从低位到高位);此时,TXD输出频率为fosc/12的同步移位脉冲。数据发送前,仅管不使用中断,中断标志TI还必须清零,8位数据发送完后,TI自动置1。如要再发送,必须用软件将TI清零。 串行端口作为输入时,RXD为数据输入端,TXD仍为同步信号输出端,输出频率为fosc/12的同步移位脉冲,使外部数据逐位移入RxD。当接收到8位数据(一帧)后,中断标志RI自动置。如果再接收,必须用软件先将RI清零。 串行方式0发送和接收的时序过程见下图。 ②方式1

两个单片机之间串口通信

/*******温度数据采集主机程序********/ #include #include #include #define uint unsigned int #define uchar unsigned char sbit wds=P2^2;//温度传感器ds18b20 uchar flag,i; uchar code table[3]; uint temp;//uint不用uchar,uchar范围不够大 float f_temp; void initb20();//ds18b20初始化 bit tempreadbit(void); uchar tempread(void); void tempwritebyte(uchar dat); void tempchange(void); bit tempreadbit(void); void tempwritebyte(uchar dat); void delayms(uint z){ uint x,y; for(x=z;x>0;x--) for(y=110;y>0;y--); } /********************串行方式1发送模块*************************/ void init(){ /*设置定时器1方式2*/ TMOD=0x20; TH1=0XFD;//波特率设置为9600bps TL1=0XFD; TR1=1; /*串口方式1********/ SM0=0; SM1=1; PCON=0X80; ES=1; EA=1; initb20(); } /*******发送子函数*********/ void send(uchar dat){ SBUF=128+dat; while(!TI); TI=0; }

相关主题
文本预览
相关文档 最新文档