实验四 定时器
一、实验目的
1、理解单片机内部定时器的工作原理及使用方法
2、了解单片机定时中断程序的编写和调试方法
3、掌握定时器的基本使用方法
二、实验设备(仪器)
PC 微机一台
三、实验原理
1、 单片机定时器的工原理
MCS-51 单片机内部有两个16 位可编程的定时器/计数器T0 和T1。它们即可用作定时器方式,又可用作计数器方式。其中T0 由TH0 和TL0 计数器构成;T1 由TH1 和TL1 计数器构成。
工作于定时器方式时,通过对机器周期(新型51单片机可以对振荡周期计数)的计数,即每一个机器周期定时器加1,来实现定时。故系统晶振频率直接影响定时时间。如果晶振频率为12MHZ,则定时器每隔(1/12MHZ)×12=1us 加1。
工作于计数器方式时,对P3.4 或P3.5 管脚的负跳变(1→0)计数。它在每个机器周期的S5P2 时采样外部输入,当采样值在这个机器周期为高,在下一个机器周期为低时,计数器加1。因此需要两个机器周期来识别一个有效跳变,故最高计数频率为晶振频率的1/24。
特殊功能寄存器TMOD 用于定时器/计数器的方式控制。高4 位用于设置T1,低4 位用于设置T0。如图4-7所示。
图4-7 定时器模式控制字格式
TCON 寄存器用于定时器的计数控制和中断标志。如图4-8所示。
图4-8 定时控制寄存器数据格式
编写程序控制这两个寄存器就可以控制定时器的运行方式。
单片机内部定时器/计数器的使用,简而概之:(1)如需用中断,则将EA和相关中断控制位置1;(2)根据需要设置工作方式,即对TMOD设置;(3)然后启动计数,即对TR0或TR1置1。(4)如使用中断,则计数溢出后硬件会自动转入中断入口地址;如使用查询,则必须对溢出中断标志位TF0或TF1进行判断。
四、实验内容及步骤
编写一个秒表程序,秒表有两个开关,其一为复位开关,其二为计数启停开关。
1、用Protues设计出外部中断计数器的电路原理图,单片机选用AT89C51,P2口接LED字段a~h,P1口接位选,INTO与INT1接单次脉冲输出端。
2、打开Keil uVision2仿真软件,首先建立本实验的项目文件,接着编写外部中断计数器.ASM源程序,进行编译,直到编译无误,生成HEX文件。
3、将HEX文件上载到Protues电路原理图的AT89C51中,并仿真成功。
4、实验电路功能,按动计数启停开关,控制秒表启停;按动复位开关,秒表显示清零。2个LED数码管(个位与十位)显示秒表值。
五、proteus工程原理图
实现功能
<1>按下计数启停开关,实现计数或计数暂停
<2>按下复位开关,计数清零
源代码
ORG 0000H
LJMP START
ORG 0003H ;外部中断0入口向量
LJMP INT_E0
ORG 000BH ;定时器0中断入口
LJMP INT_T0
ORG 0013H ;外部中断1入口向量
LJMP INT_E1
START:
SETB EX0 ;中断工作方式设置
SETB IT0
SETB ET0
SETB EX1 ;中断工作方式设置
MOV TMOD,#01H ;设置定时器0工作方式
MOV TH0,#60 ;定时50毫秒(12M时钟)
MOV TL0,#176
MOV R0,#00H
MOV R1,#00H
MOV R2,#00H
SETB EA
DISP:
MOV DPTR,#TABLE
CJNE R0,#20,LED1
INC R1
MOV R0,#00H
LED1: ;显示第一位
CJNE R1,#0AH,LED1_DISP
INC R2
MOV R1,#00H
LED1_DISP:
MOV A,R1
MOVC A,@A+DPTR
MOV P2,#01H
MOV P1,A
LCALL DELAY
LED2: ;显示第二位
CJNE R2,#0AH,LED2_DISP
MOV R2,#00H
LED2_DISP:
MOV A,R2
MOVC A,@A+DPTR
MOV P2,#02H
MOV P1,A
LCALL DELAY
LJMP DISP
DELAY:
MOV R7,#0FFH
DJNZ R7,$
RET
INT_E0:
CPL TR0 ;定时器开/关转换
RETI
INT_T0: INC R0
MOV TH0,#60 ;定时50毫秒
MOV TL0,#176
RETI
INT_E1:
MOV R0,#00H
MOV R1,#00H
MOV R2,#00H
CLR TR0
RETI
TABLE: DB 3FH,06H,5BH,4FH,66H
DB 6DH,7DH,07H,7FH,6FH
END
工程文件:
https://download.csdn.net/download/qq_42253057/18810276