收藏 分享(赏)

80C51串行口的编程.ppt

上传人:hyngb9260 文档编号:8315114 上传时间:2019-06-20 格式:PPT 页数:25 大小:431KB
下载 相关 举报
80C51串行口的编程.ppt_第1页
第1页 / 共25页
80C51串行口的编程.ppt_第2页
第2页 / 共25页
80C51串行口的编程.ppt_第3页
第3页 / 共25页
80C51串行口的编程.ppt_第4页
第4页 / 共25页
80C51串行口的编程.ppt_第5页
第5页 / 共25页
点击查看更多>>
资源描述

1、第5章 单片机串行口的C51编程,5.1 串行口基础知识5.1.1 串行口的结构5.1.2 有关的寄存器5.1.3 串行口的工作方式 5. 2 不同工作方式下的C51编程5.2.1 工作方式0的C51程序设计5.2.2 工作方式1的C51程序设计5.2.3 工作方式2的C51程序设计5.2.4 工作方式3的C51程序设计 5.3 串行口的C51编程应用示例,5.1 串行口基础知识,5.1.1 串行口的结构 5.1.2 有关的寄存器 5.1.3 串行口的工作方式,5.1.1 串行口的结构,5.1.2 有关的寄存器,1串行控制寄存器SCON,2电源控制寄存器PCON,5.1.3 串行口的工作方式,

2、1工作方式0串行口工作方式0为同步移位寄存器输入/输出方式,可外接移位寄存器,以扩展I/O口。方式0可分为方式0输入和方式0输出两种方式。但应注意:在这种方式下,不管输出还是输入,通信数据总是从P3.0(RXD)引脚输出或输入,而P3.1(TXD)引脚总是用于输出移位脉冲,每一移位脉冲将使RXD端输出或者输入1位二进制码。,(1)方式0输出,使用方式0实现数据的移位输出时,实际上是把串行口变成并行口使用。,(2)方式0输入,5. 2 不同工作方式下的C51编程,5.2.1 工作方式0的C51程序设计 5.2.2 工作方式1的C51程序设计 5.2.3 工作方式2的C51程序设计 5.2.4 工

3、作方式3的C51程序设计,5.2.1 工作方式0的C51程序设计,方式0是同步移位寄存器输入/输出。格式:,1、方式0的波特率,在串口方式0下,每个机器周期产生一个移位时钟,对应着一个比特数据的发送和接收。因此,此时波特率固定为单片机振荡频率的1/12,其波特率计算公式如下:串口方式0波特率=fosc/12在串口方式0下,波特率不受波特率倍增SMOD的影响。因此,在C51程序设计时只要指定工作方式0便完成串口速率的设置,而无需再设置波特率。,2方式0的数据发送及C51程序设计,对于方式0的数据发送,单片机的TXD引脚都用于发送移位脉冲,而8位串行数据是通过单片机的RXD引脚来输出。 方式0的数

4、据发送流程: 对寄存器SCON进行初始化,即工作方式的设置。由于使用串行口方式0,只需将00H送入SCON即可。 置串行接口控制寄存器SCON的TI=0,启动串行口发送。,执行写发送缓冲器指令 SBUF=i; 单片机的CPU执行完这条指令后,在TXD引脚发送同步移位脉冲,8位数据便从RXD端由低位到高位逐个发送出去。当8位数据发送完毕的时候,单片机硬件自动置中断标志TI=1,请求中断,表示发送缓冲器已空。 准备下一次数据发送。标志位TI不会自动清零,当要发送下一组数据时,必须在软件中置TI=0,然后才能发送下一组数据。串行口方式0的数据输出可以采用查询方式,也可以采用中断方式。 在查询方式下,

5、通过while语句查询TI的值,如果TI=1则结束查询,可以发送下一组数据;如果TI=0,则继续查询。 在中断方式下,在TI置位好产生中断申请,在中断服务程序中发送下一组数据。此时,需要开启相应的中断请求。,例5-1】方式0数据发送的C51程序设计示例,(1)采用查询方式的,#include void main( ) unsigned char i=0x55;SCON=0x00; /初始化串口方式0SBUF=i; /输出数据到SBUF,启动串行输出while(TI) /等待TI=1 TI=0;while(1); ,(2)采用中断方式的,#include void SISR(void) inte

6、rrupt 4 TI=0; void main( ) unsigned char i=0x55;SCON=0x00; /初始化串口方式0EA=1; ES=1; /允许串行中断SBUF=i; /输出数据到SBUF,启动串行输出while(1) /等待TI=1; ,3方式0的数据接收及C51程序设计,对于方式0的数据接收,单片机的TXD引脚都用于发送同步移位脉冲,而8位串行数据是通过RXD引脚来输入。 在方式0下,C51程序可以按照如下的流程来进行数据的接收: 首先,需要对寄存器SCON进行初始化,即工作方式的设置。由于这里使用的是串行口的方式0,允许接收,因此需将10H送人SCON,即置REN=

7、1。另外,在方式0工作时,寄存器SCON中的SM2必须置0,而RB8位和TB8位都不起作用,一般置0即可。 此时,在TXD端发送同步移位脉冲,在同步脉冲为低电平的时候,8位数据从RXD引脚由低位到高位逐位接收。 当8位数据接收完毕的时候,硬件自动置RI=1,请求中断,表示接收数据已装人接收缓冲器,可以由CPU读取,示例如下:i=SBUF; /读取数据到变量i,准备下一次接收数据。由于RI不会自动清零,当需要接收下一组数据的时候,必须在软件中置RI=0,然后才可以接收下一组数据。此时,同样可以采用查询和中断两种方式,分别介绍如下。 在查询方式中,使用while语句查询RI的值,如果RI=1则结束

8、查询,可以接收下一组数据;如果RI-0,则继续查询。 在中断方式中,在RI置位后产生中断申请,在中断服务程序中接收下一组数据。此时,需要开启相应的中断请求。,【例5-2】方式0数据接收的C51程序设计,(1)采用查询方式,#include sbit S_L=P30; void main( ) unsigned char i;SCON=0x10; /初始化串口方式0while(1) S_L =0; /并行数据送入74LS165S_L =1;while(RI) /查询RI=1 RI=0; i=SBUF; P1=i; ,(2)采用中断方式,#include int i; void SISR(void

9、) interrupt 4 RI=0;i=SBUF; void main( ) SCON=0x10; /初始化串口方式0EA=1; ES=1; /开启串行中断while(1) ; ,5.3 串行口的C51编程应用示例,【例5-9】串行口自发自收,#include #define uchar unsigned char #define uint unsigned int void main( ) uchar i=0x55;uint j=0;TMOD=0X20; /设定定时器1模式2TL1=TH1=0XF4;PCON=0X00;SCON=0X50;TR1=1;while(1) SBUF=i; /发

10、送数据do( )while(!RI)RI=0;TI=0;i=SBUF; /读取接收数据P1=i;i=i; /将发送数据取反for(j=0;j12500;j+); ,【例5-10】两个单片机串行通信1,单片机1的C51源程序代码:,#include #define uint unsigned int #define uchar unsigned char void main( ) uchar i;TMOD=0x20; TH1=TL1=0xff;SCON=0x50; PCON=0x80;TR1=1;P1=0xff;while(1) P1=0xff;i=P1; SBUF=i;while(TI=0);TI=0; ,单片机2的C51源程序:,#include #define uint unsigned int #define uchar unsigned char void main( ) uchar i=0;TMOD=0x20; TH1=TL1=0xff;SCON=0x50; PCON=0x80;TR1=1;while(1) while(RI=0);RI=0;i=SBUF;P1=i; ,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报