如何将变量的值移动到汇编中的另一个变量
How to move a variable's value into another variable in assembly
我正在尝试学习使用 MPLAB X 和 PIC18F1320 微控制器进行汇编编程。我一直在遵循 MPASM 用户指南 (http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf),并从我的微控制器上的 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
指令来执行您想要的操作 - 在两个寄存器之间复制一个值。 movf
指令只允许您将值从寄存器复制到工作寄存器。
此外,您的 movlw
和 movwf
指令在程序开始时的顺序也是从前到后。您调用 movlw
将常量值从程序存储器加载到工作寄存器,然后 movwf
将该值从工作寄存器复制到数据存储器。
该站点有在线 PIC 模拟器和教程,更详细地解释了这一切的工作原理:
我正在尝试学习使用 MPLAB X 和 PIC18F1320 微控制器进行汇编编程。我一直在遵循 MPASM 用户指南 (http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf),并从我的微控制器上的 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
指令来执行您想要的操作 - 在两个寄存器之间复制一个值。 movf
指令只允许您将值从寄存器复制到工作寄存器。
此外,您的 movlw
和 movwf
指令在程序开始时的顺序也是从前到后。您调用 movlw
将常量值从程序存储器加载到工作寄存器,然后 movwf
将该值从工作寄存器复制到数据存储器。
该站点有在线 PIC 模拟器和教程,更详细地解释了这一切的工作原理: