我最近开始使用PIC18F4550,我在组装中对它进行编程的第一次尝试是使它在一个循环中闪烁一个LED。然而,我在用这种语言编程方面没有太多经验,所以我不得不依靠其他代码片段来开始。我的代码如下:
#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
我不明白为什么它不起作用,但我认为这可能与指令周期速度有关,我认为指令周期速度为1MHz,导致延迟过短。
非常感谢您的帮助!
1。尝试设置您正在切换的引脚的"三态"。你必须指出它是输入还是输出,在这种情况下它是输出。
像
#define D0_1Tris B'11001111'
movlw D0_1Tris ; set direction so LEDs D0 & D1 are outputs
movwf TRISA ; all others are inputs (high-z)
2。确保您的A/D配置为I/O数字
clrf ANSEL ; configure A/D I/O as digital
(可能也需要清除比较器,无论哪个外设与所选I/O多路复用)
3。也不要忘记使用重置矢量
ORG 0x000 ; processor reset vector
nop ; required by in circuit debugger
goto Init ; go to beginning of program
4。试着以较慢的时钟频率来确定是否是因为短暂的延迟。如果是延迟问题,则实施定时器以使切换信号占空比为50-50(注意,可能必须将其更改为p18f4550,它取自pic16示例)