assembly 16位数字转换成数字用于led显示

8nuwlpux  于 2022-11-13  发布在  其他
关注(0)|答案(1)|浏览(138)

我正在用汇编语言在atmega328p上设计一个计算器,在完成计算后,我需要将结果分离成数字,并在LED矩阵上显示。到目前为止,我写了一个代码,用一个8位数字来完成这一工作(一个寄存器)并且工作正常。但是,当我开始使用两个寄存器来处理数字的高位和低位部分时,我无法给出一个执行相同操作的代码。
用于处理8位数代码附在下面:

ldi r19, 0
HUNDS:
cpi resL, 100    ;compare low part of the result register with 100
brlo TENS
subi resL, 100
inc r19
rjmp HUNDS

TENS:         
st x+, r19    ;store hundreds counter in buffer for screen display (will be displayed on first screen block)
ldi r19, 0    ;reset counter for tens

TENS_Test:
cpi resL, 10
brlo UNITS
subi resL ,10
inc r19
rjmp TENS_Test

UNITS:
st x+, r19     ; store tens counter
st x+, resL    ; store units digit
sd2nnvve

sd2nnvve1#

如果您希望遵循您方法,则有一个循环如下所示

ldi zl, low(10000)
         ldi zh,high(10000)

         ldi r19, 0
loop:
         cp  resL, zl
         cpc resH, zh
         brlo endLoop
         sub resL, zl
         sbc resH, zh
         inc r19
         rjmp loop
endLoop:

但这不是一个好方法。更好的方法是使用除以10,并以相反的顺序保存余数。您不需要重新设计除法例程。您可以在Atmel应用说明AVR200中找到它:乘法和除法例程。
description is here
source is here

相关问题