Главная » Микроконтроллеры
Призовой фонд
на май 2017 г.
1. Тестер компонентов MG328
Паяльник
2. Осциллограф DSO138
Паяльник
3. Регулируемый паяльник 60 Вт
Паяльник
4. 100 руб.
От пользователей

Похожие статьи:


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

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

Эта глава главным образом будет посвящена арифметическим операциям над большими беззнаковыми целыми числами (подробней о различных форматах чисел смотри в приложении Б). В приложениях на 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-микроконтроллеров
Осциллограф DSO138 МиниПК MK809V - 4 ядра, Android 4.4.2
вверх