硬件实验十二 定时器实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
硬件实验十二定时器实验
一、实验要求
用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转.
二、实验目的
1、学习8031内部计数器的使用和编程方法。
2、进一步掌握中断处理程序的编程方法。
三、实验电路及连线
四、实验说明
1、关于内部计数器的编程主要是定时常数的设置和有关控制寄存器的设置。内部计
数器在单片机中主要有定时器和计数器两个功能。本实验使用的是定时器。
2、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置
定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON 主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
3、内部计数器用作定时器时,是对机器周期计数。每个机器周期的长度是12个振
荡器周期。因为实验系统的晶振是6MHZ,本程序工作于方式2,即8位自动重装方式定时器, 定时器100us中断一次, 所以定时常数的设置可按以下方法计算:
机器周期=12÷6MHZ=2uS
(256-定时常数)×2uS=100us
定时常数=206. 然后对100us中断次数计数10000次,就是1秒钟.
4、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起到关键
作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
5、对于80C196,与定时器有关的寄存器为IOC1.2和INT-MASK。IOC1.2为定时器1
溢出中断允许/禁止位。INT-MASK的第0位为定时器溢出屏蔽位。
6、对于80C196,在设置中断定时常数时,要注意先设置窗口寄存器WSR,设置完常
数后,再恢复原WSR值。
五、实验框图
定时1s:
ORG 0000H LJMP MAIN ORG 000BH LJMP IT0P
ORG 1000H MAIN:
MOV SP,#60H MOV R1,#32H MOV R2,#28H MOV TMOD,#02H MOV TH0,#06H MOV TL0,#06H SETB TR0
SETB ET0
SETB EA
HERE:
SJMP HERE
IT0P:
DJNZ R1,LOOP
MOV R1,#32H
DJNZ R2,LOOP
CLR EA
PUSH PSW
PUSH Acc
SETB EA
CPL P1.0
CLR EA
POP Acc
POP PSW
SETB EA
LOOP:
RETI
遇到的问题及解决方法
1.问题:定时器工作在方式一
解决方法:工作在方式一不能自动重新装载定时器,需要用软件来从新设置初值。改正后使用方式二,可以实现自动从新装载定时器。
2.问题:定时一秒误差比较大
解决方法:可以尽量使定时器循环的次数减少,如将每次定时器计时100us(计数50次T0初值为0CEH,循环10000次)改为每次计时500us(计数250次T0初值为06H循环2000次)。