EN / RU
некоторые распространенные приемы программирования.
 
Здесь я хочу кратко рассмотреть некоторые общие приемы программирования,
которые применяются при программировании микроконтроллеров.
Практические примеры будут на ассемблере 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
 
 



Комментарии пользователей:

Mally2012-04-10 08:36:13
That\'s the best anwesr of all time! JMHO

Bailey2013-09-08 16:14:34
Wonderful exatonplian of facts available here.

Dolley2016-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?



Добавить комментарий:

Имя:   
Текст:




Внимание! При перепечатке эта ссылка обязательна!