第5章串行口
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
3.方式0的数据接收及 .方式 的数据接收及 的数据接收及C51程序设计 程序设计
• 对于方式0的数据接收,单片机的TXD引脚都 用于发送同步移位脉冲,而8位串行数据是通 过RXD引脚来输入。 • 在方式0下,C51程序可以按照如下的流程来 进行数据的接收: • ①首先,需要对寄存器SCON进行初始化,即 工作方式的设置。由于这里使用的是串行口 的方式0,允许接收,因此需将10H送人SCON, 即置REN=1。另外,在方式0工作时,寄存器 SCON中的SM2必须置0,而RB8位和TB8位都 不起作用,一般置0即可。
5.3 串行口的 串行口的C51编程应用示例 编程应用示例
• 【例5-9】串行口自发自收 】
• • • • • • • • • • •
#include<reg51.h> #define uchar unsigned char #define uint unsigned int void main( ) { uchar i=0x55; uint j=0; TMOD=0X20; //设定定时器1模式2 TL1=TH1=0XF4; PCON=0X00; SCON=0X50; TR1=1;
(2)采用中断方式的 采用中断方式的
• • • • • • • • • • • #include<reg51.h> void SISR(void) interrupt 4 { TI=0; } void main( ) { unsigned char i=0x55; SCON=0x00; //初始化串口方式 初始化串口方式0 初始化串口方式 EA=1; ES=1; //允许串行中断 允许串行中断 SBUF=i; //输出数据到 输出数据到SBUF,启动串行输出 输出数据到 , while(1) //等待 等待TI=1 等待 {; } }
数据接收的C51程序 【例5-2】方式 数据接收的 】方式0数据接收的 程序 设计
(1)采用查询方式 采用查询方式
• • • • • • • • • • • • • • #include<reg51.h> sbit S_L=P3^0; void main( ) { unsigned char i; SCON=0x10; //初始化串口方式 初始化串口方式0 初始化串口方式 while(1) ( ) { S_L =0; //并行数据送入 并行数据送入74LS165 并行数据送入 S_L =1; while(RI) //查询 查询RI=1 查询 { RI=0; i=SBUF; P1=i; } } }
单片机1的 源程序代码: 单片机 的C51源程序代码: 源程序代码
• • • • • • • • • • • • • • • • • #include<reg51.h> #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; } }
5.1 串行口基础知识
• 5.1.1 串行口的结构 • 5.1.2 有关的寄存器 • 5.1.3 串行口的工作方式
Biblioteka Baidu
5.1.1 串行口的结构
5.1.2 有关的寄存器
• 1.串行控制寄存器SCON .串行控制寄存器
• 2.电源控制寄存器PCON .电源控制寄存器
5.1.3 串行口的工作方式
• 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 5.2.2 5.2.3 5.2.4 工作方式0的 工作方式 的C51程序设计 程序设计 工作方式1的 工作方式 的C51程序设计 程序设计 工作方式2的C51程序设计 工作方式2的C51程序设计 工作方式3的 工作方式 的C51程序设计 程序设计
5.2.1 工作方式 的C51程序设计 工作方式0的 程序设计
• 方式 是同步移位寄存器输入 输出。 方式0是同步移位寄存器输入 输出。 是同步移位寄存器输入/输出 • 格式: 格式:
1、方式0的波特率 、方式 的波特率
在串口方式0下 在串口方式 下,每个机器周期产生一个 移位时钟, 移位时钟,对应着一个比特数据的发送和接 因此, 收。因此,此时波特率固定为单片机振荡频 率的1/12,其波特率计算公式如下: 率的 ,其波特率计算公式如下: • 串口方式0波特率 波特率=fosc/12 串口方式 波特率 • 在串口方式0下 在串口方式 下,波特率不受波特率倍增 SMOD的影响。因此,在C51程序设计时只要 的影响。 的影响 因此, 程序设计时只要 指定工作方式0便完成串口速率的设置 便完成串口速率的设置, 指定工作方式 便完成串口速率的设置,而无 需再设置波特率。 需再设置波特率。 •
2.方式0的数据发送及 .方式 的数据发送及 的数据发送及C51程序设计 程序设计
• 对于方式 的数据发送,单片机的TXD引脚都 对于方式0的数据发送,单片机的 的数据发送 引脚都 用于发送移位脉冲, 用于发送移位脉冲,而8位串行数据是通过单 位串行数据是通过单 片机的RXD引脚来输出。 引脚来输出。 片机的 引脚来输出 • 方式 的数据发送流程: 方式0的数据发送流程 的数据发送流程: • ①对寄存器 对寄存器SCON进行初始化,即工作方式的 进行初始化, 进行初始化 设置。由于使用串行口方式0,只需将00H送 设置。由于使用串行口方式 ,只需将 送 入SCON即可。 即可。 即可 • ②置串行接口控制寄存器 置串行接口控制寄存器SCON的TI=0,启 的 , 动串行口发送。 动串行口发送。
• while(1) • { SBUF=i; //发送数据 • do( )while(!RI) • RI=0; • TI=0; • i=SBUF; //读取接收数据 • P1=i; • i=~i; //将发送数据取反 • for(j=0;j<12500;j++); • } • }
【例5-10】两个单片机串行通信 】两个单片机串行通信1
(2)采用中断方式 采用中断方式
• • • • • • • • • • • • #include<reg51.h> int i; void SISR(void) interrupt 4 { RI=0; i=SBUF; } void main( ) { SCON=0x10; //初始化串口方式 初始化串口方式0 初始化串口方式 EA=1; ES=1; //开启串行中断 开启串行中断 while(1) {; } }
• ④准备下一次数据发送。标志位TI不会自动 准备下一次数据发送。标志位 不会自动 清零,当要发送下一组数据时, 清零,当要发送下一组数据时,必须在软件 中置TI=0,然后才能发送下一组数据。串行 中置 ,然后才能发送下一组数据。 口方式0的数据输出可以采用查询方式 的数据输出可以采用查询方式, 口方式 的数据输出可以采用查询方式,也可 以采用中断方式。 以采用中断方式。 • 在查询方式下,通过 在查询方式下,通过while语句查询 的值, 语句查询TI的值 语句查询 的值, 如果TI=1则结束查询,可以发送下一组数据; 则结束查询, 如果 则结束查询 可以发送下一组数据; 如果TI=0,则继续查询。 如果 ,则继续查询。 • 在中断方式下,在TI置位好产生中断申请, 在中断方式下, 置位好产生中断申请, 置位好产生中断申请 在中断服务程序中发送下一组数据。此时, 在中断服务程序中发送下一组数据。此时, 需要开启相应的中断请求。 需要开启相应的中断请求。
• ③执行写发送缓冲器指令 SBUF=i; • 单片机的CPU执行完这条指令后,在 执行完这条指令后, 单片机的 执行完这条指令后 TXD引脚发送同步移位脉冲,8位数据 引脚发送同步移位脉冲, 位数据 引脚发送同步移位脉冲 便从RXD端由低位到高位逐个发送出去。 端由低位到高位逐个发送出去。 便从 端由低位到高位逐个发送出去 位数据发送完毕的时候, 当8位数据发送完毕的时候,单片机硬 位数据发送完毕的时候 件自动置中断标志TI=1,请求中断,表 件自动置中断标志 ,请求中断, 示发送缓冲器已空。 示发送缓冲器已空。
• ②此时,在TXD端发送同步移位脉冲, 在同步脉冲为低电平的时候,8位数据 从RXD引脚由低位到高位逐位接收。 • ③当8位数据接收完毕的时候,硬件自 动置RI=1,请求中断,表示接收数据已 装人接收缓冲器,可以由CPU读取,示 例如下: • i=SBUF; //读取数据到变量i
• ④准备下一次接收数据。由于RI不会自动清 准备下一次接收数据。由于 不会自动清 当需要接收下一组数据的时候, 零,当需要接收下一组数据的时候,必须在 软件中置RI=0,然后才可以接收下一组数据。 软件中置 ,然后才可以接收下一组数据。 此时,同样可以采用查询和中断两种方式, 此时,同样可以采用查询和中断两种方式, 分别介绍如下。 分别介绍如下。 • 在查询方式中,使用 在查询方式中,使用while语句查询 的值, 语句查询RI的值 语句查询 的值, 如果RI=1则结束查询,可以接收下一组数据; 则结束查询, 如果 则结束查询 可以接收下一组数据; 如果RI-0,则继续查询。 如果 ,则继续查询。 • 在中断方式中,在RI置位后产生中断申请, 在中断方式中, 置位后产生中断申请, 置位后产生中断申请 在中断服务程序中接收下一组数据。此时, 在中断服务程序中接收下一组数据。此时, 需要开启相应的中断请求。 需要开启相应的中断请求。
第5章 单片机串行口的 章 单片机串行口的C51编程 编程
5.1 串行口基础知识 5.1.1 串行口的结构 5.1.2 有关的寄存器 5.1.3 串行口的工作方式 5. 2 不同工作方式下的 不同工作方式下的C51编程 编程 5.2.1 工作方式 的C51程序设计 工作方式0的 程序设计 5.2.2 工作方式 的C51程序设计 工作方式1的 程序设计 5.2.3 工作方式 的C51程序设计 工作方式2的 程序设计 5.2.4 工作方式 的C51程序设计 工作方式3的 程序设计 5.3 串行口的 串行口的C51编程应用示例 编程应用示例
数据发送的C51程序 【例5-1】方式 数据发送的 】方式0数据发送的 程序 设计示例
(1)采用查询方式的 采用查询方式的
• • • • • • • • • • #include<reg51.h> void main( ) { unsigned char i=0x55; SCON=0x00; //初始化串口方式 初始化串口方式0 初始化串口方式 SBUF=i; //输出数据到 输出数据到SBUF,启动串行输出 输出数据到 , while(TI) //等待 等待TI=1 等待 { TI=0; } while(1); }