Если ваш процессор не имеет инструкции деления (или инструкции преобразования BCD, что было бы иначе), вам просто нужно будет выполнить повторное вычитание.Псевдокод для этого будет выглядеть примерно так:
val = 47
units = val
tens = 0
loop:
if units < 10 goto done
units = units - 10
tens = tens + 1
goto loop
done:
;; tens = 4, units = 7.
Извиняюсь за довольно базовый стиль кодирования, я просто попытался сделать его немного ближе к тому, как это будет выглядеть на языке ассемблера.В противном случае, я бы использовал цикл while
: -)
Модуль Тхо - это то, что осталось в переменной units
, когда оно опустится ниже десяти.
Для полноты (и, возможно, дополнительных отметок)если это домашнее задание, подтолкнуть, подмигнуть, подмигнуть), поскольку один октет может обрабатывать до 255:
val = 247
units = val
tens = 0
hundreds = 0
loop1:
if units < 100 goto loop2
units = units - 100
hundreds = hundreds + 1
goto loop1
loop2:
if units < 10 goto done
units = units - 10
tens = tens + 1
goto loop2
done:
;; hundreds = 2, tens = 4, units = 7.
В качестве доказательства того, что этот метод работает, вы можете попробовать следующий код Python:
val = 47
units = val
tens = 0
while units >= 10:
units = units - 10
tens = tens + 1
print "Tens = %d, Units = %d"%(tens,units)
, который действительно выводит:
Tens = 4, Units = 7
С точки зрения использования этих значений для управления светодиодным устройством, простая таблица поиска, вероятно,простой.Создайте массив значений, которые необходимо записать в два 8-разрядных адреса памяти, а затем используйте цифру для поиска этих значений для записи на устройство.
Я буду использовать упрощенный семисегментный светодиод (плюсдесятичная точка), так как это легче понять:
a
---
f | | b
-g-
e | | c
--- . h
d
Предположим, что в этом примере вы записываете один байт abcdefgh
в отображаемую в память ячейку, а биты в этом байте управляют тем, какие сегменты включены.
Значения для различных цифр (без десятичной точки) являются (не проверенными, поэтому может потребоваться некоторая подстройка):
abcdefgh
0 11111100
1 01100000
2 11011010
3 11110010
4 01100110
5 10110110
6 10111110
7 11100000
8 11111110
9 11110110
Учитывая значение четыре, вы просто посмотрите байтсо смещением 4 в этой таблице (используя простое добавление базового адреса таблицы и значения), затем извлеките этот байт из памяти и используйте его для установки сегментов светодиода.Это значение 01100110
будет устанавливать сегменты b
, c
, f
и g
, давая вам:
| |
---
|
Ваша конкретная ситуация немного сложнее, так как у вас есть пятнадцать-сегментный светодиод и нужно написать слово, а не байт, но теория точно такая же.
Иметь таблицу значений, которую нужно записать для каждой цифры, и использовать значения, рассчитанные по моему алгоритму выше, длясмещение в эту таблицу.