关于单片机测量多路脉冲宽度的问题
答案:3 悬赏:30 手机版
解决时间 2021-02-07 22:36
- 提问者网友:wodetian
- 2021-02-07 11:06
1.单片机为2051,用在路边红绿灯的人行灯到计时器。大概的原理:当人行红灯到来后,输入220V市电,通过整流后接TP521光耦,此时光耦右边输出一个电平(低电平持续0-99s),通过74ls14接入单片机2051的int0;同理绿灯也是如此。请问写,如何测得这两个电平的宽度并且在数码管显示出来(第一次数码管不亮,之后每次对应显示上一次的电平宽度值倒计时)
最佳答案
- 五星知识达人网友:雪起风沙痕
- 2021-02-07 12:03
记得2051单片机应该是有两个定时器的,更改T0,T1计数器工作模式,同时设置EX0,EX1外部中断,有中断时对于定时器开始计时,然后显示就可以了。估计代码应该在2到3百行就可以搞定了。另外不知道管脚怎么分配,把原理图贴上,或许哪天闲的话就给敲一个。
全部回答
- 1楼网友:一袍清酒付
- 2021-02-07 15:01
首先,低电平持续0-99s,时间很长精度要求应该不高,这个根本不需要用中断方式,用查询方式就可以了,而且有多个灯,用循环查询的方式比较好。
- 2楼网友:往事埋风中
- 2021-02-07 13:26
建议你在int1引脚上,加一个反相器。这样,可以使用中断功能来完成。程序如下:
org 0000h
sjmp main
org 000bh
ljmo i_t0
org 00013h
ljmp i_int1
main:
mov r0,#0
mov tmod,#02h
mov th0,#0
mov tl0,#0
setb it1
setb ea
setb ex1
setb et0
sjmp $
i_int1:
setb tr0
jnb p3.3,$
mov 60h,tl0
mov 61h,r0
mov r0,#0
mov tl0,#0
clr tr0
reti
i_t0:
clr tf0
inc r0
reti
end
最后正脉冲的宽度为:[(61h)×256+(60h)]×t
其中:t为机器周期,如果是6mhz的话就是2us,如果是12mhz的话就是2us。
我评经验,你要测量正脉冲宽度是要计算占空比。这个程序,实现该功能没问题。
附带说一句,你这样的问题才30分,少了点哇。呵呵,写程序很辛苦的啦~!:)呵呵
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
推荐资讯