版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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的C515.3 串行口的C51编程应用示例15.1 串行口基础知识5.1.1 串行口的结构5.1.2 有关的寄存器5.1.3 串行口的工作方式25.1.1 串行口的结构35.1.2 有关的寄存器1串行控制寄存器SCON2电源控制寄存器PCON45.1.3 串行口的工作方式1工作方式0 串行口工作方式0为同步
2、移位寄存器输入/输出方式,可外接移位寄存器,以扩展I/O口。 方式0可分为方式0输入和方式0输出两种方式。 但应注意:在这种方式下,不管输出还是输入,通信数据总是从P3.0(RXD)引脚输出或输入,而P3.1(TXD)引脚总是用于输出移位脉冲,每一移位脉冲将使RXD端输出或者输入1位二进制码。5(1)方式0输出使用方式0实现数据的移位输出时,实际上是把串行口变成并行口使用。 6(2)方式0输入75. 2 不同工作方式下的C51编程5.2.1 工作方式0的C51程序设计5.2.2 工作方式1的C51程序设计5.2.3 工作方式2的C51程序设计5.2.4 工作方式3的C51程序设计85.2.1
3、工作方式0的C51程序设计方式0是同步移位寄存器输入/输出。格式:91、方式0的波特率 在串口方式0下,每个机器周期产生一个移位时钟,对应着一个比特数据的发送和接收。因此,此时波特率固定为单片机振荡频率的1/12,其波特率计算公式如下: 串口方式0波特率=fosc/12 在串口方式0下,波特率不受波特率倍增SMOD的影响。因此,在C51程序设计时只要指定工作方式0便完成串口速率的设置,而无需再设置波特率。102方式0的数据发送及C51程序设计对于方式0的数据发送,单片机的TXD引脚都用于发送移位脉冲,而8位串行数据是通过单片机的RXD引脚来输出。方式0的数据发送流程:对寄存器SCON进行初始化
4、,即工作方式的设置。由于使用串行口方式0,只需将00H送入SCON即可。置串行接口控制寄存器SCON的TI=0,启动串行口发送。11执行写发送缓冲器指令 SBUF=i;单片机的CPU执行完这条指令后,在TXD引脚发送同步移位脉冲,8位数据便从RXD端由低位到高位逐个发送出去。当8位数据发送完毕的时候,单片机硬件自动置中断标志TI=1,请求中断,表示发送缓冲器已空。准备下一次数据发送。标志位TI不会自动清零,当要发送下一组数据时,必须在软件中置TI=0,然后才能发送下一组数据。串行口方式0的数据输出可以采用查询方式,也可以采用中断方式。在查询方式下,通过while语句查询TI的值,如果TI=1则
5、结束查询,可以发送下一组数据;如果TI=0,则继续查询。在中断方式下,在TI置位好产生中断申请,在中断服务程序中发送下一组数据。此时,需要开启相应的中断请求。 12例5-1】方式0数据发送的C51程序设计示例13(1)采用查询方式的#includevoid main( ) unsigned char i=0 x55; SCON=0 x00;/初始化串口方式0 SBUF=i;/输出数据到SBUF,启动串行输出 while(TI)/等待TI=1 TI=0; while(1);14(2)采用中断方式的#includevoid SISR(void) interrupt 4 TI=0; void mai
6、n( ) unsigned char i=0 x55; SCON=0 x00;/初始化串口方式0 EA=1; ES=1;/允许串行中断 SBUF=i;/输出数据到SBUF,启动串行输出 while(1)/等待TI=1 ; 153方式0的数据接收及C51程序设计对于方式0的数据接收,单片机的TXD引脚都用于发送同步移位脉冲,而8位串行数据是通过RXD引脚来输入。在方式0下,C51程序可以按照如下的流程来进行数据的接收:首先,需要对寄存器SCON进行初始化,即工作方式的设置。由于这里使用的是串行口的方式0,允许接收,因此需将10H送人SCON,即置REN=1。另外,在方式0工作时,寄存器SCON中
7、的SM2必须置0,而RB8位和TB8位都不起作用,一般置0即可。此时,在TXD端发送同步移位脉冲,在同步脉冲为低电平的时候,8位数据从RXD引脚由低位到高位逐位接收。当8位数据接收完毕的时候,硬件自动置RI=1,请求中断,表示接收数据已装人接收缓冲器,可以由CPU读取,示例如下: i=SBUF;/读取数据到变量i16准备下一次接收数据。由于RI不会自动清零,当需要接收下一组数据的时候,必须在软件中置RI=0,然后才可以接收下一组数据。此时,同样可以采用查询和中断两种方式,分别介绍如下。在查询方式中,使用while语句查询RI的值,如果RI=1则结束查询,可以接收下一组数据;如果RI-0,则继续
8、查询。在中断方式中,在RI置位后产生中断申请,在中断服务程序中接收下一组数据。此时,需要开启相应的中断请求。 17【例5-2】方式0数据接收的C51程序设计18(1)采用查询方式#includesbit S_L=P30;void main( ) unsigned char i; SCON=0 x10;/初始化串口方式0 while(1) S_L =0;/并行数据送入74LS165 S_L =1; while(RI)/查询RI=1 RI=0; i=SBUF; P1=i; 19(2)采用中断方式#includeint i;void SISR(void) interrupt 4 RI=0; i=SB
9、UF;void main( ) SCON=0 x10;/初始化串口方式0 EA=1; ES=1;/开启串行中断 while(1) ; 205.3 串行口的C51编程应用示例【例5-9】串行口自发自收21#include#define uchar unsigned char#define uint unsigned intvoid main( ) uchar i=0 x55; uint j=0; TMOD=0X20;/设定定时器1模式2 TL1=TH1=0XF4; PCON=0X00; SCON=0X50; TR1=1; while(1) SBUF=i;/发送数据 do( )while(!RI)
10、 RI=0; TI=0; i=SBUF;/读取接收数据 P1=i; i=i;/将发送数据取反 for(j=0;j12500;j+); 22【例5-10】两个单片机串行通信123单片机1的C51源程序代码:#include#define uint unsigned int#define uchar unsigned charvoid main( ) uchar i; TMOD=0 x20; TH1=TL1=0 xff; SCON=0 x50; PCON=0 x80; TR1=1; P1=0 xff; while(1) P1=0 xff; i=P1; SBUF=i; while(TI=0) ; TI=0; 24单片机2的C51源程序:#include#define uint unsig
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024学校锅炉工环境保护与节能减排合同范本3篇
- 自动打铃器课程设计数电
- 汉川市汽车营销课程设计
- 自动飞行系统课程设计
- 2024年装表接电工(初级工)技能鉴定理论考试复习题库(含答案)
- 2024年美术教案课件
- 童话课程设计封面
- 立式车床主轴箱课程设计
- 小班兔子绘本课程设计
- 金融投资行业顾问工作总结
- GA 1802.2-2022生物安全领域反恐怖防范要求第2部分:病原微生物菌(毒)种保藏中心
- 企业EHS风险管理基础智慧树知到答案章节测试2023年华东理工大学
- 健身俱乐部入场须知
- 井下机电安装安全教育培训试题及答案
- TZJXDC 002-2022 电动摩托车和电动轻便摩托车用阀控式铅酸蓄电池
- GB/T 4744-2013纺织品防水性能的检测和评价静水压法
- GB/T 337.1-2002工业硝酸浓硝酸
- 《解放战争》(共48张PPT)
- 放射工作人员法律法规及防护知识培训考核试题附答案
- 劳动仲裁追加申请申请书(标准版)
- 西方法律思想史 课件
评论
0/150
提交评论