Assembly 如何移动变量';将值转换为程序集中的另一个变量
我正在学习使用MPLAB X和PIC18F1320微控制器进行汇编编程。我一直在遵循MPASM用户指南(),并且从我的微控制器上的RB0引脚得到一个LED闪烁。我写了一个程序,让LED每512次闪烁一次。我很难弄清楚如何将延迟从512更改为变量,以便在代码中的其他地方更改它。理想情况下,该行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
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模拟器和教程,详细介绍了这一切的工作原理:
谢谢你,它现在可以用了,我一定要去看看那个网站