实验三+单片机定时计数器实验
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验三单片机定时/计数器实验
1、实验目的
1、学习计数器的使用方法。
2、学习计数器程序的编写。
3、学习定时器的使用方法。
4、学习定时器程序的编写。
5、熟悉汇编语言
2、实验说明
1、8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。
2、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转
3、实验仪器和条件
计算机
伟福实验箱( lab2000P )
4、实验内容
1、 8051内部定时计数器T0,按计数器模式和方式1工作,对P3.4(T0)引脚进行计数。将其数值按二进制数在P1口驱动LED灯上显示出来。
2、外部事件计数脉冲由P3.4引入定时器T0。单片机在每个机器周期采样一次输入波形,因此单片机至少需要两个机器周期才能检测到一次跳变。这就要求被
采样电平至少维持一个完整的机器周期,以保证电平在变化之前即被采样。同时这
就决定了输入波形的频率不能超过机器周期频率。
3、用CPU内部定时器中断方式计时,实现每一秒钟输出状态发生一次反转
4、定时器有关的寄存器有工作方式寄存器TMOD和控制寄存器TCON。TMOD用于设置定时器/计数器的工作方式0-3,并确定用于定时还是用于计数。TCON主要功能是为定时器在溢出时设定标志位,并控制定时器的运行或停止等。
5、在例程的中断服务程序中,因为中断定时常数的设置对中断程序的运行起
到关键作用,所以在置数前要先关对应的中断,置数完之后再打开相应的中断。
五、思考题
1、使用其他方式实现本实验功能;
2、改为门控方式外部启动计数;
3、如果改为定时间隔为200us,如何改动程序;
4、使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序。
六、源程序修改原理及其仿真结果
思考题一:使用其他方式实现本实验功能
方法一:
mov TMOD, #00000100b ; 方式0,记数器
mov TH0, #0
mov TL0, #0
setb TR0 ; 开始记数
;由于方式0的特点是计数时使用TL0的低五位和八位TH0,故用加法器a用“与”(ANL)取TL0的低五位,再用yiwei子程序实现TH0的低三位变为高三位与TL0相加,这样赋给P1时就是八位计数的结果。
Loop:
mov a,TL0
anl a,#1fh
mov r1,a
mov a,TH0
call yiwei
add a,r1
mov P1, a ; 将记数结果送P1口ljmp Loop
;实现TH0的高三位移位为高三位,本身TH0是八位,故需要移位五次才能实现
yiwei:
mov r0,#05h
Loop1:
rl a
djnz r0,Loop1
ret
end
硬件:P1.0~P1.7接L0~L7,P3.4接单步脉冲
方法二:
mov TMOD, #00000110b ; 方式2,记数器
mov TH0, #0 ;暂存初值,可自动加载mov TL0, #0 ;八位加一计数器
setb TR0 ; 开始记数
Loop:
Mov P1,TL0 ; 将记数结果送P1口
ljmp Loop
End
硬件:P1.0~P1.7接L0~L7,P3.4接单步脉冲
硬件仿真结果说明:
按动单步脉冲按钮LED灯P0到P7会按照二进制的顺序点亮,即第一次P0亮其他灭,第二次P1亮其他灭,第三次P0、P1亮其他灭,第四次P2亮其他灭……以此类推,实现了用八位LED灯表示计数器的计数过程的目的。
思考题二:改为门控方式外部启动计数
mov TMOD, #00001101b ; 方式1,记数器,门控方式
mov TH0, #0
mov TL0, #0
setb TR0 ; 开始记数
Loop:
mov P1, TL0 ; 将记数结果送P1口
ljmp Loop
end ;INT0即P3.2接开关
硬件仿真结果说明:
在P3.2所接开关没有拨为高电平之前,按动单步脉冲按钮LED灯没有响应;开关拨为高电平之后按动单步脉冲按钮LED灯的响应同上。实现了计数器的门控外部启动。
思考题三:如果改为定时间隔为200us,如何改动程序
(2^8-x)*2*10^-6=200*10^-6;
故x=256-100
程序其他部分无需改变,定时变为2sLED灯的状态翻转一次
Tick equ 10000 ; 10000 x 200us = 2s
T100us equ 256-100 ; 200us时间常数(6M);
C100us equ 30h ; 200us记数单元
程序选用方式1定时,故计算初值:
(2^16-x)*2*10^6=10*10^3;
故x=65536-5000=60536
思考题四:使用其他方式实现本实验功能,例如使用方式1,定时间隔为10ms,如何改动程序
Tick equ 500 ; 500 x 10ms = 5s
T100us equ 60536 ; 10ms计数单位
C100us equ 30h ; 10ms记数单元
LEDBuf equ 0
LED equ P1.0
org 0000h
ljmp Start
org 000bh
方式1与方式2的区别不仅在于它是16位计数,同时在于它不能重新装入初值,赋值时要分高八位和低八位分别赋值,并且必须进入中断时手动重装初值
T0Int:
mov TH0, #high(t100us)
mov TL0, #low(t100us)
push PSW
mov a, C100us+1
jnz Goon
dec C100us
Goon:
dec C100us+1