您的当前位置:首页正文

定时器计数器应用实验

2020-05-26 来源:榕意旅游网
单片机原理及应用实验报告 实验五 定时器/计数器应用实验

一、实验目的

1、学习8051内部定时器/计数器的使用方法和编程方法 2、掌握定时器0作为中断源时的中断处理程序的编程方法

二、实验原理

8051单片机内部有两个16为可编程定时器/计数器:T0和T1。16为是指它们都是有16个触发器构成,故最大计数模值为216-1。可编程是指它们的工作方式由指令来设定,或者当计数器用,或者当定时器用,并且计数(定时)的范围也可以由指令来设置。这种控制功能是通过定时器方式控制寄存器TMOD来完成的。工作在定时方式时,时钟由单片机内部提供,即系统时钟经过12分频后作为定时器的时钟;工作在计数方式时,时钟脉冲(计数脉冲)由T0和T1(即P3.4和P3.5)输入。

定时器在计到规定的定时值时可以向CPU发出中断申请,从而完成某种定时的控制功能。定时器控制寄存器TCON用来负责定时器的启动、停止以及中断管理。

程序一:定时器/计数器0按定时模式和方式2工作,产生周期为1秒的方波,方波由P1.0口输出。此程序用中断方式。弄清IE寄存器的作用及矢量地址000BH的含义。

1、内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12个振荡器周期。因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器, 定时器100US中断一次, 所以定时常数的设置可按以下方法计算:

机器周期=12÷6MHZ=2US (256-定时常数)×2US=100US

定时常数=206. 然后对100US中断次数计数10000次,就是1秒钟。 2、在中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键作

用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。 3、实验电路及连线

连线 连接孔1 1 P1.0 连接孔2 L0 4、实验框图

开始 定时中断入口 置T0中断工作方式 保护现场 设置定时常数 秒计数值减1 否 设置初始状态位 是否到1秒 是 Y 设置秒计数值 重新设置秒计数值 中断允许 状态位取反 输出状态位 恢复现场 等待中断 中断返回 主程序框图 定时中断子程序框图 5、汇编语言源程序:

TICK EQU 10000 ; 10000 X 100US = 1S T100US EQU 256-50 ; 100US时间常数(6M) C100US EQU 30H ; 100US记数单元 LEDBUF EQU 0 LED EQU P1.0 LJMP START ORG 000BH ;中断程序入口 T0INT: PUSH PSW MOV A, C100US+1 JNZ GOON DEC C100US GOON: DEC C100US+1 MOV A, C100US ORL A, C100US+1 JNZ EXIT ; C100US 记数器不为0, 返回 MOV C100US, #HIGH(TICK) MOV C100US+1, #LOW(TICK) CPL LEDBUF ; C100US 记数器为0, 重置记数器 ; 取反LED EXIT: POP PSW RETI START: ; 主程序入口 MOV TMOD, #02H ; 方式2, 定时器0 MOV TH0, #T100US ; 计算T/C的计数初值,并装载到TH和TL MOV TL0, #T100US MOV IE, #10000010B ; EA=1, IT0 = 1 SETB TR0 ; 开始定时 CLR LEDBUF CLR LED MOV C100US, #HIGH(TICK) MOV C100US+1, #LOW(TICK) LOOP: MOV C, LEDBUF MOV LED, C LJMP LOOP END 程序二:定时器/计数器0按计数器模式和方式2工作,对P3.4(T0)引脚进行计数。按动按钮,记数寄存器增加1记数,记满则与P1.0相连的发光二极管亮,留意按动次数。

说明:

1、单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这就决定了输入波形的频率不能超过机器周期频率。

2、实验电路及连线

连线 连接孔1 1 2 P1.0 连接孔2 L0 开始 P1.0 ·––––·LED0 ·––––·T0 单脉冲输出 T0 3、程序框图 设置初始状态位

设置计数值

输出状态位 查询状态位是否为一 是

4、汇编语言源程序: CLR P1.0 MOV TMOD, #00000110B ; 方式2,记数器0 MOV TH0, #0FBH MOV TL0, #0FBH SETB TR0 ; 开始记数 LOOP1: JBC TF0, LOOP2 SJMP LOOP1 LOOP2: SETB P1.0 NOP END

三、实验器材

1、LAB6000 通用微控制器实验系统。 2、计算机,WAVE 集成调试软件。 3、连线若干。

四、实验步骤:

1、连接系统,设置好仿真器和编译选项。 2、建立新程序和新项目,编译程序。 3、编译成功后进行调试,观察LED的闪烁。

4、对于实验一,可在中断程序中设置断点,在观察窗口中添加C100US和LEDBUF观察项,并观察和记录下XDATA窗口和观察窗口中的数据变化。

五、实验报告要求

1、整理好观测到的数据,并与理论值相比较。 2、讨论定时器/计数器0的四种方式的定时范围。

3、小结做完实验后的体会(着重弄懂控制寄存器的位含义及中断的处理)。

1、 程序一:定时器/计数器0按定时模式和方式2工作,产生周期为1秒的方波,

方波由P1.0口输出。可观察到LED灯在一秒内闪烁一次,0.5秒亮,0.5秒暗。

2、 程序一改为用方式1工作:程序如下

TICK EQU 5000

T100US EQU 256-50 ; 100US时间常数(6M) C100US EQU 30H ; 100US记数单元 LEDBUF EQU 0 LED EQU P1.0 LJMP START

ORG 000BH ;中断程序入口 T0INT:

PUSH PSW

MOV TH0,#0FFH MOV TL0,#T100US MOV A, C100US+1 JNZ GOON DEC C100US GOON:

DEC C100US+1 MOV A, C100US ORL A, C100US+1

JNZ EXIT ; C100US 记数器不为0, 返回 MOV C100US, #HIGH(TICK) MOV C100US+1, #LOW(TICK)

CPL LEDBUF ; C100US 记数器为0, 重置记数器 ; 取反LED EXIT:

POP PSW RETI

START: ; 主程序入口

MOV TMOD, #01H ; 方式1, 定时器0

MOV TH0, #0FFH ; 计算T/C的计数初值,并装载到TH和TL MOV TL0, #T100US

MOV IE, #10000010B ; EA=1, IT0 = 1 SETB TR0 ; 开始定时 CLR LEDBUF CLR LED

MOV C100US, #HIGH(TICK) MOV C100US+1, #LOW(TICK) LOOP:

MOV C, LEDBUF MOV LED, C LJMP LOOP END

实验结果与第一次实验结果相同

实验二:按照实验所给出程序2执行,执行结果如下: 程序执行前灯是亮的,程序执行后灯灭,当按下单脉冲5次后灯又亮了

并且灯一直保持亮的状态。

因篇幅问题不能全部显示,请点此查看更多更全内容