Главная » Микроконтроллеры
Призовой фонд
на август 2019 г.
1. 1000 руб
Паяльник
2. Тестер компонентов MG328
Паяльник
3. 200 руб.
От пользователей

Программирование математических операций

Беззнаковые целые числа

Эта глава главным образом будет посвящена арифметическим операциям над большими беззнаковыми целыми числами (подробней о различных форматах чисел смотри в приложении Б). В приложениях на AVR-микроконтроллерах наиболее часто приходится использовать 16-разрядные вычисления, которые достаточно легко программируются. Двухбайтовые числа предоставляют достаточно широкий диапазон представления переменных. Однако, встречаются задачи в которых необходимо применение чисел и с большей разрядностью (счётчики импульсов, накопители суммы, промежуточные результаты вычислений и т.д.).

Сложение

Реализовать многобайтовое сложение очень просто. Для этого имеется специальная команда adc Rd,Rr, которая складывает содержимое двух регистров и добавляет к полученной сумме бит переноса C из регистре SREG (Rd <- Rd+Rr+С). Этот бит устанавливается всегда, когда в результате предыдущей операции сложения возникает переполнение (т.е. бит C всегда является 9-ым битом результата операции сложения). Так может выглядеть сложение двух 16-разрядных чисел R17:R16 и R19:R18 (сумма размещается на месте второго слагаемого R19:R18):

     add   R18,R16  ;R18 <- R18 + R16  
     adc   R19,R17  ;R19 <- R19 + R17 + C                             

Необходимо помнить, что в результате сложения двух n-разрядных чисел возможно образование n+1-разрядной суммы. Например, в результате следующей операции сложения получим:
0xB2FF + 0xCC45 = 0x17F44 = 0x10000 + 0x7F44.

Сумма двухбайтовых слагаемых превысила максимальное 16-разрядное значение 0xFFFF = 65535 и вместо 0x17F44 = 98116 мы получили 0x7F44 = 32580. При этом должен установиться флаг C (17-тый разряд суммы), как признак того, что произошел перенос в старший разряд и к полученному результату необходимо добавить 0x10000 = 65536.

В регистре SREG имеется еще один бит непосредственно связанный с действием сложения. Это флаг половинного переноса H, который может использоваться в 4-разрядных вычислениях. Он носит тот же смысл, что и флаг C, но указывает на переполнение суммы младших полубайтов (т.е. перенос из третьего в четвертый разряды числа). Флаг H почти никогда не используется на практике.

Если для хранения результата вычисления не хватает РОНов, то сложение рационально производить с помощью косвенной адресации, а результат размещать в SRAM процессора. В этом случае разрядность слагаемых и вычисленной суммы будет ограничена только свободным местом в памяти данных.

Подпрограмма такого сложения:

; [YH:YL] = [YH:YL] + [XH:XL] 
; [YH:YL] – первое слагаемое при входе и сумма при
;   выходе (косвенно адресуется через YH:YL)
; [XH:XL] – второе слагаемое (косвенно адресуется через XH:XL)
; R16,R17,R18 – вспомогательные регистры
; composed1 – адрес 1-го слагаемого и
; полученной суммы в ОЗУ
; composed 2 – адрес 2-го слагаемого в ОЗУ 
; SIZE – размер слагаемых в байтах 
; на выходе в C находится старший разряд результата

add_indirect:
     ldi   YH,high(composed1) ;заносим в указатель Y адрес
     ldi   YL,low(composed1)  ;первого слагаемого composed1
     ldi   XH,high(composed2) ;заносим в указатель Y адрес
     ldi   XL,low(composed2)  ;второго слагаемого composed2 
     ldi   R16,SIZE
     clc   	       ;при первом входе в цикл C=0      
ad1: ld    R17,X+         
	 ld    R18,Y      ;поочерёдно складываем с учётом переноса 
	 adc   R18,R17    ;все байты слагаемых и заносим результат
	 st    Y+,R18     ;по адресу первого слагаемого
     dec   R16        
	 brne  ad1        ;повторяем сложение SIZE раз    
     ret                            

Перейти к следующей части:

Теги:

Котов Игорь Юрьевич Опубликована: 2012 г. 0 0
Я собрал 0 0
x

Оценить статью

  • Техническая грамотность
  • Актуальность материала
  • Изложение материала
  • Полезность устройства
  • Повторяемость устройства
  • Орфография
0

Средний балл статьи: 0 Проголосовало: 0 чел.

Комментарии (0) | Я собрал (0) | Подписаться

Статью еще никто не комментировал. Вы можете стать первым.
Добавить комментарий
Имя:
E-mail:
не публикуется
Текст:
Защита от спама:
В чем измеряется сила тока?
Файлы:
 
Для выбора нескольких файлов использйте CTRL

Pickit 2 - USB-программатор PIC-микроконтроллеров
Pickit 2 - USB-программатор PIC-микроконтроллеров
Arduino UNO Осциллограф DSO138
вверх