【问题标题】:PIC184550: Program seems to terminate at call functionPIC184550:程序似乎在调用函数处终止
【发布时间】:2015-04-09 21:40:54
【问题描述】:

我正在编写一个程序,它会闪烁红色、黄色和绿色 LED 以匹配交通信号灯的功能。但是,当我在调试器中运行它并单步执行时(我使用的是 MPLAB X IDE),它似乎在调用函数“LOOP1”后停止了。 PORTD 中反映的值是它在 LOOP1 完成后应该保持的值,而不是在 LOOP6 完成之后。有什么想法吗?

 list p=18f4550, r=DEC
 #include <p18f4550.inc>
 CONFIG LVP=OFF
 CONFIG WDT=OFF
 CONFIG MCLRE=OFF

 CONFIG FOSC = INTOSCIO_EC

    ORG 0x00
    CBLOCK 0
DELAY1:1
DELAY2:1
COUNTER:1
    ENDC

START:
    CLRF TRISD
    CLRF PORTD
    CLRF COUNTER
    CLRF DELAY1
    CLRF DELAY2
    MOVLW 0x00

PRIMARYLOOP:
    CALL LOOP1
    CALL LOOP2
    CALL LOOP3
    CALL LOOP4
    CALL LOOP5
    CALL LOOP6
    GOTO PRIMARYLOOP

LOOP1:
    MOVLW b'00010010'
    MOVWF PORTD
    MOVLW 0x01
    MOVWF COUNTER
    CALL DELAYMAIN
    RETURN
LOOP2:
    MOVLW b'01000010'
    MOVWF PORTD
    MOVLW 0x05
    MOVWF COUNTER
    CALL DELAYMAIN
    RETURN
LOOP3:
    MOVLW b'00100010'
    MOVWF PORTD
    MOVLW 0x03
    MOVWF COUNTER
    CALL DELAYMAIN
    RETURN
LOOP4:
    MOVLW b'00010010'
    MOVWF PORTD
    MOVLW 0x01
    MOVWF COUNTER
    CALL DELAYMAIN
    RETURN
LOOP5:
    MOVLW b'01000010'
    MOVWF PORTD
    MOVLW 0x05
    MOVWF COUNTER
    CALL DELAYMAIN
    RETURN
LOOP6:
    MOVLW b'00100010'
    MOVWF PORTD
    MOVLW 0x03
    MOVWF COUNTER
    CALL DELAYMAIN
    RETURN

DELAYMAIN:
    DECFSZ DELAY1,1
    GOTO DELAYMAIN
    DECFSZ DELAY2,1
    GOTO DELAYMAIN
    DECFSZ COUNTER,0,0
    RETURN

    END

【问题讨论】:

    标签: microcontroller mplab microprocessors pic18


    【解决方案1】:

    您正在跳过 DELAYMAIN 中的返回指令,导致执行超出程序范围。其余的内存可能包含NOP 指令,因此控制将继续,直到 PC 回绕到 0 并且程序重新启动。

    只需在最后一个DECFSZ 之后添加缺少的GOTO(或BRA)指令,它就会进入第二个循环。您还需要更改该DECFSZ 的目标以写入寄存器,否则COUNTER &gt; 1 将永远无法完成。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-22
      • 1970-01-01
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多