我正在尝试使用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 ;/
谢谢!
答案 0 :(得分:1)
在PIC18器件上,您可以使用movff
指令执行以下操作 - 在两个寄存器之间复制一个值。 movf
指令只允许您将寄存器中的值复制到工作寄存器中。
此外,您在计划开始时对movlw
和movwf
说明的排序也会重新排在前面。您调用movlw
将程序存储器中的常量值加载到工作寄存器中,然后movwf
将该值从工作寄存器复制到数据存储器中。
该网站有一个在线PIC模拟器和教程,可以更详细地解释这一切的工作原理: