使用汇编代码使用18PIC4550闪烁LED

时间:2013-07-09 10:28:02

标签: assembly pic microprocessors

我最近开始使用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,导致延迟过短。

任何帮助非常感谢!

1 个答案:

答案 0 :(得分: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示例)