一、试验现象
每次按下k0按键2次后,在P0.0输出一个周期是100ms的方波信号。
二、试验意图
把握内部守时/计数器作计数功用的使用
三、试验任务分析
在前面的3个试验里边,咱们都是让T0作业于守时办法,然后产生一段固定的时刻。可是T0和T1除了能够用于守时外,还能够用于对外部输入的脉冲进行计数。在这个试验里边,咱们学习T0作业于计数办法时的编程办法。
在本试验中,咱们用T0对外部按键的动作进行计数。看一下守时/计数器的逻辑图如下图所示:
咱们发现当C/T=1的时分,守时/计数器T0可对T0(P3.4)端计数,每逢T0端产生一个负跳变的时分,计数器履行一次加1的运算。为了让k0按键按下的时分,在p3.4端产生一个负跳变,咱们首先要做的是把p1.1和p3.4用导线短路,如下图13-2所示,这样才干满意试验要求。
这个试验的思路如下:让T0在计数2次时,产生溢出中止,在T0的中止服务程序咱们发动T1开端计数,然后在T1的溢出中止里边把P0.0取反,这样就能够产生契合咱们试验要求的信号
为了让k0按下2次后T0产生溢出中止,咱们能够让T0作业于计数办法,并挑选可从头置入计数初值的8位计数器形式2;为了产生100ms的方波信号,咱们让T1作业于守时办法,挑选16位计数器形式。所以tmod的初值应该是:0001 0110,即16h。
四、试验程序
org 0000h
ajmp main
org 000bh ;T0溢出中止进口地址
ajmp time0
org 001bh
ajmp time1 ;T1溢出中止进口地址
org 0020h
main: clr p1.5
setb p0.0
mov sp,#70h ;设置仓库
mov tmod,#16h ;T0、T1初始化,T0作业在计数办法,T1作业在守时办法
mov tl0,#0feh ;T0置计数初值,计数2次后产生溢出中止
mov th0,#0feh ;计数初值置入常数缓冲区
mov th1,#3ch ;T1置入计数初值,产生50ms守时
mov tl1,#0b0h
setb et0 ;答应T0溢出中止
setb et1 ;答应T1溢出中止
setb tr0 ;发动T0计数
setb ea cpu开中止
ajmp $
time0: setb tr1 ;发动T1计数
reti
time1: mov th1,#3ch ;T1重装计数初值
mov tl1,#0b0h
cpl p0.0 ;P0.0取反
reti
end
五、几点阐明
在运转该程序时,有时可能会发现并不是按键按下两次后产生信号,这是由于手动按键的时分可能会产生颤动状况,导致计数器计数的原因。