51单片机问题
P1口控制信号灯实验:P1口做输出口,接八只发光二极管(相当于信号灯),编写程序,使发光二极管循环点亮(已知晶振频率为12MHZ)。参考程序如下所示,试问:(1)CALL...
P1口控制信号灯实验:P1口做输出口,接八只发光二极管(相当于信号灯),编写程序,使发光二极管循环点亮(已知晶振频率为12MHZ)。参考程序如下所示,试问:
(1)CALL Delay 完成什么功能?
实现时间控制,隔一段时间执行某段代码。
(2)计算信号灯点亮多长时间(ms)?
(3)若点亮100ms, R6, R7如何设置?给出误差分析。
(4)本程序能停止吗?为什么?若要停止程序运行,程序如何改进?
Loop: MOV A,#01H
MOV R2,#8
Output: MOV P1, A
RL A
CALL Delay
DJNZ R2, Output
LJMP Loop
Delay: MOV R7, #100
DelayLoop: MOV R6,#100
DelayLoop1:DJNZ R6, DelayLoop1
DJNZ R7, DelayLoop
RET
END
非常感谢! 展开
(1)CALL Delay 完成什么功能?
实现时间控制,隔一段时间执行某段代码。
(2)计算信号灯点亮多长时间(ms)?
(3)若点亮100ms, R6, R7如何设置?给出误差分析。
(4)本程序能停止吗?为什么?若要停止程序运行,程序如何改进?
Loop: MOV A,#01H
MOV R2,#8
Output: MOV P1, A
RL A
CALL Delay
DJNZ R2, Output
LJMP Loop
Delay: MOV R7, #100
DelayLoop: MOV R6,#100
DelayLoop1:DJNZ R6, DelayLoop1
DJNZ R7, DelayLoop
RET
END
非常感谢! 展开
1个回答
展开全部
(1)CALL Delay 完成什么功能?
实现时间控制,隔一段时间执行某段代码。
(2)计算信号灯点亮多长时间(ms)?
粗略计算:
100 * 100 * 2us = 20 000us = 20ms。
(3)若点亮100ms, R6, R7如何设置?给出误差分析。
Delay: MOV R7, #100---改成 200
DelayLoop: MOV R6,#100--改成 250
误差:???
(4)本程序能停止吗?为什么?
不能。
若要停止程序运行,程序如何改进?
你先说:在何处停止?
实现时间控制,隔一段时间执行某段代码。
(2)计算信号灯点亮多长时间(ms)?
粗略计算:
100 * 100 * 2us = 20 000us = 20ms。
(3)若点亮100ms, R6, R7如何设置?给出误差分析。
Delay: MOV R7, #100---改成 200
DelayLoop: MOV R6,#100--改成 250
误差:???
(4)本程序能停止吗?为什么?
不能。
若要停止程序运行,程序如何改进?
你先说:在何处停止?
追问
非常感谢!本人太菜,有些问题不懂。。
2中的,12MHz机器周期是1us,那为什么按2us算呢?
3误差应该是说机器周期不能完全准确确定把。。
4全部点亮后停止
再次感谢!!!!!!
追答
2中的,12MHz机器周期是1us,那为什么按2us算呢?
--DJNZ 指令,一条,就是两个机器周期。
3误差应该是说机器周期不能完全准确确定把。。
--讨论误差,需要精确计算延时的时间。
--算起来,太麻烦了。
--你自己算一算,试试看。
4全部点亮后停止
……
Loop: MOV A,#01H
MOV R2,#8
Output: MOV P1, A
RL A
CALL Delay
DJNZ R2, Output
LJMP Loop--改为 LJMP $
LJMP $,是原地转移。
单片机不停的原地转移,灯,就停在最后一位,不变了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询