如何将变量的值移动到汇编中的另一个变量中

时间:2015-03-17 01:58:34

标签: assembly microcontroller pic

我正在尝试使用MPLAB X和PIC18F1320微控制器学习汇编编程。我一直在关注MPASM用户指南(http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf)并且已经从我的微控制器上的RB0引脚闪烁了一个LED。我写了一个程序,每512个滴答一次LED闪烁一次。我无法弄清楚如何将延迟从512更改为可变数量,因此我可以将其更改为代码中的其他位置。理想情况下,该行

        movf    0xFF,count1

将替换为

        count1=delay1

其中delay1是代码中前面设置为0x20的变量。

以下是代码:

#include "p18F1320.inc"

 CONFIG  OSC = INTIO1          ; Oscillator Selection bits (Internal RC oscillator, CLKO function on RA6 and port function on RA7)

 cblock 0x20    ;start of data section
 count1         ;delay variable
 delay1         ;length of delay
 endc

        org     00          ;\
        movwf   PORTB       ; |
        movlw   0x00        ; |
        movwf   TRISB       ; |--Start program and configure I/O pins
        movlw   0x00        ; |
        movwf   ADCON1      ; |
        movlw   b'00000110' ;/

        movwf   delay1      ; Set the variable delay1=0x20
        movlw   0x20        ;/

loop    call BLINKONCE      ; Blink loop
        goto loop           ;/

BLINKONCE                   ;\
        bsf     PORTB,4     ; |
        call    DELAY       ; |--makes I/O pin RB4 turn on and off once with a delay in between
        bcf     PORTB,4     ; |
        call    DELAY       ;/
DELAY
        movf    0xFF,count1 ;I want to be able to set count1=delay1 right here

loop2   decfsz count1, 1    ; Delay loop with length=count1
        goto loop2          ;/

        return  ; end program
        end     ;/

谢谢!

1 个答案:

答案 0 :(得分:1)

在PIC18器件上,您可以使用movff指令执行以下操作 - 在两个寄存器之间复制一个值。 movf指令只允许您将寄存器中的值复制到工作寄存器中。

此外,您在计划开始时对movlwmovwf说明的排序也会重新排在前面。您调用movlw将程序存储器中的常量值加载到工作寄存器中,然后movwf将该值从工作寄存器复制到数据存储器中。

该网站有一个在线PIC模拟器和教程,可以更详细地解释这一切的工作原理:

http://www.microcontrollerjs.com