中断及定时计数器

合集下载

单片机实验-外部中断、计数器定时器

单片机实验-外部中断、计数器定时器

1)用单次脉冲申请中断INT0,在中断处理程序中对输出信号进行反转。

ORG 0000HLJMP STARTORG 0003HLJMP INT0START:CLR P1.0MOV TCON, #01HMOV IE, #81HLJMP $INT0:PUSH PSWCPL P1.0POP PSWRETIEND结果:按一下单脉冲小灯亮,再按一下,小灯灭接线:INT0接单脉冲P1.0接个小灯2)用单次脉冲申请中断INT1,在中断处理程序中实现8个小灯左移点亮1次。

ORG 0000HLJMP STARTORG 0013HLJMP INT1START:MOV TCON,#04HMOV IE,#84HCLR PX1MOV A,#01HSJMP $INT1:MOV R1,#8LOOP:MOV P1,ALCALL DELAYRL ADJNZ R1,LOOPRETIDELAY:MOV R6,#200DELAY1:MOV R7,#125DELAY2:DJNZ R7,DELAY2DJNZ R6,DELAY1RETEND结果:按一下单脉冲,8个小灯左移点亮一次接线:INT1接单脉冲P1口接8个小灯3)将8051计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行单脉冲计数,并将其数值按二进制在P1口驱动LED灯上显示出来。

ORG 0000HSTART:MOV TMOD,#05HMOV TH0,#0MOV TL0,#0SETB TR0LOOP:MOV P1,TL0LJMP LOOPEND结果:P1口与四个小灯相连,按单脉冲的次数在四个小灯上显示接线:(P3.4)T0接单脉冲P1.0到P1.4接4个小灯4)用CPU内部定时器T0中断方式计时,实现每1秒钟输出状态发生一次反转。

ORG 0000HLJMP STARTORG 000BHLJMP INTSTART: MOV TMOD,#01HMOV B,#0AH;即10,设循环次数10次。

第05章 MCS-51单片机的中断与定时(1-4)

第05章 MCS-51单片机的中断与定时(1-4)

2
1
TH0
;P1.0输出“0” ;P1.0输出“1”
5.2 MCS-51单片机的中断系统
五、外中断应用举例
1. 中断初始化程序
设置外中断源的触发方式 设置中断允许寄存器IE 设置中断优先级寄存器IP
2. 中断服务程序
保护现场 中断处理 恢复现场
23/65
5.2 MCS-51单片机的中断系统
【例5-3】 设外部中断0为下降沿触发方 式,高优先级,试编写中断初始化程序
5.2 MCS-51单片机的中断系统
【例5-4】 将单脉冲接到外中断0(INT0)引脚,利 用P1.0作为输出,经反相器接发光二极管。编写程 序,每按动一次按钮,产生一个外中断信号,使发 光二极管的状态发生变化,由亮变暗,或反之
P1.0 单脉冲 发生器 INT0
1
+5V
8031
26/65
5.2 MCS-51单片机的中断系统
串口:0023H
20/65
5.2 MCS-51单片机的中断系统
四、中断请求的撤除
1.定时/计数器中断请求标志TF0/TF1会自动撤除 2.串行口中断请求标志TI/RI要用指令撤除
CLR TI ;清TI标志位 CLR RI ;清RI标志位
3.负脉冲触发的外中断请求标志IE0/IE1会自动撤除 4.低电平触发的外中断请求信号需要外加电路撤除
下次课前请预习5.3节
30/65
5.3 51单片机的定时器/计数器
MCS-51单片机内部有两个16位定时/计数器 T0和T1,简称定时器0和定时器1
在特殊功能寄存器TMOD和TCON的控制下, 它们既可以设定成定时器使用,也可以设定 成计数器使用
定时/计数器有4种工作方式,具有中断功能, 可以完成定时、计数、脉冲输出等任务

中断与定时器和计数器实验

中断与定时器和计数器实验

中断与定时器和计数器实验一、实验目的:1.掌握单片机的中断的原理、中断的设置,掌握中断的处理及应用2.掌握单片机的定时器/计数器的工作原理和工作方式,学会使用定时器/计数器二、实验内容:(一)、定时器/计数器应用程序设计实验1.计数功能:用定时器1方式2计数,每计数满100次,将P1.0取反。

(在仿真时,为方便观察现象,将TL1和TH1赋初值为0xfd,每按下按键一次计数器加1,这样3次就能看到仿真结果。

)分析:外部计数信号由T1(P3.5)引脚输入,每跳变一次计数器加1,由程序查询TF1。

方式2有自动重装初值的功能,初始化后不必再置初值。

将T1设为定时方式2,GATE=0,C/T=1,M1M0=10,T0不使用,可为任意方式,只要不使其进入方式3即可,一般取0。

TMOD=60H。

定时器初值为X=82-100=156=9CH,TH1=TL1=9CH。

(1)硬件设计硬件设计如图所示(2)C源程序#include "reg51.h" sbit P1_0=P1^0;void main(){TMOD=0x60;TH1=0xfd;TL1=0xfd;TR1=1;ET1=1;while(1){if(TF1==1){P1_0=~P1_0;TF1=0;}}}(3)proteus仿真通过Keil编译后,利用protues软件进行仿真。

在protues ISIS 编译环境中绘制仿真电路图,将编译好的“xxx.hex”文件加入AT89C51。

启动仿真,观察仿真结果。

(二)中断应用程序设计实验2.中断定时使用定时器定时,每隔10s使与P0、P1、P2和P3端口连接的发光二极管闪烁10次,设P0、P1、P2和P3端口低电平灯亮,反之灯灭。

分析:中断源T0入口地址000BH;当T0溢出时,TF0为1发出中断申请,条件满足CPU响应,进入中断处理程序。

主程序中要进行中断设置和定时器初始化,中断服务程序中安排灯闪烁;TL0的初值为0xB0,TH0的初值为0x3C,执行200次,则完成10s定时。

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用

单片机中的中断与定时器的原理与应用在单片机(Microcontroller)中,中断(Interrupt)和定时器(Timer)是重要的功能模块,广泛应用于各种嵌入式系统和电子设备中。

本文将介绍中断和定时器的基本原理,并探讨它们在单片机中的应用。

一、中断的原理与应用中断是指在程序执行过程中,当发生某个特定事件时,暂停当前任务的执行,转而执行与该事件相关的任务。

这样可以提高系统的响应能力和实时性。

单片机中的中断通常有外部中断和定时中断两种类型。

1. 外部中断外部中断是通过外部触发器(如按钮、传感器等)来触发的中断事件。

当外部触发器发生状态变化时,单片机会响应中断请求,并执行相应的中断服务程序。

外部中断通常用于处理实时性要求较高的事件,如按键检测、紧急报警等。

2. 定时中断定时中断是通过定时器来触发的中断事件。

定时器是一种特殊的计时设备,可以按照设定的时间周期产生中断信号。

当定时器倒计时完成时,单片机会响应中断请求,并执行相应的中断服务程序。

定时中断常用于处理需要精确计时和时序控制的任务,如脉冲计数、PWM波形生成等。

中断的应用具体取决于具体的工程需求,例如在电梯控制系统中,可以使用外部中断来响应紧急停车按钮;在家电控制系统中,可以利用定时中断来实现定时开关机功能。

二、定时器的原理与应用定时器是单片机中的一个重要模块,可以用于计时、延时、频率测量等多种应用。

下面将介绍定时器的工作原理和几种常见的应用场景。

1. 定时器的工作原理定时器是通过内部时钟源来进行计时的。

它通常由一个计数器和若干个控制寄存器组成。

计数器可以递增或递减,当计数值达到设定值时,会产生中断信号或触发其他相关操作。

2. 延时应用延时是定时器最常见的应用之一。

通过设定一个合适的计时器参数,实现程序的精确延时。

例如,在蜂鸣器控制中,可以使用定时器来生成特定频率和持续时间的方波信号,从而产生不同的声音效果。

3. 频率测量应用定时器还可以用于频率测量。

单片机中断系统和定时计数器

单片机中断系统和定时计数器

单片机中断系统和定时计数器在单片机的世界里,中断系统和定时计数器就像是两个得力的助手,为单片机的高效运行和精确控制发挥着至关重要的作用。

接下来,让我们一起深入了解一下这两个重要的概念。

首先,咱们来聊聊中断系统。

想象一下,单片机正在专心致志地执行着一个任务,突然有个紧急情况发生了,比如外部设备传来了一个重要的数据需要立即处理。

这时候,中断系统就像是一个“紧急警报器”,让单片机暂停当前的任务,迅速去处理这个紧急情况。

处理完之后,再回到原来被中断的地方继续执行之前的任务。

中断系统的好处那可太多了。

它大大提高了单片机的工作效率。

要是没有中断,单片机就得一直按照顺序依次执行任务,可能会错过一些关键的信息或者无法及时响应紧急事件。

有了中断,单片机就能在多个任务之间灵活切换,做到“分身有术”。

中断系统一般由中断源、中断允许控制、中断优先级控制和中断响应等部分组成。

中断源就是那些能引起中断的事件,比如外部中断、定时器中断、串口中断等等。

中断允许控制就像是一道“开关”,决定了是否允许某个中断源发出中断请求。

中断优先级控制则是用来确定当多个中断同时发生时,先处理哪个中断,后处理哪个中断。

再来说说定时计数器。

在很多实际应用中,我们经常需要对时间进行精确的测量和控制,这时候定时计数器就派上用场了。

比如说,我们要控制一个小灯每隔1 秒钟闪烁一次,或者要统计外部脉冲的个数,都可以用定时计数器来实现。

定时计数器的工作原理其实并不复杂。

它就像是一个不断计数的“小闹钟”。

可以设置为定时模式或者计数模式。

在定时模式下,它根据单片机内部的时钟信号进行计数,当计数值达到设定的值时,就会产生一个定时中断。

在计数模式下,它对外部输入的脉冲进行计数,当计数值达到设定值时,也会产生中断。

比如说,我们要实现一个 1 毫秒的定时,假设单片机的时钟频率是12MHz,那么一个机器周期就是 1 微秒。

如果我们要定时 1 毫秒,就需要设置定时计数器的初值,让它经过 1000 个机器周期后产生中断。

实验五 中断与定时(计数)器实验(Keil)

实验五  中断与定时(计数)器实验(Keil)

实验五中断与定时/计数器实验一、实验目的1.了解单片机中断与定时器工作原理,掌握中断与定时器程序结构;2.掌握在µVision环境中调试中断与定时器程序的方法。

二、实验仪器和设备Keil软件;THKSCM-2综合实验装置;三、实验原理及实验内容1.示例及相关设置(1)建立一个文件夹:lx51。

(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx51.asm文件名存盘到lx51文件夹中。

ORG 0000HLJMP MAINORG 0003HMOV P2,ARL ARETIORG 0040HMAIN:MOV SP,#5FHMOV A,#0FEHSETB EASETB EX0SETB IT0SJMP $END(3)在lx51文件夹下建立新工程,以文件名lx51存盘(工程的扩展名系统会自动添加)。

(4)在Project菜单的下拉选项中,单击Opt ions for Target ‘Target1’,在弹出的窗口中要完成一下设置:○1单片机芯片选择A T89C51选择完器件,按“确定”后会弹出一个提示信息框,提示“Copy Startup Code to Project Folder and Add File to Project?”,选择“是”。

○2晶振频率设为11.0592MHz。

○3Output标签下的Create HEX File前小框中要打钩。

○4在Debug标签选择Use Simulator(软件模拟)。

(5)在Project菜单的下拉选项中,单击build Target 选项完成汇编,生成目标文件(.HEX)。

按F5运行程序。

(6)在P3窗口的P3.2位单击鼠标(模拟INT0引脚信号),观察P2窗口变化。

(7)修改程序,使之适合字节数大于8的中断服务情况。

(8)利用单片机最小系统板演示该程序的运行情况。

2.示例及相关设置(1)建立一个文件夹:lx52。

(2)利用菜单File的New选项进入编辑界面,输入下面的源文件,以lx52.asm文件名存盘到lx52文件夹中。

项目三定时计数器和中断系统应用

项目三定时计数器和中断系统应用

(四)中断入口地址
表3-4 中断入口地址
地址
说明
0003H~000AH
外部中断0中断地址区
000BH~0012H
定时/计数0中断地址区
0013H~001AH
外部中断1中断地址区
001BH~0022H
定时/计数1中断地址区
0023H~002AH
串行中断地址区
定时器/计数器的设计步骤 初始化的内容如下: 设置TMOD寄存器参数 计算计数初值 计算出计数初始值并写入TH0、TL0、TH1、TL1中。 计数器的初始值和实际计数值并不相同,两者的换算关系如下:设实际计数值为C,计数最大值为M,计数初始值为X,则X=M-C。其中计数最大值在不同工作方式下的值不同,具体如下:
单击此处添加文本具体内容,简明扼要地阐述你的观点
202X
项目三、定时计数器和中断系统应用
项目三、定时/计数器和中断系统应用--- 任务1.秒脉冲发生器
能力目标 1.能正确运用定时/计数器产生秒信号 2.秒脉冲发生器程序的编写 3.学会中断控制系统的应用 4.秒脉冲发生器程序的仿真调试方法 学习内容 1.掌握定时/计数器的组成及功能 2.掌握单片机内部结构资源:TH0、TL0、TH1、TL1、TMOD、TCON 3.掌握中断控制系统的概念及定时功能 4.理解预置数的用法和溢出的概念
位控制转移指令 JBC bit,rel; 若(bit)=1时,则转移到标号对应的地址,并且同时bit←0。 例如:JBC TF0,NEXT; 若定时器0数据溢出时,即TF0=1时,则转移到标号NEXT对应的地址,并且同时清定时溢出标志TF0←0,这样下次就可以重新定时/计数。
比较转移指令 CJNE A,#data,rel; ≠data,PC+3+rel跳转到目标地址, =data,PC+3顺序向下执行。 CJNE A,direct,rel; CJNE Rn,#data,rel; CJNE @Ri,#data,rel;

中断及定时器实验报告

中断及定时器实验报告

一、实验目的1. 理解中断和定时器的基本概念及工作原理。

2. 掌握51单片机中断系统和定时器的配置方法。

3. 学会使用中断和定时器实现特定功能,如延时、计数等。

4. 培养动手实践能力和问题解决能力。

二、实验原理中断是计算机系统中的一种机制,允许CPU在执行程序过程中,暂停当前程序,转去执行另一个具有更高优先级的程序。

51单片机具有5个中断源,包括两个外部中断(INT0、INT1)、两个定时器中断(定时器0、定时器1)和一个串行口中断。

定时器是51单片机内部的一种计数器,可以用于产生定时中断或实现定时功能。

51单片机有两个定时器,即定时器0和定时器1。

定时器可以工作在模式0、模式1、模式2和模式3。

三、实验内容及步骤1. 实验内容一:外部中断实验(1)实验目的:掌握外部中断的使用方法,实现按键控制LED灯的亮灭。

(2)实验步骤:- 使用Keil for 8051编译器创建项目。

- 根据电路原理图连接电路。

- 编写程序,配置外部中断,实现按键控制LED灯的亮灭。

2. 实验内容二:定时器中断实验(1)实验目的:掌握定时器中断的使用方法,实现LED灯闪烁。

(2)实验步骤:- 使用Keil for 8051编译器创建项目。

- 根据电路原理图连接电路。

- 编写程序,配置定时器中断,实现LED灯闪烁。

3. 实验内容三:定时器与外部中断结合实验(1)实验目的:掌握定时器与外部中断结合使用的方法,实现按键控制LED灯闪烁频率。

(2)实验步骤:- 使用Keil for 8051编译器创建项目。

- 根据电路原理图连接电路。

- 编写程序,配置定时器中断和外部中断,实现按键控制LED灯闪烁频率。

四、实验结果与分析1. 外部中断实验:成功实现了按键控制LED灯的亮灭。

当按下按键时,LED灯亮;松开按键时,LED灯灭。

2. 定时器中断实验:成功实现了LED灯闪烁。

LED灯每隔一定时间闪烁一次,闪烁频率可调。

3. 定时器与外部中断结合实验:成功实现了按键控制LED灯闪烁频率。

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

单片机的中断与定时器/计数器中断就是停止当前的任务,去做另一个需要马上处理的任务,做完后再回去做原来的任务!P1.0P1.1P1.2P1.3P1.4P1.5P1.6P1.7RST/V PD P3.0/RXD P3.1/TXD P3.2/INT0P3.3/INT1P3.4/T0P3.5/T1P3.6/WR P3.7/RD XTAL2XTAL1V SSV CC P0.0P0.1P0.2P0.3P0.4P0.5P0.6P0.7EA/V PP PSEN P2.7P2.6P2.5P2.4P2.3P2.2P2.1P2.0RST P3.0/RXD P3.1/TXDXTAL2XTAL1P3.2/INT0P3.3/INT1P3.4/T0P3.5/T1GNDV CC P1.7P1.6P1.5P1.4P1.3P1.2P1.1/AIN1P1.0/AIN0P3.7注:类似的还有Philips公司的 87LPC64,20引脚8XC748/750/(751),24引脚 8X749(752),28引脚 8XC754,28引脚 等等如上图 8051中有5个中断:P3.2和P3.3为外部中断INT0和INT1端口,P3.4和P3.5为定时器/计数器中断T0和T1端口, 以及一个串行口中断,(此内容暂时不讲)8052中有6个中断,比8051多一个特殊的定时器/计数器中断。

(暂时不讲)外部中断: INT0和INT1外部中断通过其对应的引脚来接受外部中断请求,触发方式有两种: 1.低电平触发,即得到地电位就触发中断。

2.负边沿触发,即由高电平降至低电平的瞬间触发。

区别在于低电平触发属于静态触发,只要是低电平就一定触发;而负边沿触发为动态触发,必须由高电平变为低电平的时候才会触发。

控制触发方式的开关为:IT 。

IT0和IT1分别对应控制INT0和INT1的触发方式。

0为低电平触发,1为负边沿触发。

例:外部中断INT0开启低电平触发: IT0=0;定时器/计数器中断: T0和T1它有两种工作模式:定时器与计数器。

1. 定时器模式下,单片机对内部时钟脉冲进行计数。

不使用外部端口。

2. 计数器模式下,单片机对外部脉冲进行计数,使用外部端口,外部脉冲由外部对应端口进入。

即P3.4和P3.5至于定时器/计数器是如何触发中断的将在后半部分内容中详细说明。

中断的启用与控制:中断平时是关闭的,只有通过打开相应的开关才能使用,打开后还需进行相应的设置。

1、EA ---- 中断允许总控制器=0,中断总禁止,关闭所有中断。

=1,中断总允许,各中断的允许或禁止由各中断的控制位进行设置。

2、EX0 EX1 ---- 外部中断0(1)允许控制位。

=0,禁止外中断。

=1,允许外中断。

3、ET0 ET1 ---- 定时中断0(1)允许控制位。

=0,禁止定时中断。

=1,允许定时中断。

定时器产生中断(触发方式后面讲),响应中断服务程序。

4、ES ---- 串行中断允许控制位。

=0,禁止串行中断。

=1,允许串行中断。

1、IE0 IE1 ---- 外部中断请求标志位。

(硬件自动清零)cpu检测到中断端口出现有效中断请求时,此位被置1,再中断响应完成转向中断服务子程序时,再由硬件自动清为0。

2、IT0 IT1 ---- 外部中断触发方式控制位。

(软件置位、清零)=0,时电平触发方式,低电平有效。

=1,是脉冲触发方式,下降沿触发有效;3、TR0 TR1 ---- 定时器0(1)运行控制位。

=0,禁止定时器运行;=1,允许定时器运行。

4、TF0 TF1 ---- 内部定时/计数器0(1)溢出标志。

相应的定时器溢出时,被自动置为1。

当转向中断服务子程序时,再由硬件自动清0。

中断的优先级:多个中断同时触发时候将会按照优先级顺序来执行:默认的自然优先顺序为:外中断 0→定时器0→外中断1→定时器1→串口中断(8052中的定时器2与串口中断的自然优先级相同,都在最底。

)8051单片机可人工对其优先级进行调整,但只有2个级别。

高级优先于低级执行,在同等级内部优先顺序依旧按照自然优先顺序排列。

1、PX0 PX1 ---- 外中断0(1)优先级设定位。

2、PT0 PT1 ---- 定时中断0(1)优先级设定位。

3、PS ---- 串行中断优先级设定位。

=0,低优先级;=1,高优先级。

举例:假定开放外中断1,采用负边沿触发方式,高优先等级需要作如下设定:EA=1EX1=1IT1=1PX1=1中断的嵌套使用:假如现在程序已经进入一个中断子程序进行执行。

此时又一中断触发,若此中断等级高于正在执行的中断,则停止当前任务处理中断请求;若此中断等级低于或等于当前处理中断,则等当前正在处理的中断执行完后在给与处理。

中断的使用:中断号中断源中断向量0 外部中断0 0003H1 定时器0 000BH2 外部中断1 0013H3 定时器1 001BH4 串行口0023H5 定时器2 0X2BH (外加器件)语法如下:void X(void) interrupt 中断号函数X()与中断源的联系是通过使用Keil的关键字interrupt 建立起来的。

例:void x(void) interrupt 1{ ET0=0; //禁止定时中断P1=0x0f;delay(1000);P1=0xf0;delay(1000);EX0=1; //允许外中断}中断实例:电路图:程序:#include<reg51.h> //定义8051寄存器的头文件#define LED P2 //定义LED接至P2void delay(int); //声明延迟函数void left(int); //声明单灯左移函数main() //主程序开始{EA=1; EX0=1; //允许INT0中断IT0=1; //INT0设为负边沿触发LED=0x00; //初值=0000 0000,灯全亮While(1) //无穷循环,程序一直运行{Delay(250); //延迟250*1ms=0.25sLED=~LED; //LED反向} //while循环结束} //主程序结束void my_int0(void) interrupt 0 //INT0中断子程序开始{unsigned saveLED=LED; //储存中断前LED状态left(3); //单灯左移三圈LED=saveLED; //写回中断前LED状态}void delay(int x) //延迟函数开始{int i,j: //声明整数变量i,jfor(i=0;i<x;i++) //计数x次,延时x*1msfor(j=1;j<120;j++); //计数120次} //延迟函数结束void left(int x) //单灯左移函数开始{int i.j; //声明整数变量i,jfor(i=0;i<x;i++) //i循环,执行x圈{LED=0xfe; //初始状态1111 1110,最右灯亮for(j=0;j<7;j++) //j循环,左移7次{delay(250); //延迟250*1ms=0.25sLED=(LED<<1)|0x01; //左移一位后,LED设为1}delay(250); //延迟250*1ms=0.25s} //i循环结束} //单灯左移函数结束定时器/计数器:定时器和计数器是单片机内的一个系统,并且与中断有联系,定时器以内部晶振脉冲为计时周期,计数器以外部对应端口的输入脉冲为计时周期。

在他们工作时每接收到一个脉冲,则给内部计数寄存器内数字加1,当计数存储器达到最高时候再加一位就会溢出,所有位清零,而对应的溢出标志位变为1,此时若对应中断是打开的,则触发中断。

TR0 TR1 ---- 定时器0(1)运行控制位。

=0,禁止定时器运行;=1,允许定时器运行。

TF0 TF1 ---- 内部定时/计数器0(1)溢出标志。

相应的定时器溢出时,被自动置为1。

当转向中断服务子程序时,再由硬件自动清0。

他们有4种工作模式:工作方式0:是13位的计数器,最大值为8192工作方式1:是16位的计数器,最大值为65536工作方式2:带有数据自动重装的功能,因此,定时更精确。

经常用于波特率发生器。

最大值为256工作方式3:是将它当做两个8位的定时器来用。

主要与另一个定时器工作于方式2时配套使用。

最大值为256计数寄存器:8051内部的计数寄存器为THx和TLx两个8位寄存器。

对于12mhz,定时器计一个数是1us.如果使用16位计数。

那么最多计65.535ms。

如果需要一个小于65.535ms的数字时候,则对计数寄存器的THx和TLx赋值即可:提示:如果是一个空的盆要1 万滴水滴进去才会满,我们在开始滴水之前就预先放入一勺水,还需要1 万滴嘛?单片机计数也是如此,如果我要计5000 个脉冲,就先放进60535 个,再来5000 个,不就到了65535 了吗?定时器同样如此,每个脉冲是1 微秒,则计满65536 个脉冲需时65.536 毫秒,但现在我只要10 毫秒就可以了,怎么办?10 个毫秒为10000 微秒,所以,只要在计数器里预先放进55536就可以了,这种计数方法我们把它称之为预置数计数法。

我们使用其中的一个作为例子(定时器0)进行介绍:以方式1说一下,定时器如何使用:在使用定时器之前,要先对定时器的工作方式做一下规定:TMOD寄存器就是专门用来管理这个参数的:我们仅仅使用定时器0,不使用定时器1.所以,TMOD为0x01;即工作方式1然后给定时器赋予初值:TH0和TL0赋完初值之后还要将cpu的中断允许打开:EA=1;ER0=1;分别是打开总中断和打开定时器0的中断。

这时,定时器是不是已经开始定时了呢?没有,这时,我们需要给它启动起来!TR0=1;就启动了定时器。

在cpu将定时器0计满的时候,硬件会自动的将TCON中的TF0置于1,引起cpu中断。

但是就会自动跳转到中断处理函数中,在中断函数中,我们需要重新给T0赋初值。

以确保定时的准确。

以下是一个程序://用定时/计数器T0从P2.0输出周期为1s的方波,让发光二极管以1HZ闪烁,设晶振频率为12MHz。

#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit D1=P2^0;uchar a;void init() //初始化{TMOD=0x01; //选择定数计数器0的工作方式为16位定时器TL0=(65535-50000)%256; //赋初值,定时50msTH0=(65535-50000)/256;EA=1; //中断控制允许ET0=1;a=0;TR0=1; //启动定时器0}void time0() interrupt 1 //定时器0中断函数{TL0=(65535-50000)%256; //赋初值,定时50msTH0=(65535-50000)/256;a++;TR0=1;}void main(){init();while(1){while(a==10)//半个周期(500ms)时,D1上的电平跳变一次。

相关文档
最新文档