Download presentation
Presentation is loading. Please wait.
1
6.1 中断系统和外中断 6.2 定时器/计数器 6.3 串行通信 本章小结
2
为了进一步突出单片机的控制特性,许多半导体公司在单片机内部又集成了许多功能单元,如中断、定时器/计数器、串行通信、模拟/数字转换(ADC)、脉冲宽度调制(PWM)等单元。我们把这些单片机内部的功能单元统称为单片机内部资源。
3
标准的80C51单片机的内部资源有中断系统、定时器/计数器和串行口。80C51单片机片内RAM 的80H~FFH空间有21个特殊功能寄存器SFR,通过这些特殊功能寄存器可实现对全部内部资源的运行操作。
4
6.1 中断系统和外中断 中断是一项重要的计算机技术,采用中断技术可以使多个任务共享一个资源,所以中断技术实质上就是一种资源共享技术。
6.1 中断系统和外中断 中断是一项重要的计算机技术,采用中断技术可以使多个任务共享一个资源,所以中断技术实质上就是一种资源共享技术。 80C51是一个多中断源的单片机,有3类共5个中断源,分别是外部中断2个,定时中断2个和串行中断1个。
5
外部中断是由外部原因引起的,共有2个中断源,即外部中断0和外部中断1。它们的中断请求信号分别由80C51外部引脚 (P3. 2)和 (P3
定时中断是为满足定时或计数的需要而设置的。 串行中断是为串行数据传送的需要而设置的。
6
中断技术概述 当中央处理器CPU正在执行某程序时,由于某种原因,外界向CPU发出了暂停目前工作去处理更重要事件的请求,程序被打断,CPU响应该请求并转入相应的处理程序,处理程序完成以后,再返回到原来程序被打断的位置,继续原来的工作,这一过程称为中断。实现中断功能的部件称为中断系统。
7
在以上过程中,原来运行的、被中断的程序被称为主程序;从主程序中转入的相应事件处理程序被称为中断服务程序;主程序被打断的位置被称为断点;向CPU发出中断的请求信号被称为中断源。
中断技术主要用于分时操作、实时处理、故障及时处理等。
8
中断系统一般要完成以下功能。 1)现场保护和现场恢复 为了CPU完成中断服务后,能够返回到原主程序的位置,就要保护断点处的现场状态,即将断点处的PC值、相关寄存器的内容、标志位等状态压入堆栈保存,该操作被称为保护断点和现场。 中断服务结束后,在返回主程序前,要将被保护的断点和现场恢复,即弹出堆栈中被保存的内容至各相关寄存器,该操作被称为现场恢复。
9
2)中断优先权排队 不同的中断源享有不同的优先响应权利,称为中断优先权 ,CPU对多个中断源响应的优先权由高到低的排队,称为优先权排队。
10
3)中断嵌套 CPU将暂停当前的优先级别低的中断服务,转而去处理优先级更高的中断申请,处理完后,再回到原低级中断处理程序,这一过程称为中断嵌套,该中断系统称为多级中断系统。没有中断嵌套功能的中断系统称为单级中断系统。
11
C51单片机中断系统 80C51中断系统结构图,它由中断源、中断标志、中断允许控制、中断优先级控制、中断查询硬件以及相应的特殊功能寄存器组成,相应的特殊功能寄存器TCON和SCON用来存储来自中断源的中断请求标志,IE为中断允许控制寄存器,IP为中断优先级控制寄存器。
13
1. 中断源 80C5l共有3类5个中断源,分别是2个外部中断源、2个定时中断源、1个串行口接收/发送中断源。 外部中断是由外部请求信号或掉电等异常事故引起的,共有2个中断源:外部中断0和1,分别由引脚(P3.2)和(P3.3)引入。
14
80C5l单片机内有两个定时器/计数器T0、T1,通过一种计数结构,实现定时/计数功能,当计数值发生溢出时,表明已经达到预期定时时间或计数值,定时器/计数器的中断请求标志位TF0或TF1被置1,也就向CPU发出了中断请求的申请。 当串行口接收或发送完一组数据时,便产生一个中断请求,特殊功能寄存器SCON中的RI或TI被置1
15
2. 中断请求标志 要实现中断,首先中断源要提出中断请求,单片机内中断请求的过程是特殊功能寄存器TCON和SCON相关状态位——中断请求标志位置1的过程,当CPU响应中断时,中断请求标志位才由硬件或软件清0。
16
这个寄存器既有定时器/计数器的控制功能又有中断控制功能,其中与中断有关的控制位共6位:IE0和IE1、IT0和IT1以及TF0和TF1。
1)TCON中的中断标志位 位 地 址 8F 8E 8D 8C 8B 8A 89 88 位 符 号 TF1 TR1 TF0 TR0 IE1 IT1 IE0 IT0 这个寄存器既有定时器/计数器的控制功能又有中断控制功能,其中与中断有关的控制位共6位:IE0和IE1、IT0和IT1以及TF0和TF1。
17
定时控制寄存器TCON各位的功能 位 地 址 位 符 号 功 能 8FH TF1 定时器/计数器T1溢出标志位 8EH TR1
位 地 址 位 符 号 功 能 8FH TF1 定时器/计数器T1溢出标志位 8EH TR1 定时器/计数器T1运行控制位 8DH TF0 定时器/计数器T0溢出标志位 8CH TR0 定时器/计数器T0运行控制位 8BH IE1 外部中断1请求标志位 8AH IT1 外部中断1触发类型选择位 89H IE0 外部中断0请求标志位 88H IT0 外部中断0触发类型选择位
18
SCON寄存器地址98H,位地址9FH~98H,其中的低2位RI和TI锁存串行口的接收中断和发送中断的申请标志位,如表6.3所示。
9EH 9DH 9CH 9BH 9AH 99H 98H 位符号 TI RI
19
TI:串行口发送中断请求标志位。串行口每发送完一帧串行数据后,由内部硬件置1,表示串行口发送器向CPU申请中断。值得注意的是,CPU响应该中断,转入串行口中断入口时,对TI位不清0,TI必须由用户在程序中清0。 RI:串行口接收中断请求标志位。串行口每接收完一帧串行数据后,RI由硬件置1。同样,CPU响应该中断时, 对RI位不清0,必须由用户在程序中进行清0。 80C51单片机复位后,TCON和SCON各位均被清0。
20
中断控制主要通过中断允许寄存器IE和中断优先级寄存器IP实现。
3. 中断控制 中断控制主要通过中断允许寄存器IE和中断优先级寄存器IP实现。 中断允许控制寄存器 位地址 AFH AEH ADH ACH ABH AAH A9H A8H 位符号 EA - ES ET1 EX1 ET0 EX0
21
EA:CPU中断允许总控制位。EA = l,CPU开放中断,此时,每个中断源的中断允许或禁止,取决于各自的中断允许控制位。EA = 0,CPU屏蔽所有中断,即中断总禁止。
EX0、EX1:外部中断允许控制位。EX0(EX1) = l,允许外部中断;EX0(EX1) = 0,禁止外部中断。 ET0、ET1:定时器/计数器溢出中断允许控制位。ET0(ET1) = 1,允许中断;ET0(ET1) = 0,禁止定时器/计数器中断。 ES:串行口中断允许控制位。ES = 1,允许串行口中断;ES = 0,禁止串行口中断。
22
80C51有两个中断优先级,每个中断源均可通过软件设置为高优先级或低优先级中断,实现2级中断嵌套。
2)中断优先级控制 80C51有两个中断优先级,每个中断源均可通过软件设置为高优先级或低优先级中断,实现2级中断嵌套。 中断优先级控制寄存器 位地址 BFH BEH BDH BCH BBH BAH B9H B8H 位符号 - PS PT1 PX1 PT0 PX0
23
高优先级中断请求可以中断一个正在执行的低优先级中断服务,除非正在执行的低优先级中断服务程序设置了禁止某些高优先级的中断。正在执行的中断服务程序不能被另一个同级或低优先级的中断所中断。
24
4. 中断处理过程 一个完整的中断处理过程包括中断请求、中断响应、中断服务、中断返回几个部分,前面主要介绍了中断请求与控制,下面将介绍其他相关内容。 1)中断响应 中断响应指系统满足中断条件,CPU对中断请求做出反应,程序执行转向中断服务程序入口地址的过程。 2)中断响应时间
25
3)中断服务流程
26
5. 中断请求的撤除 中断响应后,TCON和SCON中的中断请求标志应及时清除。否则中断请求将仍然存在,并引起错误的中断响应。不同的中断请求,其撤除方法也不一样。 定时中断,中断响应后,由硬件自动对中断标志位清0; 脉冲触发的外部中断请求,在中断响应后,由硬件自动对中断标志位清0 电平触发的外部中断请求 ,撤除外引脚上的低电平; 串行中断,其中断标志位由软件清0 。
27
C51中断服务函数 中断系统十分重要,C51编译器允许在C语言源程序中声明中断和编写中断服务程序,从而减轻了采用汇编程序编写中断服务程序的繁琐程度。通过使用interrupt关键字实现。定义中断服务程序的一般格式如下: void 函数名( ) interrupt n [using m]
28
80C51中断号、中断源和中断向量关系如表所示。
中断号n 中 断 源 中 断 向 量 外部中断0 0003H 1 定时器0 000BH 2 外部中断1 0013H 3 定时器1 001BH 4 串行口 0023H
29
【例6.1】典型的C51中断服务函数的示例。 使用C51编写中断服务程序,程序员无需关心ACC、B、DPH、DPL、PSW等寄存器的保护,C51编译器会根据上述寄存器的使用情况在目标代码中自动增加压栈和出栈。
30
外部中断的应用实例 当外部中断源较多时,可采用优先编码器扩展外部中断输入。图中使用三态8-3优先编码器74LS348扩展外部中断输入电路。 74LS348为三态输出,可直接接到数据总线上。图中74LS348的外部RAM访问地址为0x0000,但只有低3位有意义。
31
【例6.2】如图中8路外部中断输入全部为低有效,编写扩展8路外部中断的C51源程序。
32
6.2 定时器/计数器 定时器/计数器0、1的结构及工作原理 1. 定时器/计数器0、1的结构
33
定时器/计数器内部结构逻辑图
34
2. 加1计数器 定时器/计数器T0、T1都有一个16位的加1计数器,它们分别由8位特殊功能寄存器TH0、TL0和TH1、TL1组成。TH0、TL0构成定时器/计数器T0加1计数器的高8位和低8位,TH1、TL1构成定时器/计数器T1加1计数器的高8位和低8位。加1计数器的初值可以通过程序进行设定,设定不同的初值,就可以获得不同的计数值或定时时间。
35
3. 定时控制寄存器(TCON) 定时控制寄存器TCON是个8位寄存器,它不仅参与定时控制,还参与中断请求控制。既可以对其整个字节寻址,又可以对其位寻址,字节地址88H,位地址8FH~88H。各位的地址及其对应的功能如主教材192页表6.8所示。
36
TF0、TF1:计数器溢出标志位。定时器/计数器T0、T1溢出(计满)时,该位由内部硬件自动置位。
TR0、TR1:定时器/计数器T0、T1的运行控制位。通过软件设置该位清0或置1,实现定时/计数的启停控制。 TR0(TR1)= 1, 启动T0(T1)的定时/计数工作。 TR0(TR1)= 0, 停止T0(T1)的定时/计数工作。 TCON的其他4位IE0、IT0、IE1、IT1是和外部中断0、1有关的控制位,其中IE0、IE1控制外部中断请求,IT0、IT1控制外部中断触发类型。
37
4. 工作方式控制寄存器(TMOD 89H ) 工作方式控制寄存器TMOD,用来设定定时器/计数器T0、T1的工作方式。TMOD寄存器只能进行字节寻址,地址为89H,不能进行位寻址,即TMOD的内容,只能通过字节传送指令进行赋值。 TMOD各位的含义如主教材193页表6.9所示,其中低半个字节定义定时器/计数器T0,高半个字节定义定时器/计数器T1。
38
5.T0、T1定时功能或计数功能的选择
39
定时器/计数器0、1的四种工作方式 工作方式由控制寄存器TMOD中M1、M0的设定,定时器/计数器T0、T1可以有四种不同的工作方式:方式0、方式1、方式2、方式3。
40
1. 方式0 当TMOD中M1M0 = 00时, TH0的全部8位和TL0的低5位构成13位的加1计数器 计数器的最大值为213 = 8192
41
【例6.3】 设单片机晶振频率为6MHz,使用定时器1以方式0产生周期为500 ms的等宽正方波连续脉冲,并由P1.2输出,以查询方式完成。
解: (1)计算TH1、TL1初值 (2)TMOD寄存器初始化 (3)由定时器控制寄存器TCON中的TR1位控制定时的启动和停止
42
2. 方式1 当TMOD中M1M0 = 01时,定时器/计数器选定方式1进行工作。图6.8是T0工作在方式1下的逻辑结构图(定时器/计数器1与其完全一致)。其逻辑结构与方式0不同的是两个8位寄存器TH0和TL0全部构成了一个16位的定时器/计数器,其他与工作方式0完全相同。
43
3. 方式2 以上工作方式0、方式1计数器具有共同的特点,即计数器发生溢出现象后,自动处于0状态,因此如果要实现循环计数或定时,就需要程序不断反复给计数器赋初值,这就影响了计数或定时精度,并给程序设计增添了麻烦。针对该问题,便设计了计数器具有初值自动重新加载功能的工作方式2,其逻辑结构如图所示。
44
3. 方式2(续) TH0的内容重新装入TL0后,其自身保持不变。这样计数器具有重复加载、循环工作的特点,可用于产生固定脉宽的脉冲信号,还可以用来作为串行口波特率发生器使用。
45
【例6. 5】 已知单片机晶振频率fosc = 6MHz。要求定时器0以工作方式2、查询方式产生100ms的定时,并在P1
【例6.5】 已知单片机晶振频率fosc = 6MHz。要求定时器0以工作方式2、查询方式产生100ms的定时,并在P1.0输出周期为200ms的连续方波。 (1)计算计数初值 (2)寄存器TMOD初始化 与方式0和方式1不同,方式2具有自动重装载功能,计数初值只需设置一次,以后不再需要软件重置。
46
4. 方式3 当TMOD中M1M0 = 11时,定时器/计数器处于定时工作方式3下工作。
47
图6.10 工作方式3下定时器/计数器T0被分成两个8位计数器的逻辑结构
48
图6.11 定时器/计数器方式3的T1结构
49
定时器/计数器对输入信号的要求 当80C5l内部的定时器/计数器被选定为定时器工作模式时,计数输入信号是内部时钟脉冲,每个机器周期产生一个脉冲位,计数器增l,因此定时器/计数器的输入脉冲的周期与机器周期一样,为时钟振荡频率的l/12。当采用12MHz频率的晶体时,计数速率为1MHz,输入脉冲的周期间隔为1ms。由于定时的精度决定于输入脉冲的周期,因此当需要高分辨率的定时时,应尽量选用频率较高的晶振(80C5l最高为40 MHz)。
50
当定时器/计数器用作计数器时,计数脉冲来自外部输入引脚T0或T1。当输入信号产生由1至0的跳变(即负跳变)时,计数器的值增1。每个机器周期的S5P2期间,对外部输入进行采样。
确认一次下跳变需要花2个机器周期,即24个振荡周期,因此外部输入的计数脉冲的最高频率为振荡器频率的1/24,
51
6.2.4 定时器/计数器0、1的编程和应用实例 1. 定时器/计数器的初始化编程 (1)设置工作方式,即设置TMOD中的各位
定时器/计数器0、1的编程和应用实例 1. 定时器/计数器的初始化编程 (1)设置工作方式,即设置TMOD中的各位 (2)计算加1计数器的计数初值Count,并将计数初值Count送入TH、TL中。 (3)启动计数器工作,即将TR置1。 (4)若采用中断方式则T0、T1及CPU开中断。
52
图6.13 定时器/计数器初始化流程图
53
2. 计算计数初值Count 1)计数方式 假设T0工作于计数方式1,计数值x = 1,是指每当T0引脚输入一个计数脉冲就使加1计数器产生溢出。 例如,为了使加1计数器每加一次1就溢出,加1计数器的初值Count = 0FFFFH = 216-1, 2)定时方式 所以定时时间Td = (2n-Count)×机器周期, 计数初值Count = 2n-Td/Tcy。
54
【例6.9】 设系统主频fosc = 6MHz,使用定时器T1以方式2产生周期为1ms的等宽正方波脉冲,并由P1.0输出,以查询方式完成。
55
3. 定时器/计数器中断的应用实例 【例6.10】 设单片机的fosc = 12 MHz,要求在P1.0脚上输出周期为2ms的方波。 解:周期为2ms的方波要求定时间隔1 ms,每次时间到P1.0取反。 12 MHz 晶振,Tcy = 1 µs 由于计数器向上计数,为得到1000个计数之后的定时器溢出,必须给定时器赋初值 ,C语言中相当于-1000。
56
1)用定时器1的方式1编程,采用查询方式 2)用定时器1的方式1编程,采用中断方式
57
4. 采用定时器/计数器扩展外部中断 尽管80C51为用户只提供了两个外部中断源,但用户可以根据实际需求,进行多于两个外部中断请求的扩展,其中有很多扩展方法,如主教材189页图6.5。 在此重点介绍利用定时器中断作为外部中断的扩展。
58
80C51有两个定时器/计数器T0、T1,若选择它们以计数器方式工作,当引脚T0或T1上发生负跳变时,T0或T1计数器则加1。利用这个特性,借用引脚T0或T1作为外部中断请求输入线,若设定计数初值为满量程,计数器加1,就会产生溢出中断请求,TF0或TF1变成了外部中断请求标志位,T0或T1的中断入口地址被扩展成了外部中断源的入口地址。
59
将定时器T0引脚作为外部中断源使用的具体做法为,设定相应定时器工作方式为方式2,计数器TH0、TL0初值为0FFH,允许计数器T0中断,则T0的初始始化程序如下:
MOV TMOD, #06H ;将计数器T0设定为方式2外部计数工作 MOV TL0, #0FFH ;设置计数器初值 MOV TH0, #0FFH ;设置重装计数器初值 SETB ET ;允许T0中断 SETB EA ;开中断 SETB TR ;启动T0
60
【例6.11】用定时器/计数器0和1实现外部中断。
61
定时器/计数器2 8032/8052增加了一个定时器/计数器2。定时器/计数器2可以设置为定时器,也可以设置为外部事件计数器,具有三种工作方式:16位自动重装载定时器/计数器方式、捕捉方式和串行口波特率发生器方式。输入引脚T2(P1.0)是外部计数脉冲输入端;输入引脚T2EX(P1.1)是外部控制信号输入端。
62
定时器/计数器2由特殊功能寄存器TH2、TL2、RCAP2H、RCAP2L等电路组成。其中TH2、TL2构成16位加法计数器。RCAP2H、RCAP2L构成16位寄存器。在自动重装载方式中,RCAP2H、RCAP2L作为16位初值寄存器,在捕捉方式中,当T2EX(P1.1)上出现负跳变时,把TH2、TL2的当前值捕捉到寄存器RCAP2H、RCAP2L中。
63
定时器/计数器2的工作由控制寄存器T2CON控制。T2CON的格式如表所示。各位功能描述见主教材206页。
64
定时器/计数器2的自动重装载工作方式
65
定时器/计数器2的捕捉工作方式
66
波特率发生器工作方式
67
溢出脉冲经16分频后作为串行口发送脉冲、接收脉冲。发送脉冲、接收脉冲的频率称为波特率。其计算公式如下
使用示例见本章【例6.15】。
68
6.3 串行通信 6.3.1 串行通信基础知识 1. 数据通信的传输方式 常用于数据通信的传输方式有单工、半双工、全双工方式。
6.3 串行通信 串行通信基础知识 1. 数据通信的传输方式 常用于数据通信的传输方式有单工、半双工、全双工方式。 2. 并行通信和串行通信方式
69
3. 异步串行通信和同步串行通信 异步串行通信(以下简称为异步通信)所传输的数据格式(也称为串行帧)由1个起始位、7个或8个数据位、1~2个停止位(含1.5个停止位)和1个校验位组成。起始位约定为0,空闲位约定为1。在异步通信方式中,接收器和发送器有各自的时钟,它们的工作是非同步的。
70
同步串行通信(以下简称为同步通信)中,发送器和接收器由同一个时钟源控制。
71
4. 波特率及时钟频率 波特率BR是单位时间传输的数据位数,即单位:bps(bit per second)1bps = 1bit/s。 采用异步串行,互相通信甲乙双方必须具有相同的波特率,否则无法成功地完成数据通信。发送和接收数据是由同步时钟触发发送器和接收器而实现的。 同步通信中数据传输的波特率即为同步时钟频率;而异步通信中,时钟频率可为波特率的整数倍。
72
5. 串行通信的校验 异步通信时可能会出现帧格式错、超时错等传输错误。在具有串行口的单片机的开发中,应考虑在通信过程中对数据差错进行校验,因为差错校验是保证准确无误通信的关键。 1)奇偶校验 2)和校验 3)循环冗余码校验
73
C51串行接口 对于单片机来说,为了进行串行数据通信,同样也需要有相应的串行接口电路。只不过这个接口电路不是单独的芯片,而是集成在单片机芯片的内部,成为单片机芯片的一个组成部分。 80C51单片机内部有一个全双工的串行通信口,即串行接收和发送缓冲器(SBUF),这两个在物理上独立的接收发送器,既可以接收数据,也可以发送数据。
74
1. 串行口结构与特殊功能寄存器 80C51单片机串行口是由发送缓冲寄存器SBUF、发送控制器、发送控制门、接收缓冲寄存器SBUF、接收控制寄存器、移位寄存器和中断等部分组成的,如图所示。
75
与串行通信有关的控制寄存器共有4个:SBUF、SCON、PCON和IE。
在逻辑上,SBUF只有一个,既表示发送寄存器,又表示接收寄存器。具有同一个单元地址99H。在物理上,SBUF有两个,一个是发送寄存器,另一个是接收寄存器。
76
SCON是80C51的一个可位寻址的专用寄存器,用于串行数据通信的控制。单元地址98H,位地址9FH~98H。寄存器和位地址表示如表所示。
2)控制寄存器 (1)串行控制寄存器SCON SCON是80C51的一个可位寻址的专用寄存器,用于串行数据通信的控制。单元地址98H,位地址9FH~98H。寄存器和位地址表示如表所示。 位地址 9FH 9EH 9DH 9CH 9BH 9AH 99H 98H 位符号 SM0 SM1 SM2 REN TB8 RB8 TI RI
77
① SM0 SM1——串行口工作方式选择位 ② SM2——多机通信控制位 ③ REN——允许接收位 ④ TB8——发送数据位8 ⑤ RB8——接收数据位8 ⑥ TI——发送中断标志 ⑦ RI——接收中断标志
78
PCON主要是为CHMOS型单片机的电源控制而设置的专用寄存器。单元地址为87H。其内容如表6.14所示。
位 序 D7 D6 D5 D4 D3 D2 D1 D0 位符号 SMOD — GF1 GF0 PD IDL 最高位(SMOD)是串行口波特率的倍增位,当SMOD = 1时串行口波特率加倍。系统复位时,SMOD = 0。
79
(3)中断允许控制寄存器IE 中断允许控制寄存器IE在前面的中断系统中已详细介绍过,IE的地址是A8H,其内容如表6.15所示。其中与串行口允许中断的控制位为ES,当ES = 1,允许串行口中断;当ES = 0,禁止串行中断。 位 地 址 AFH AEH ADH ACH ABH AAH A9H A8H 位符号 EA - ES ET1 EX1 ET0 EX0
80
2. 80C51串行通信工作方式 1)串行工作方式0 在方式0下,串行口作为同步移位寄存器使用。这时用RXD(P3.0)引脚作为数据移位的入口和出口,而由TXD(P3.1)引脚提供移位脉冲。移位数据的发送和接收以8位为一帧,不设起始位和停止位,低位在前高位在后,其帧格式如图所示。 … D0 D1 D2 D3 D4 D5 D6 D7
81
使用方式0实现数据的移位输入输出时,实际上是把串行口变成并行口使用。串行口作为并行输出口使用时,要有“串入并出”的移位寄存器配合(例如CD4049或74HC164),其电路连接如图6.21所示。
82
利用串行口与74HC164实现8位串入并行输出的连接如图所示,数据从串行口RXD端在移位时钟脉冲(TXD)的控制下逐位移入74HC164。当8位数据全部移出后,SCON寄存器的TI位被自动置1。其后74HC164的内容即可并行输出。用P1.0输出低电平可将74HC164输出清0。
83
如果把能实现并入串出功能的移位寄存器(例如CD4014或74HC165)与串行口配合使用,就可以把串行口变为并行输入口使用,如图所示。
84
方式0时,移位操作的波特率是固定的,为单片机晶振频率的1/12,即波特率为fosc/12。如晶振频率用f表示,波特率也就是一个机器周期进行一次移位,当f = 6 MHz时,波特率为500kbps,即2 ms移位一次。如f = 12MHz,则波特率为1Mbps,即1 ms移位一次。
85
【例6.12】 使用74HC164的并行输出引脚接8支发光二极管,利用它的串入并出功能,把发光二极管从左向右轮流点亮,并反复循环。
解:假定发光二极管为共阴极型,则电路连接如图所示。当串行口把8位状态码串行移位输出后,TI置1。如把TI作为状态查询标志,则使用查询方法完成。
86
方式1是10位为一帧的异步串行通信方式。共包括1个起始位,8个数据位和一个停止位。其帧格式如图所示。
2)串行工作方式1 方式1是10位为一帧的异步串行通信方式。共包括1个起始位,8个数据位和一个停止位。其帧格式如图所示。 起始 D0 D1 D2 D3 D4 D5 D6 D7 停止 (1)数据发送与接收 方式1的数据发送是由一条写发送寄存器(SBUF)指令开始的。一个字符帧发送完后,使TXD输出线维持在1(SPACE)状态下,并将SCON寄存器的TI置1,通知CPU可以发送下一个字符。
87
接收数据时,SCON的REN位应处于允许接收状态(REN = 1)。随后在移位脉冲的控制下,把接收到的数据位移入接收寄存器中。直到停止位到来之后把停止位送入RB8中,并置位中断标志位RI,通知CPU从SBUF取走接收到的一个字符。
88
(2)波特率设定 方式1的波特率是可变的,其波特率由定时器1的计数溢出率决定,公式为: BR = (2SMOD×Td) /32 式中,SMOD为PCON寄存器最高位的值,SMOD=1表示波特率加倍。 作为波特率发生器使用时,通常选用定时器1的工作方式2(注意,不要把定时器/计数器的工作方式与串行口的工作方式混淆!)。
89
【例6. 13】 单工形式的双机通信。假定A机和B机以方式1进行串行数据通信,其波特率为9600,A机的P1
【例6.13】 单工形式的双机通信。假定A机和B机以方式1进行串行数据通信,其波特率为9600,A机的P1.6口为发送控制按钮,当按钮按下时,A机发送0、1…、255,每次发送间隔0.5秒,并将发送字节送到本机P2口,通过P2口的总线驱动器74HC245接数码管显示发送数据。B机设置为串口中断接收A机发来的数据,接收到的数据去反后送到本机P2口,通过P2口的总线驱动器74HC245接数码管显示发送数据。
90
解:分析:设甲、B机的时钟频率均为11.0592MHz,从而机器周期为12/(11.0592×106 )ms。
SMOD = 0,波特率不倍增,从而PCON = 00H,至于SMOD什么时候为0,什么时候为1,可以根据需要决定。具体地说,波特率较大,则SMOD = 1,否则SMOD = 0。 由公式可知波特率为: BR = 20/ (32×(256-Count) ×12/( ×106 )) = 9600 Count = 253 = 0FDH
91
【例6. 14】假定有A、B两机,以方式1进行串行口通信,其中A机发送信息,B机接收信息,双方的晶振频率fosc = 11
【例6.14】假定有A、B两机,以方式1进行串行口通信,其中A机发送信息,B机接收信息,双方的晶振频率fosc = MHz,通信波特率为9600。 题目的其它具体内容见主教材220页。
92
编写A、B两机点对点的通信程序。该程序可以在双方机中运行,不同的是在程序运行之前,要判别P1. 0口的输入,若P1
编写A、B两机点对点的通信程序。该程序可以在双方机中运行,不同的是在程序运行之前,要判别P1.0口的输入,若P1.0 = 1,表示该机是发送方;若P1.0 = 0,表示该机是接收方。程序中包含主函数main(void),根据P1.0输入的设置,利用发送函数send(uchar idata *d)和接收函数receive(uchar idata *d)分别实现发送和接收功能。
93
2. 多机通信实例 【例6.15】 设一主机与多台从机进行通信,主机和从机之间能够相互发送和接收数据。假定从机地址号为1~5,通信各方的晶振频率为 MHz,主机循环选定地址号为1~5的从机进行通信,发送前,在P2口显示所呼叫的从机机号,主机发送的数据包格式为: 从机机号 命令字 数据长度 数据体 校验和
94
从机以中断方式接收主机发送的首字节,然后在中断服务程序里用查询方式接收数据包的后续字节。收到完整数据包后,判别(1)数据包里的从机机号是否等于本机机号;(2)校验和是否正确。如果(1)和(2)两者均成立,则发送应答信息0xa0+本机机号,同时将本机机号送到P2口显示,表示主机正在与本机通信。如果(1)和(2)两者不同时成立,则将0xff送到P2口显示,表示本机空闲。 主机收到应答后,在P2口显示应答信息。
95
本例题中波特率发生器采用定时器2实现。其计算公式为:
96
本章小结 1. 中断 由于中断源的请求,CPU暂停当前程序而执行中断处理程序,完毕后返回原程序继续执行的过程称为中断。中断过程分为中断请求、响应、处理、返回四个阶段。
97
当多个中断源同时发中断请求时,CPU先响应优先级最高的中断源,处理完毕后,再响应优先级次之的中断源,最后响应优先级最低的中断源,这就是中断判优的任务。80C51单片机有两个优先级:高优先级与低优先级,各中断源的优先级是通过优先级寄存器IP中相应位实现的,位取1设置高优先级,位取0设置低优先级。 C51中只要设置IE和IP,C51编译器会自动为中断的各个阶段产生最合适的代码。
98
2. 定时器/计数器 80C51单片机的定时器/计数器是能定时、计数,具有2~3个通道、4种工作方式可编程器件。 定时器/计数器3个通道分别为T0、T1与定时器/计数器2,其中定时器/计数器2仅52子系列单片机才有。
99
定时器/计数器内的核心器件是加1计数器,加1计数器由两个特殊功能寄存器TH与TL组成。当定时器/计数器工作于定时方式,加1脉冲由系统时钟fosc经12分频后产生。当定时器/计数器工作于计数方式,加1脉冲由T0或T1引脚直接提供。 在使用定时器/计数器前必须进行初始化,即设置其工作方式。
100
3. 串行通信 与80C51单片机串行通信有关的控制寄存器共有3个:SBUF、SCON和PCON。
101
80C51单片机的串行接口有四种通信方式。 方式0为同步通信方式,其波特率是固定的 方式2为异步通信方式,其波特率也是固定的 BR=2SMOD×fosc/64 方式1和方式3的波特率是可变的,其波特率由定时器1的计数溢出来决定,公式为: BR=(2SMOD×Td) /32
102
定时器2的溢出脉冲经16分频后作为串行口发送脉冲、接收脉冲。发送脉冲、接收脉冲的频率称为波特率。其计算公式如下
103
方式1是10位为一帧的异步串行通信方式。方式2和方式3是11位为一帧的异步串行通信方式,而第9数据D8位既可作为奇偶校验位使用,也可为控制位使用。在多机通信方式中经常把该位用作数据帧和地址帧的标志。SM2为多机通信控制位,当SM2 = 1时,80C51单片机只接收第9数据为1的地址帧,而对第9数据为0的数据帧自动丢弃;SM2 = 0时,地址帧和数据帧全部接收。利用此特性可实现多机通信。
Similar presentations