Обучение : Программирование на Ассемблере для PIC


Задержки в программе и их расчёт

Задержка – это сегмент программы, который ничего не делает, но обеспечивающий временной простой в ходе выполнения программы на определенное время. Разберем классический пример, обеспечивающий задержку на 10 машинных циклов (10 мкс):

 

Reg_1       equ         H0010

;...

            movlw       .3

            movwf       Reg_1

wr          decfsz      Reg_1, 1

            goto        wr

 

1я строчка – определяем в "шапке" адрес регистра под число.

2я – записываем число 3 в аккумулятор W.

3я – копируем из аккумулятора в Reg_1.

 

Это были подготовительные моменты. Далее собственно сама задержка.

 

4я строчка – уменьшить Reg_1 на единицу и результат сохранить Reg_1.

5я строчка – переход по метке wr на четвертую строчку.

 

Очевидно, что 4я и 5я строчка в цикле выполнятся 2 раза. Тогда где обещанные 10 машинных циклов? Дело в том, что команды, связанные с переходами на другие команды, выполняются за 2 машинных цикла. Теперь всё сходится.

А если нам надо обеспечить задержку не в 10 мкс, а 11 мкс? Тогда достаточно в самом конце кода дописать строчку с командой NOP (пустышка), которая как и большинство команд выполняется за 1 мкс.

А как быть если нам нужна задержка для мигалки на 0,5 сек или на 1 сек? Тогда нам надо написать код, который будет занимать 500000 и, соответственно, 1000000 машинных циклов. И это очень просто. Скачиваем программу Pause_2, которая выдаёт код по заданному количеству машинных циклов.

 


<<< назад далее >>>

Просмотров: 43084

 








 
 
 

В русском Интернете бестолку защищать свои права. Хотите использовать материалы - используйте,
но с письменного согласия авторов. В противном случае будут высланы соответствующие письма
в поисковые системы об ограничении индексации ваших сайтов. Не доводите до греха.