【发布时间】:2013-07-09 10:28:02
【问题描述】:
我最近开始使用 18 PIC 4500,我第一次尝试在汇编中对其进行编程是让它在循环中闪烁一个 LED。但是,我没有太多使用这种语言编程的经验,因此不得不依靠其他 sn-ps 代码来帮助我入门。我的代码如下:
#include<p18f4550.inc>
CONFIG WDT = OFF
CONFIG MCLRE = ON
CONFIG DEBUG = ON
CONFIG LVP = OFF
CONFIG FOSC = INTOSCIO_EC
ORG 0
Delay1 res 2
Delay2 res 2
Start:
CLRF PORTB
CLRF TRISB
CLRF Delay1
CLRF Delay2
MainLoop:
BSF PORTB,1
GOTO DelayA
DelayA:
DECFSZ Delay1,1
GOTO DelayA
BCF PORTB,1
GOTO DelayB
DelayB:
DECFSZ Delay2,1
GOTO DelayB
GOTO MainLoop
end
我不明白为什么它不起作用,但认为它可能与指令周期速度有关,我认为它是 1 MHz,导致延迟过短。
非常感谢任何帮助!
【问题讨论】:
-
在DelayA,您首先调用DECFSZ,然后无条件(!)跳转到Delay A。我希望有条件跳转。另请注意,在循环之前,您必须初始化某种循环变量,否则下一次调用将根本不循环(因为变量已经为零)或者会导致下溢然后循环直到再次为零。不过我可能完全错了,因为我不知道 PIC 汇编。 BTW:DelayA 和 DelayB 不对称也有点奇怪。
-
@doomster 您不必初始化循环变量,您可以在这些微控制器中实现永远循环
-
当然,decfsz 只需要一个时钟周期。所以它永远不能延迟超过 65536 微秒。用人眼很难看到。请改用计时器。大量来自“使用 tmr0 的图片”的谷歌点击量。
标签: assembly pic microprocessors