некоторые распространенные
приемы программирования.
Здесь я хочу кратко рассмотреть
некоторые общие приемы программирования,
которые применяются при
программировании микроконтроллеров.
Практические примеры будут на ассемблере MCS - 51,
однако поскольку приемы самые общие, то их с успехом
можно применять
не только при программировании встраиваемых систем, но
также и
в любых других языках и системах
программирования.
Прием 1. МАСКИРОВАНИЕ.
Допустим, вам нужно проверить на (0 или
1) какой-либо один бит в регистре,
а система, в которой вы программируете не позволяет
вам обращаться
к отдельным битам в регистре или переменной. Тогда
лучшее,
что вы можете придумать - это использование маски.
Возьмем, например, 8 - битный регистр МCS - 51,
и попытаемся проверить
в нем 3-ий бит. Для этого пишем специальную маску, в
которой занулим все биты
кроме 3-го. И сложим эту маску с числом по логическому
И.
исходное число (произвольное)
00010101
маска
- 00001000
--------------------------------------------------
результат
-
00000000
После этого результат проверяем на нуль. Он будет
равен нулю, если в исходном
бите на этом месте стоял нуль. Если была единица, то
результат будет любым числом
(в зависимости от того, какой бит проверяем). В
этом случае нам плевать,
какое там число, - главное, что не ноль.
В ассемблерных кодах это будет выглядеть примерно
так:
mov A,#00010101
anl A,#00001000
jz M1 (M1 -
адрес, куда нам надо в случае, если в исходном бите 0)
Прием маскирования можно с успехом применять для
перемены местами двух бит, например, 3 и 5.
Для этого пишем соответствующую
маску, и складываем её по
операции XOR:
mov A,#11110111
XRL A,#00101000
В результате аккумулятор будет содержать
число 11011111 в котором биты 5 и 3
поменялись местами.
Операция XOR вообще замечательная - в компьютерной
графике её любят использовать
для вывода на экран спрайтов. Тоесть при первом
сложении по XOR битовой маски и
пикселей экрана на экране появляется спрайт, а при
повторном наложении битовой маски он исчезает.
Простенько и со вкусом :)) В API
есть даже специальная функция для этого -
битблит (bitblt, или что-то в этом духе).
Прием 2. ПОЛЬЗОВАТЕЛЬСКИЙ
ФЛАГ
Предположим, что вам нужно отловить первый вызов
какой-нибудь функции, и
выполнить какие-то действия только когда функция
вызывается в первый раз.
А при последующих вызовах этот блок кода должен
пропускаться.
Самым простым решением будет установка
пользовательского флага.
То есть - выделяете регистр и записываете в него ноль.
При первом вызове проверяете этот регистр, делаете,
что вам нужно
и затем записываете в него единицу. Так как там теперь
единица, больше
этот кусок кода выполняться не будет.
Разное:
Помимо стандартно предусмотренных для этого команд,
любой цикл можно всегда
организовать и вручную, например так:
mov R5,#10 ;число повторений
цикла.
m1:
.......
;тело цикла
dec R5
mov A,R5
jnz m1
В ассемблере МCS - 51 для организации циклов есть
специальная команда,
например, тот же цикл будет выглядеть так:
mov R5,#10
m1:
-----
djnz R5,m1
Если вы хотите зациклить программу в петле ожидания,
то это можно сделать
ссылкой саму на себя:
jmp $
Это всё на мой взгляд вроде бы очень простые приемы,
однако у начинающих
почему-то частенько вызывают затруднения.
Kennobi 20.06.05
Комментарии пользователей:
Mally | 2012-04-10 08:36:13 |
That\'s the best anwesr of all time! JMHO |
Bailey | 2013-09-08 16:14:34 |
Wonderful exatonplian of facts available here. |
Dolley | 2016-07-04 07:25:17 |
Check with the Small Business Administration in your area. They are sure to help you. You might also check into Government Grants to start your own bus.iessnReferences : Was this answer helpful? |