\
МИКРОКОНТРОЛЛЕРЫ
l
А лександр Черном ы рдин
г. Магнитогорск
E-mail: chav1961 ©radioliga.com
Эта статья, в основном, носит технический характер, поскольку без
рассмотрения затронутых в ней вопросов невозможен дальнейший
разбор материала. В силу этого большая часть программного кода,
рассматриваемого в этой статье, выложена на сайт журнала (файл
e x a m p le l .zip),
и на него просто даны ссылки в соответствующих
местах статьи с краткими комментариями.
П
р
о
г р
а
м
м
и
р
о
в а
н
и
е
м
и
к р
о
к о
н
т р
о
л
л
е
р
о
в .
Р
а
с ш
и
р
е н
н
а
я
а
р
и
ф
м
е
т и
к а
- Гоги, сколька будэт пятью пят?
- (подумав) Двацат восэм, учител.
- Нэправильна, Гоги. Пятью пят будэт двацат пят.
.. Или двацат шест.
.. Но ныкак нз двацат восем!
“Бородатый” анекдот.
В данной статье речь пойдет о том,
каким образом реализовываются
на микроконтроллерах сложные
арифметические операции. Внима-
тельный читатель, вероятно, уже за-
метил, что в системе команд мик-
роконтроллера из арифметических
операций присутствуют только опе-
рации сложения и вычитания. Меж-
ду тем, довольно часто в програм-
мистской практике возникает необ-
ходимость в выполнении более
сложных операций, например, ум-
ножения и деления. Команд аппа-
ратного умножения и деления в
большинстве микроконтроллеров
нет, а в тех микроконтроллерах, где
эти команды реализованы, они, как
правило, обрабатывают только
8
-
битные числа, что для многих при-
ложений оказывается недостаточ-
ным. И еще одна проблема, которая
часто возникает при работе с мик-
роконтроллерами - перевод чисел
из одной системы представления в
другую: дело в том, что в микрокон-
троллере все данные хранятся в
add
%аО,%аХ
adc
%al
add
%al,.%аЗ
Обратите внимание на команду adc
- она складывает содержимое ячейки
%а1
с содержимым флага переноса,
т.е. выполняет ту же роль, что и сигнал
add
%a0,%a4
adc
%al
adc
%a2
adc
%a3
add
%al,%a5
виде двоичных чисел, между тем,
как человек привык работать с де-
сятичной системой счисления. Если
микроконтроллер выводит какое-
либо число на семисегментный ин-
дикатор или ЖКИ, его необходимо
сначала преобразовать из набора
двоичных нулей и единиц в привыч-
ный для человека десятичный вид,
а при вводе числа (например, с кла-
виатуры), наоборот, преобразовать
введенное десятичное число в дво-
ичное представление. Ниже будут
приведены примеры выполнения
операций умножения, деления и пре-
образования чисел из одной систе-
мы счисления в другую, а также при-
меры арифметических операций над
числами, имеющими размер более
одного байта. Во всех примерах
предполагается, что обрабатывае-
мые многобайтные числа хранятся
в ОЗУ микроконтроллера “младши-
ми байтами вперед”, т.е. если число
занимает два байта, младший его
байт хранится, например, в ячейке
%аО,
а старший - в
%а1.
переноса в многодекадных счетчиках.
Результат операции сложения образу-
ется на месте первого из слагаемых.
А вот как выглядит сложение чисел,
С л о ж е н и е и вы чи тани е
м ногоб ай тн ы х чисел
Если в микроконтроллере необходимо
хранить и обрабатывать числа величи-
ной более 255, то такие числа хранят
не в одном, а в нескольких подряд рас-
положенных байтах. В двух байтах мож-
но хранить число величиной не более
65535, в трех байтах - около 16 млн., в
четырех - около 2 млрд, (и т.д.). Чтобы'
выполнять над такими числами опера-
ции сложения и вычитания, в аппара-
туре любого микроконтроллера в реги-
стре состояния существует специаль-
ный флаг - флаг переноса С. Флаг пе-
реноса при выполнении таких операций
играет ту же роль, что и сигнал перено-
са в многодекадных счетчиках (напри-
мер К555ИЕ7). Допустим, что нам не-
обходимо сложить два двухбайтных
числа. Первое из них находится в ячей-
ках
%аО, %а1
, второе - в ячейках
%а2,
%аЗ,
причем младшие части чисел хра-
нятся в ячейках
%аО
и
%а2
соответ-
ственно. Для того, чтобы их сложить,
необходимо выполнить следующие
действия:
хранящихся в виде четырех байт (пер-
вое число - ячейки с
%аО
по
%аЗ,
вто-
рое - с
%а4
по
%а7):
Сложить младшие байты чисел.
Распространить перенос на следующий байт суммы.
Распространить перенос на следующий байт суммы.
Распространить перенос на следующий байт суммы.
Сложить следующие байты чисел.
; Сложить младшие байты чисел.
; Распространить перенос на старший байт суммы.
; Теперь сложить старшие байты чисел.
38 |
| Радиолюбитель - 03/2006
предыдущая страница 37 Радиолюбитель 2006-03 читать онлайн следующая страница 39 Радиолюбитель 2006-03 читать онлайн Домой Выключить/включить текст