Организация задержки длительностью 1с — КиберПедия


Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Организация стока поверхностных вод: Наибольшее количество влаги на земном шаре испаряется с поверхности морей и океанов (88‰)...

Организация задержки длительностью 1с



 

Перед тем, как приступить к кодированию обратите внимание на цифры:

 

1с = 1000 млс;

1 млс = 1000 мкс;

 

Процессор изучаемого МК – 8 битный, и выполняет все команды за 0.2 мкс, кроме перехода, и тех, что изменяют значение программного счётчика. Ячейка памяти, составляет 1 байт или 8 бит, и может содержать значение 255, которое является наибольшим. Для организации задержки, лучше брать во внимание, только равные части, поэтому примем значение 250, как максимальное. Чтобы получить 1 мкс, нам необходимо 5 раз подряд сложить 0.2, то есть:

 

0.2 * 5 = 1 мкс

 

Чтобы получить четвертую часть секунды, необходимо отсчитать назад или вперед 250 000 раз, то есть:

 

250 мкс * 1000 раз = 250 000 мкс = 250 млс;

 

И в свою очередь, чтобы получить 1 секунду:

 

250 млс * 4 = 1 млс.

 

Функция задержки 1с во времени - программно может выглядеть так:

 

Dellay_1s: ; функция задержки прогр. способом

; длительностью на 1с

 

; загрузка данных

D2: movlw D'250' ; W = 250

movwf _250mcs ; 250 мкс

movwf _250mls ; 250 млс

 

movlw D'4' ;

movwf cntr_mcs ; 4 * 250 мкс = 1000 мкс = 1 млс

movwf cntr_mls ; 4 * 250 млс = 1 с

 

; 0.2 + 0.2 + 0.2 + 0.4 = 1 мкс

; 250 * 1 мкс = 250 мкс

 

D3: nop ; 0.2 мкс

decf _250mcs,f ; 0.2 мкс

btfss STATUS,Z ; 0.2 мкс - задержка на 250 мкс

; окончена ?

 

goto D3 ; 0.4 мкс - нет, продолжить

goto D4 ; да - перезагрузить данные

 

D4: movlw D'250' ; перезагрузка данных

movwf _250mcs ;

 

D5: decf cntr_mcs,f ; 4 * 250 мкс = 1000 мкс = 1 млс

btfss STATUS,Z ; задержка на 1 млс окончена ?

goto D3 ; нет - продолжить

goto D6 ; да - перезагрузить данные

 

 

D6: movlw D'4' ; перезагрузка данных

movwf cntr_mcs ;

 

 

D7: decf _250mls,f ; 250 мкс * 1000 = 250 000 = 250 млс

btfss STATUS,Z ; задержка на 250 млс окончена ?

goto D3 ; нет - продолжить

goto D8 ; да - перезагрузить данные

 

D8: decf cntr_mls,f ; 4 * 250 млс = 1000 млс = 1с

btfss STATUS,Z ; задержк на 1 с окончена ?

goto D3 ; нет - продолжить

 

return ; да - выход

;-------------------------------;

 

Хотя это и не самый наилучший вариант организации задержки программным способом длительностью 1с, но зато он наиболее простой для понимания. Изучите работу функции с помощью среды симулятора. Если взглянуть на задержку, при помощи окна Stopwatch, то станет очевидно, что она длилась немного больше, чем 1с – рис.9.3.

 

Рис.9.3 – окно Stopwatch автора, после 1с задержки

 

Всё верно, потому что небыли учтены команды перезагрузки данных, а также команды перехода. В целом это не очень существенно, если длительность во времени не слишком велика, однако при больших задержках, «хвостики в конце» могут перерасти в большие значения, чем сильно испортят безупречный алгоритм. Если возникло желание, можете слегка уменьшить значения циклов, чем подправите состояние функции.



Организовать задержку программным способ, длительностью 1с, можно иным образом, подойдя, с другой стороны проблемы.

 

1 с = 1000 млс = 1000 000 мкс;

 

Максимальное число, вмещаемое в 8 бит = 250.

 

1000 000 / 250 = 4000;

4000 / 250 = 16;

 

Программный вариант:

 

Dellay_1s: ; функция задержки прогр. способом

; длительностью на 1с

 

; общая формула:

; 1 000 000 / 250 = 4 000 / 250 = 16

D2: movlw D'250' ; W = 250

movwf _250mcs ; 250 мкс

movwf _250mls ; 250 млс

 

movlw D'16' ;

movwf cntr_1s ;

 

; 0.2 + 0.2 + 0.2 + 0.4 = 1 мкс

 

D3: nop ; 0.2

decf _250mcs ; 0.2

btfss STATUS,Z ; 0.2 - задержка окончена ?

goto D3 ; 0.4 - нет - продолжить

goto D4 ; да - перезагрузить данные

 

D4: movlw D'250' ; перезагрузка данных

movwf _250mcs ;

 

D5: decf _250mls ;

btfss STATUS,Z ; задержка окончена ?

goto D3 ; нет - продолжить

goto D6 ; да - перезагрузить данные

 

D6: movlw D'250' ; перезагрузка данных

movwf _250mls ;

 

D7: decf cntr_1s ;

btfss STATUS,Z ; задержка окончена ?

goto D3 ; нет - продолжить

 

return ; да - выход

 

Новый вариант не так понятен, зато занимает меньше места и практически, в точности, соответствует задержке в 1с. Возможно, вы придумаете свой вариант решения проблемы, и он будет ещё лучше и эффективнее.

У программных задержек есть множество недостатков, и даже самое большое их преимущество, в том, что они приносят какую-то пользу, не даёт право на существование. К отрицательным сторонам следовало бы причислить следующие:

· Долгий период разработки, расчётов, написания;

· Вся программа останавливается на период задержки, что делает её не эффективной и бесполезной;

· Приходиться прибегать к различным хитростям, чтобы достичь точности в работе;

· WDT таймер необходимо перенастраивать на период долгих задержек, чтобы не произошёл случайный сброс МК;

· Задержка во времени зависит от мощности процессора;

 

На первых этапах, такой подход к организации задержек покажется весьма эффективным, но существует куда лучший инструмент, который может работать параллельно с программой, имеет высокую точность, так что, ни одна доля секунды не пропадёт даром, и называется он – таймер. О нём вы узнаете из лабораторной работы № 11, а пока взгляните на задание из таблицы 9.1, и произведите расчёты, чтобы выполнить задачу и продвинуться дальше.



 






Кормораздатчик мобильный электрифицированный: схема и процесс работы устройства...

Поперечные профили набережных и береговой полосы: На городских территориях берегоукрепление проектируют с учетом технических и экономических требований, но особое значение придают эстетическим...

Индивидуальные и групповые автопоилки: для животных. Схемы и конструкции...

Опора деревянной одностоечной и способы укрепление угловых опор: Опоры ВЛ - конструкции, предназначен­ные для поддерживания проводов на необходимой высоте над землей, водой...





© cyberpedia.su 2017-2020 - Не является автором материалов. Исключительное право сохранено за автором текста.
Если вы не хотите, чтобы данный материал был у нас на сайте, перейдите по ссылке: Нарушение авторских прав. Мы поможем в написании вашей работы!

0.01 с.