51单片机测量正脉冲宽度

来源:百度知道 编辑:UC知道 时间:2024/06/30 03:13:05
编程测试INT1引脚上出现的正脉冲宽度,将所测得的值高位存入片内61H单元,低位存入60H单元。已知晶振频率为6MHZ。急~~~
注意的是 晶振频率为6M的,w418781840 ,你现在计算的是为12M的吗?

建议你在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分,少了点哇。呵呵,写程序很辛苦的啦~!:)呵呵

注意:一样的,6M的计数初值也是取最大值.
ORG 0
MOV TMOD,#90H
MOV TL0,#00H;设定计数初值为最大值.
MOV TH0,#00H
MOV R0,#60H
JB P3.3,$
SETB TR0
JNB P3.3,$
JB P3.3,$
CLR TR0
MOV @R0,TL0
INC R0
MOV @R0,TH0