gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:49:29 26 4
gpt4 key购买 nike

我正在尝试学习使用 MPLAB X 和 PIC18F1320 微 Controller 进行汇编编程。我一直在遵循 MPASM 用户指南 (http://ww1.microchip.com/downloads/en/DeviceDoc/33014J.pdf),并从我的微 Controller 上的 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 指令只允许您将值从寄存器复制到工作寄存器。

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

这个网站有一个在线 PIC 模拟器和教程,更详细地解释了这一切是如何工作的:

http://www.microcontrollerjs.com

关于assembly - 如何将变量的值移动到汇编中的另一个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29090083/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com