1

我最近开始使用 18 PIC 4500,我第一次尝试在汇编中对其进行编程是让它在一个循环中闪烁一个 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

我不明白为什么它不起作用,但认为它可能与指令周期速度有关,我认为它是 1 MHz,导致延迟过短。

非常感谢任何帮助!

4

1 回答 1

0

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 示例)

于 2013-07-09T10:36:27.063 回答