导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→初学者:测高电平的宽度[luoyi]

 *第5442篇: 初学者:测高电平的宽度

  
楼 主:luoyi 2002年10月12日19:33
 初学者:测高电平的宽度
;这段程序是用外部中断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才对。
  
2楼:红心J 2002年10月13日23:19
 参考
将以下2句
up: jnb p3.2,next;如果外部已是高电平,等待下一个高电平
                 ajmp up 
改为: jb p3.2,$  ;等待低电平
  
3楼:gty 2002年10月18日02:17
 也许...
将           up: jnb p3.2,next;如果外部已是高电平,等待下一个高电平
                 ajmp up 
改为:      jb p3.2,$ ;如果外部已是高电平,先等待低电平来临,再在下面等高电平
            jnb p3.2,$;如果外部已是低电平,则等待高电平

可能在 setb ex0 后,立即发生外部中断0,因为在setb it0 到 setb ex0之间已经发生了
下跳沿触发(p3.2脚上).

  
4楼:zy440 2006年2月26日22:49
 clr ie0
改为:     jnb p3.2,$;等待上升沿
                clr ie0
                setb ex0;打开外部中断0
                ajmp $
我调试了,成功了!

>>>>>>对该主题发表你的看法

本主题贴数4,分页: [第1页]


[上一篇主题]:初学者:急啊!帮一下忙

[下一篇主题]:硬件:能否看看哪位红外接收程序wujb18@163.net