初学者:测高电平的宽度
;这段程序是用外部中断0和定时器t0,工作方式1测外部高电平的宽度。因为定时器t0,工
作方式1最大定时长度65536us
;所以程序中使用了软件计数的方法。每1ms定时器溢出一次,每溢出一次累加器加1。当外
部脉冲出现下跳沿时,产生外部中断
;取出累加器a中的数据放入30h地址中
org 0000h
ajmp main
org 0003h
ajmp serve
org 000bh
ajmp time
org 0030h
main: mov tmod,#00001001b;t0工作方式1,gate位为1
mov tl0,#018h
mov th0,#0fch;1ms的定时初值
setb it0;外部中断0的触发方式为下跳沿触发
clr tr0;关定时器0
up: jnb p3.2,next;如果外部已是高电平,等待下一个高电平
ajmp up
next: setb tr0;打开定时器0
setb et0;t0中断允许
setb ea;中断总允许
clr px0;外部中断0低优先级
setb pt0;t0中断高优先级
mov 30h,#00h
mov a,#00h
jnb p3.2,$;等待上升沿
setb ex0;打开外部中断0
ajmp $
time: mov tl0,#018h
mov th0,#0fch
inc a
reti
serve: mov 30h,a
reti
end
;这个程序在time和serve两个标号上设断点,但是程序一运行直接跑到serve上停下,即先
进入外部中断0处理程序。所加的信号时用
;信号发生器产生的高电平的宽度是6ms,低电平宽度是2ms的方波。也就是说程序跑完后在
30h中应该是5或6才对。
发表时间:2002年10月12日19:33:00