我正在编写一个子程序来计算wreg中的set位数,但是在到达子程序末尾的return语句时,它只是无休止地重复return语句。我是PIC和汇编的新手,所以我确定我刚刚做了些傻事,但我还没有能够解决它。任何帮助将不胜感激。
这是我的代码:
COUNT equ 0x00
NUMBER equ 0x01
BITS equ 0x02
;bitcounter subprogram counts the number of set bits in a byte
BITCOUNTER:
Loop1 rlcf NUMBER,f ;rotates one bit of number into carry flag, store rotated number
btfsc STATUS, C ;skips next line if carry is clear
incf COUNT, f ;add one to count, store in count
bcf STATUS, C ;clear carry flag
decfsz BITS
goto Loop1
movf COUNT, 0 ; put bit count into W register
return
START
movlw 0x0008
movwf BITS
movlw 0xF2
movwf NUMBER ;stores input as "number"
call BITCOUNTER
end
答案 0 :(得分:2)
我是PIC编程新手并且尚未向PIC上传任何代码(仍在等待程序员交付)但我认为最后的“goto start”解决了问题,因为PIC需要做一些东西。 “goto start”指令将PIC置于循环中,因此不必尝试“停止”。在它缺席的情况下,我认为PIC正试图通过简单地无限期地重复最后一条指令来处理“无法停止”。
如果是这样,你可以选择添加类似的东西(假设我已将其设置为正确):
loop2 nop
goto loop2
代码末尾。在重置PIC之前,PIC将继续运行无操作(或者您可以根据需要设置中断,WDT或其他一些功能)。
答案 1 :(得分:1)
试试这个......
include "p18f452.inc" ;from dir X:\Program Files (x86)\Microchip\MPASM Suite
COUNT equ 0x00
NUMBER equ 0x01
BITS equ 0x02
;bitcounter subprogram counts the number of set bits in a byte
org 0
START
movlw 0x0008
movwf BITS
movlw 0xF2
movwf NUMBER ;stores input as "number"
call BITCOUNTER
goto START
BITCOUNTER:
Loop1 rlcf NUMBER,f ;rotates one bit of number into carry flag, store rotated number
btfsc STATUS, C ;skips next line if carry is clear
incf COUNT, f ;add one to count, store in count
bcf STATUS, C ;clear carry flag
decfsz BITS
goto Loop1
movf COUNT, 0 ; put bit count into W register
return
end
请记住,没有MCPU配置设置,如振荡器,看门狗...... 只是测试代码!