第二章:单片机的核心

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Timer寄存器里保存的是计数值,当Timer启动后每过一个机器周期(定时模式) 或输入一个外部事件脉冲(计数模式),计数值会自动增加1。通过计数值我 们可知道Timer启动之后流逝了多少时间(定时模式)或收到多少个外部事件 脉冲。
AT89S51单片机有两个Timer,它们有各自的Timer寄存器,且每个Timer寄存 器由高位字节寄存器THx和低位字节寄存器TLx组成。即Timer 0寄存器由TH0 和TL0组成,Timer 1寄存器由TH1和TL1组成。这4个寄存器位于特殊功能寄 存器的8AH~8DH上。
1.6计数器的设置
在Timer模式控制寄存器TMOD的C/Tx#位 用于设置Timer用作定时器或计数器,当 C/Tx#=1时,对应的Timer用作计数器。 Timer 0和Timer 1可以被配置成两个独立的计 数器,分别对输入单片机T0端(14管脚)和 T1端(15管脚)的脉冲进行计数。Timer作 计数器使用时,Timer寄存器THx和TLx的计 数值记录的是输入单片机的脉冲的个数。
②-如果EA=1时,相应的中断由IE中相应的位来 控制。控制位置1使能中断;清0则屏蔽中断
2.4 外部中断信号输入端/INT0和 /INT1
❖ 外部中断0和外部中断1的中断服务子程序入 口地址,即中断向量分别为0003H和0013H。 这两个外部中断分别由中断使能寄存器IE中 的EX0和EX1位来使能或屏蔽。外部的脉冲 信号或按钮开关都可以作为中断信号输入到 /INTx端使单片机产生中断。
❖ 使单片机产生外部中断的信号有两种方式,一是低 电平触发,二是下降沿触发。
❖ 当单片机上电复位后,使能外部中断时就默认以低 电平方式触发。
❖ 在低电平触发模式下,外部中断信号输入端/INT0和 /INT1出现低电平就会触发外部中断0或外部中断1。 外部中断产生时,单片机会立即停止正在执行的指 令,并根据中断向量表中的中断向量转入相应的地 址执行外部中断服务子程序。在单片机进入中断服 务子程序执行并在中断结束指令“RETI”之前,这 个低电平必须撤走,否则将会使单片机执行完指令 “RETI”后因 /INT0或/INT1仍为低电平而再次进入 中断服务子程序。
1.2. Timer模式控制寄存器TMOD
TMOD是“timer mode”的缩写,用于设 置Timer的工作模式。TMOD在特殊功能寄存 器的地址89H上,如下图所示。
❖ AT89S51单片机有两个Timer——Timer 0和 Timer 1,它们的工作模式由TMOD中的对应 位来分别设置。TMOD的长度为1个字节(8 位),高4位和低4位分别控制Timer 1和 Timer 0。其中由M11、M01控制Timer 1的工 作模式,M10、M00控制Timer 0的工作模式。 举个例子,我们想令Timer 0工作在定时器的 模式0下(软件启动),而Timer 1工作在计 数器的模式1下(软件启动),则设置Timer 的指令为“MOV TMOD, #01010000B”。
1.3 Timer控制寄存器TCON
TCON是“timer control”的缩写,用于控制Timer的启动或 停止,并指示Timer是否溢出。TCON在特殊功能寄存器的 地址88H上。TCON的高4位的名称及功能描述:
TCON寄存器中,TFx是溢出标志位,当 Timer寄存器计数达最大值之后再增加1时产 生溢出,TFx位被硬件置1。于是可通过指令 “JBC TFx, rel”或“JB TFx, rel”来判断 TFx位是否为1,从而判断定时/计数是否完成。 另外,TCON寄存器的TRx位控制Timer启动 或关闭。
Timer作计数器时,实际上是在计算计数脉冲下 降沿的个数,或者说在计数脉冲的电平由高 跳低时Timer寄存器中的计数值增加1,假如 原来TL0=33,计数脉冲来到后每次下降沿使 TL0增加1。
单片机检测下降沿需要一定的时间。所以外部 事件发生的最高频率fe应小于晶振频率/24。 假设晶振频率=12MHz,则输入T0或T1口的 计数脉冲的最高频率fe应小于500kHz。另外,
在计时完成后产生溢出。当作为计数器时,Timer将 计算输入T0或T1管脚的脉冲个数,当计数达到预设 的值时Timer同样可以产生溢出。
1.5 定时器的使用步骤
❖ ①-设置Timer的工作模式。 ❖ ②-往Timer寄存器(TL0和TH0)载入计数
初始值。 ❖ ③-启动Timer。 ❖ ④-检测Timer溢出标志(TF0)。 ❖ ⑤-关闭Timer。 ❖ ⑥-清0溢出标志(TF0)。 ❖ ⑦-重新装载计数初始值。
第二章:单片机的核心
——时间、中断、逻辑
一、单片机核心之Timer
❖ 1.1 单片机的Timer
图一
AT89S51单片机有两个Timer——Timer 0 和Timer 1。当Timer工作于定时功能下时, 模拟开关打到T位置上,Timer计数电路计 算的是单位时间脉冲。单位时间脉冲的周
期与单片机的机器周期相等,如果晶振的
TFx, $”对标志位TFx进行判断了,而是让Timer到一边
自己计数,当计数完成通过中断来告诉程序计数结束。这样
一来,在Timer计数过程中,单片机就可以腾出空执行其他
指令,等Timer中断产生时再服务即可。
2.6 串行通信中断
❖ 单片机串行通信:当设置好串行口控制寄存器SCON的 相关位和利用Timer 1产生一定的波特率后,单片机即可通 过串行口接收或发送数据。发送使用指令“MOV SBUF, A” 将累加器A的数据装入缓冲区SBUF后自动发送,我们通过 检测SCON中的TI位来判断数据是否发送完成。接收则使用 指令“MOV A, SBUF”将接收缓冲区中的数据载入累加器 A中,并通过检测SCON中的RI位判断接收的完成情况。单 片机串行口发送和接收过程存在一个与Timer应用中相似的 问题,就是单片机在判断SCON的TI位或RI位时只能“一心 一意”地进行而无法再进行其他操作。而串行通信中断的出 现较好地解决了系统中既需要单片机响应串行通信的操作, 也同时兼顾其他操作。
2.1 中断服务的指挥——中断向量表
❖ AT89S51单片机有5个中断源:外部中断0 (/INT0 )、外部中断1( /INT1)、Timer 0 中断(TF0)、Timer 1中断(TF1)、串行 通信中断(RI/TI)。当中断使能后,任何一 个中断发生时单片机都会到下表所示的对应 地址上去执行中断服务子程序。
单片机的机器周期相等,如果晶振的频率是 12MHz,则1个机器周期=1µs,于是单位时 间脉冲的周期为1µs。也就是说,晶振频率 =12MHz,Timer计数电路每过1µs计数值增 加1。所以,在定时结束时Timer计数电路的 计数值乘以1µs就能知道流逝了多少时间,从 而起到定时的功能。
如果图中模拟开关打到C位置上,进入 Timer计数电路的则是外部事件脉冲。这样 Timer计数电路的计数值就是外部事件脉冲的 个数,这也就是单片机Timer的计数功能。
1.4 Timer用作定时/计数器小结
❖ AT89S51单片机中提供了2个通用的16位 Timer, 分别为Timer 0和Timer 1,它们可以被独立配置成 定时或计数器并工作于不同模式下。
❖ 注意:AT89S52还提供一个Timer2。 ❖ 当作为定时器时,Timer将在设定好的时间下工作并
除了低电平触发外,边沿触发也是一种
常用的触发外部中断的模式。在该模式下, /INT0端或/INT1端出现下降沿即可使单片机 产生中断。与低电平触发不同,下降沿触发 方式不是单片机默认的中断触发方式,所以 需要指令来设置单片机工作在该模式下。方 法是通过Timer控制寄存器TCON中的IT0位 和IT1位来分别控制/INT0和/INT1触发方式。 见下图:
2.5Timer 0中断和Timer 1中断
Timer是单片机中一个很有用的功能结构,Timer可设置
作为定时器或计数器。在使用Timer时,先向Timer寄存器中
装载一个计数初始值,通过指令“SETB TRx”来启动
Timer,并用类似“JNB TFx, $”的指令来不断检测Timer
溢出标志位TFx来判断计数是否完成。在Timer计数期间,
❖ ④-执行完中断服务子程序后,从堆栈中弹出在中断产生时 保存的将要执行的下一条指令的地址到程序计数器PC中, 单片机开始从PC指示的地址继续执行程序。
一个潜在的问题:每一个中断服务子程
序的存放空间都非常有限,例如,外部中断0 的中断向量为0003H,而Timer 0中断向量地 址为000BH,可见外部中断0的中断服务子程 序只有000BH-0003H=8个字节的空间来存放, 这8个字节的空间实在也放不了几条指令。解 决这个问题:可以把指令“ORG”与跳转指 令“JMP”结合来实现中断服务子程序的跳 转,从而在另一个更为广阔的的空间中来放 置中断服务子程序。 。
❖ 关于串行中断我们会在后面的章节中做具体的练习。
2.7 中断优先级
例如,Timer 0中断和外部中 断1如果同时产生,单片机会先 去响应Timer 0中断并处理它的中 断服务子程序。完成之后再响应 外部中断1,进入相应的中断服 务子程序。
如果有两个或两个
以上的中断同时产生, 单片机该先服务方便呢? AT89S51单片机有一个 默认的中断优先级,外 部中断0的中断优先级 最高,串行通信中断优 先级最低,其他中断的 优先级依次按表中排列 依次降低。
频率是12MHz,则1个机器周期=1µs,于 是单位时间脉冲的周期为1µs。也就是说 ,晶振频率=12MHz,Timer计数电路每过 1µs计数值增加1。所以,在定时结束时 Timer计数电路的计数值乘以1µs就能知道 流逝了多少时间,从而起到定时的功能。
AT89S51单片机有两个Timer——Timer 0 和Timer 1。当Timer工作于定时功能下时, 模拟开关打到T位置上,Timer计数电路计算 的是单位时间脉冲。单位时间脉冲的周期与
单片机除了循环执行指令“JNB
TFx, $”对标志位
TFx进行判断之外一般不做其他操作。如果在Timer计数的
同时我们还需要单片机执行其他操作该怎么办呢?使用
Timer中断就可以解决这个实际问题。Timer中断作为
AT89S51单片机的中断源之一,会在Timer计数结束时向
CPU产生中断,这样就不需要程序中使用循环指令“JNB
确保脉冲在跳变之前至少被采样一次,则该
电平至少要保持一个机器周期,假设使用 12MHz的晶振,计数脉冲的电平信号在跳变 之前至少应保持1µs。
二、单片机核心之中断
中断的比喻: 任何一件事情的发生都会中断小林看电
视的进程而去响应和处理事件。例如,邮递 员上门送信,小林必须去开门签收信件,当 事件处理完后,小林回去接着看电视。这里, 小林比喻的就是单片机,而5个可能发生的事 件为单片机的5个中断源——外部中断0、外 部中断1、Timer 0中断、Timer 1中断、串行 通信中断。
2.3 中断使能寄存器IE
单片机上电复位之后,默认所有中断都被屏蔽
(关闭),这意味着即使任何一种中断产生,单片
机也不会去响应。为了使单片机能对中断进行响应, 或者说使能中断,需要对中断使能寄存器IE进行操 作。中断使能寄存器IE是一个特殊功能寄存器,位 于特殊功能寄存器区的地址A8H上。 中断使能寄存器IE的操作: ①-IE的位7是EA,是所有中断的“总开关”。只 有EA=1时,中断才会开放,这时IE中的其他位将 使能或屏蔽某一个中断。如果EA=0,所有中断都 不会被响应(全被屏蔽)。
2.2 中断的响应及处理
❖ AT89S51单片机的中断源有5种,也就是说有5种方式使单片 机产生中断。当一个中断产生时,单片机会按以下的步骤进 行响应与处理。
❖ ①-立即暂停当前正在执行的任何指令,并把下一条将要执 行的指令地址压入堆栈中。
❖ ②-根据中断的类型在Baidu Nhomakorabea断向量表中找到对应的地址。
❖ ③-到该地址上开始执行中断服务子程序,直到遇到指令 “RETI”,中断服务子程序结束。
相关文档
最新文档