使用装配代码用PIC18F4550使LED闪烁



我最近开始使用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示例)

最新更新