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

单片机的串行口

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。

(完整版)第六章80C51的串行口习题及答案

第六章80C51的串行口习题及答案 1、80C51单片机串行口有几种工作方式?如何选择?简述其特点? 答:80C51单片机串行口有4种工作方式。各方式的特点: 方式0:串行口为同步移位寄存器的输入输出方式。主要用于扩展并行输入或输出口。波特率固定为晶振频率的1/12。 方式1:为10位数据异步通信口。波特率可变。 方式2或方式3:为11位数据的异步通信口。方式2波特率固定,相对于固定的晶振频率只有两种波特率。方式3波特率可变。 使用时,根据需要和各方式的特点配合选择。 2、串行通信的接口标准有哪几种? 答:串行通信接口标准有:1.RS_232C接口;2.RS_422A接口;3. RS_485接口。 3、在串行通信中,通信速率与传输距离之间的关系如何? 答:在串行通信中,传输距离与传输速率的关系:当传输线使用每0.3m(约1ft)有50pF电容的非平衡屏蔽双绞线时,传输距离随传输速率的增加而减小。 5、利用单片机串行口扩展24个发光二极管和8个按键,要求画出电路图并编 写程序,使24个发光二极管按照不同的顺序发光(发光的时间间隔为1s)。答:实现电路图如下: 扩展I/O口时使用方式0,波特率固定,实现程序如下: BOOT:CLR EA

MOV SCON,#10H CLR P1.0 ;关闭I0扩展口 CLR P1.1 CLR P1.2 CLR P1.3 ;对键盘扩展芯片165使能 MAIN: SETB P1.0 ;对第一个扩展IO口芯片使能 ACALL DISPLAY CLR P1.0 SETB P1.1 ;第一个扩展IO口顺序显示完毕,对第二个扩展IO芯片使能 ACALL DISPLAY CLR P1.1 SETB P1.2 ACALL DISPLAY CLR P1.2 SJMP MAIN ;循环显示 DISPLAY: MOV A,#00000001b ;从第一个开始 MOV R4,#8 ;送显示长度 LOOP: MOV SBUF, A CALL DELAY1S DJNZ R4, LOOP RET END 6、编制图6.30的中断方式的数据接收程序。

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串行接口的组成 (一)学习要求

80C51串行口通信

80C51串行口通信 80C51串行口的结构 TXD 是80C51单片机的P3.1口 RXD 是80C51单片机的P3.0口 T1 溢出率是定时器1 的溢出率 SMOD 是发送速率倍频的 16分频 T1每溢出一次发送一位,里面复杂咱们不管,每次发送完后TI 申请中断,就是串口每次发送完一个字节去申请一个中断,每接受完一个字节它也要申请一次中断。接受完了通过移位寄存器 SBUF 取走。发送也用SBUF .

单片机上有两个物理上独立的接受,发送缓冲器SBUF,它们占用同一地址99H;接受器是双缓冲结构;发送缓冲器,因为发送时CPU是主动的,不会产生重叠错误。 解释下这句话意思:物理上独立的但是地址相同,但是具体内部构造咱们不去了解它。2个寄存器一个负责发一个负责收,接受是双缓冲的结构。如果去取数据 A=SBUF ; 发送数据 SBUF =A; 就是说SBUF =A 就把A 发出去了。 A= SBUF 就是把 SBUF 的值给取出来给了A。单片机的串口就是这么简单。主要要搞好中断和比特率。 80C51串行口的控制寄存器 SCON 是一个特殊功能寄存器,用以设定串行口的工作方式、接受/发送控制以及设置状态标志;

有此图课看出地址诶98H 能对8整除所以可以进行位操作。 ●SMO 和SM1为工作方式选择位,可选择四种工作方式:如下图 串行口有4种工作方式。 0 、1、2、3。 f方式0 可以看出 是移位寄存器就是一位一位移位了,波特率是固定的晶 振除以12 Fosc(oscillator 振荡器),方式1 是10位异步收发器(8位数据),波特率可变。一下 2、3 类同。我们主要掌握方式1就OK。用的最多的也是方式1。波特率用软件控制,设置多少就多少。由于选择方式1 所以SMO SM1 就是 0 1 。

单片机实验报告串行口

单片机实验报告 实验名称:串行通信实验 姓名:魏冶 学号: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。

单片机80c51的串行口

80C51的串行口 下面是学习过程中的一些总结: 总括:计算机与外界信息的交换称为通信,主要有两种方式:并行通信:传输速度快,但传输线较多,价格较贵。 串行通信:数据的各位按顺序一位一位发送或接收。 大多数单片机都配置了SCI串行口,主要有两种方式: 1、异步通信:每个字符为一帧,要包括: 起始位、数据位、校验位、停止位。 每帧数据之间的时间间隔是不固定的,字符间的同步依靠通信 协议实现;帧内每一位数据的同步依靠收、发时钟实现 2、同步通信:信息流中的字符与字符间和字符内部位与位之间都 需要一个同步时钟。,可以把许多字符组成一个信息组,也称为一帧。 串行通信数据传输速率: 意义是每秒钟传送多少个二进制数。 一般异步通信在:50~9600bit/s 同步通信在:100~2Mbit/s 我们称之为比特率,但在二进制的情况下,比特率和波特率数值相同,故而一般称作“波特率”。

串行口简介: 组成:两个数据缓冲寄存器SBUF 一个串行口控制寄存器SCON 一个输入移位寄存器 串行口波特率发生器用于控制串行通信的速率(由内部的分频器和控制开关电路组成),它的振荡源可以来自单片机的振荡频率 f OSC,也可以来自定时/计数器的时钟输出。 外界数据通过引脚RXD(P3.0)输入。数据先逐位进入输入移位寄存器,在进入接收寄存器(SBUF),在接收器中采用了双缓冲结构,避免数据重叠(因为CPU是被动的)。 要发送的数据通过发送控制器控制逻辑门电路经输出移位寄存器一位一位输出到TXD(P3.1)。

串行口控制寄存器SCON: SM0,SM1为串行方式选择位,可以有四种方式; SM2为多机通信控制位,在方式2、3中配合发送/接收数据的第九位(TB8/RB8)对主机发来的数据识别并处理。 REN为允许串行接收位,要由软件控制置1为允许接收。 TI、RI为发送/接收中断标志位。 注意:在发送完数据后硬件会自动置TI为1,若要继续发送,必须用软件清零。准备接收时,首先要清零RI,接收完8位数据后硬件会自动置RI为1,然后执行读数据指令MOV A,SBUF,然后一定要清RI为0。 波特率的设置: 方式0:时钟频率的1/12,不受SMOD位影响。 方式2: (2SMOD/64)*f osc 方式1和3:(2SMOD/32)*T1溢出率 T1溢出周期:(12/f osc)*(256-X)和定时器有关了 我们一般是根据波特率计算溢出初值X。

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单片机的串行接口 串行接口的一般概念 单片机与外界进行信息交换称之为通讯。 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单片机串口通信 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

80C51单片机串口通信(含原程序)

(三)实现单片机与PC机的通信 一、实验原理: 51单片机的串行口是一个可编程全双工的通信接口,具有UART(通用异步收发器)的全部功能,能同时进行数据的发送和接收,也可作为同步移位寄存器使用。 二、详细程序: MCU TO PC 从单片机向PC发送一串十六进制代码:0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f 并将这些代码用发光二极管在发送端显示(流水灯效果)。 #include #define uchar unsigned char #define uint unsigned int uchar code tab[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; void send(uchar dat) { SBUF=dat; while(TI==0); TI=0; } void delay(void) { uchar x,y; for(x=0;x<220;x++) for(y=0;y<250;y++); } void main(void) { uchar i; TMOD=0x20; SCON=0x40; PCON=0x00; TH1=0xfd; TL1=0xfd; TR1=1; while(1) {

for(i=0;i<8;i++) { send(tab[i]); P2=tab[i]; delay(); } } } PC TO MCU 由PC机上的串口调试助手向MCU发送 0,1,2,3,4,5,6,7,8,9,A,b,C,d,E,F中的任一个字符,然后显示在MCU 的外设液晶显示器上。 #include #include #define uchar unsigned char #define uint unsigned int void transbyte(unsigned char d); //送1字节数据到液晶显示控制器子程序 void transbit(bit d); //送1位数据到液晶显示控制器子程序sbit CLKPIN = P1^6; sbit DIPIN = P1^3; uint num; uchar receive (void) { uchar dat; while(RI==0); RI=0; dat=SBUF; SBUF=dat; return dat; } unsigned char code NUMCODETAB[]={0xFC,0x60,0xDA,0xF2, //数字0,1,2,3 0x66,0xB6,0xBE,0xE0, //数字4,5,6,7 0xFE,0xF6,0xee,0x3e, //数字8,9,A,b, 0x9c,0x7a,0x9e,0x8e}; //C,d,E,F void transram(num) { unsigned char buf; buf=0x00;

89C51单片机I-O 口模拟串行通信的实现方法

89C51 单片机I/O 口模拟串行通信的实现方法 目前普遍采用的MCS51 和PIC 系列单片机通常只有一个(或没有)UART 异步串行通信接口,在应用系统中若需要多个串行接口(例如在多机通 信系统中,主机既要和从机通信又要和终端通信)的情况下,通常的方法是扩 展一片8251 或8250 通用同步/异步接收发送芯片(USART),需额外占用单片机I/O 资源。本文介绍一种用单片机普通I/O 口实现串行通信的方法,可在单片机的最小应用系统中实现与两个以上串行接口设备的多机通信。 1.串行接口的基本通信方式串行接口的有异步和同步两种基本通信方式。异步通信采用用异步传送格式,如图1 所示。数据发送和接收均将起始位和停止位作为开始和结束的标志。在异步通信中,起始位占用一位(低电平),用 来表示字符开始。其后为7 或8 位的数据编码,第8 位通常做为奇偶校验位。最后为停止位(高电平)用来表示字符传送结束。上述字符格式通常作为一个 串行帧,如无奇偶校验位,即为常见的N.8.1 帧格式。串行通信中,每秒传送的数据位称为波特率。如数据传送的波特率为1200 波特,采用N.8.1 帧格式(10 位),则每秒传送字节为120 个,而字节中每一位传送时间即为波特率的倒数:T=I/1200=0.833ms。同样,如数据传送的波特率为9600 波特,则字节中每一位传送时间为T=1/9600=0.104 ms。根据数据传送的波特率即字节中每一位的传送时间,我们便可用普通I/O 口来模拟实现串行通信的时序。 2.硬件电路89C51 单片机通过普通I/O 口与PC 机RS232 串口实现通信的硬件接口电路如图2 所示。由于PC 系列微机串行口为RS232C 标准接口,与输入、输出均采用TTL 电平的89C51 单片机在接口规范上不一致,因此TTL 电平到RS232 接口电平的转换采用MAXIM 公司的MAX232 标准RS232 接口芯片,该芯片可以用单电压(+5V)实现RS232 接口逻辑“1”(-

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) //在指定的 时间内搜寻结束位。

第八课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; }

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