Assembly 如何移动变量';将值转换为程序集中的另一个变量

Assembly 如何移动变量';将值转换为程序集中的另一个变量,assembly,microcontroller,pic,Assembly,Microcontroller,Pic,我正在学习使用MPLAB X和PIC18F1320微控制器进行汇编编程。我一直在遵循MPASM用户指南(),并且从我的微控制器上的RB0引脚得到一个LED闪烁。我写了一个程序,让LED每512次闪烁一次。我很难弄清楚如何将延迟从512更改为变量,以便在代码中的其他地方更改它。理想情况下,该行 movf 0xFF,count1 将被替换为 count1=delay1 其中,delay1是在代码前面设置为0x20的变量 代码如下: #include "p18

我正在学习使用MPLAB X和PIC18F1320微控制器进行汇编编程。我一直在遵循MPASM用户指南(),并且从我的微控制器上的RB0引脚得到一个LED闪烁。我写了一个程序,让LED每512次闪烁一次。我很难弄清楚如何将延迟从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     ;/

谢谢

在PIC18设备上,您可以使用
movff
指令在两个寄存器之间复制一个值。
moff
指令仅允许将值从寄存器复制到工作寄存器中

此外,程序开始时的
movlw
movwf
指令顺序也是前后颠倒的。调用
movlw
将程序内存中的常量值加载到工作寄存器中,然后调用
movwf
将该值从工作寄存器复制到数据内存中

该网站有一个在线PIC模拟器和教程,详细介绍了这一切的工作原理:


谢谢你,它现在可以用了,我一定要去看看那个网站