51单片机测量正脉冲宽度
编程测试INT1引脚上出现的正脉冲宽度,将所测得的值高位存入片内61H单元,低位存入60H单元。已知晶振频率为6MHZ。急~~~注意的是晶振频率为6M的,w4187818...
编程测试INT1引脚上出现的正脉冲宽度,将所测得的值高位存入片内61H单元,低位存入60H单元。已知晶振频率为6MHZ。急~~~
注意的是 晶振频率为6M的,w418781840 ,你现在计算的是为12M的吗? 展开
注意的是 晶振频率为6M的,w418781840 ,你现在计算的是为12M的吗? 展开
6个回答
展开全部
建议你在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分,少了点哇。呵呵,写程序很辛苦的啦~!:)呵呵
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
SJMP $
END
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
SJMP $
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
方法如下:
1.
如果单片有捕获功能的话,直接用捕获功能测量脉宽就行了,具体怎么操作得看你用什么单片机了,stc就有带捕获功能的单片的。
2.
如果单片没有捕获,那就把输入的信号接到单片的终端口,用信号的边沿触发外部中断,在程序里开启计数器计数,等到下次中断到来时,取计数的值,然后根据计数值频率就可以算出输入信号的脉宽了
1.
如果单片有捕获功能的话,直接用捕获功能测量脉宽就行了,具体怎么操作得看你用什么单片机了,stc就有带捕获功能的单片的。
2.
如果单片没有捕获,那就把输入的信号接到单片的终端口,用信号的边沿触发外部中断,在程序里开启计数器计数,等到下次中断到来时,取计数的值,然后根据计数值频率就可以算出输入信号的脉宽了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
注意:一样的,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
SJMP
$
END
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
SJMP
$
END
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
你都存进去了,不知还能帮你做什么??还是你想存进去但存不进去呀??
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询