Теперь проверим правильность выхода из цикла loop. Для этого поставим точку останова на строке goto start, а точку останова на строке incfsz Count,F удалим. Проверим работу программы в режиме Animate. По изменению содержимого регистра Count в окне просмотра убеждаемся в корректности работы программы. Для ускорения проверки переключимся в режим прогона Run. Выполнение программы остановится на строке goto start. Значение переменной Count будет равно нулю, что подтверждает правильность выполнения условия выхода из цикла loop. Содержимое регистра STATUS при этом не изменилось, т.е. флаг Z – признак нулевого результата остался сброшенным. Это тоже правильно, так как команда incfsz не влияет на флаги микроконтроллера.
3.11. Окно секундомера
Часто требуется знать время выполнения отдельных участков или всей программы. Симулятор MPLAB SIM позволяет измерить реальное время выполнения программы с помощью окна секундомера (Stopwatch).
Допустим, что нас интересует время выполнения программы из рассматриваемого примера от момента сброса микроконтроллера до момента окончания цикла loop. С этой целью произведите сброс МК и установите точку останова на строке goto start. Используя пункт меню Debugger > StopWatch, откройте окно секундомера. Затем запустите программу в режиме Run. После останова программы окно секундомера примет вид, приведенный на рис. 8.
Рис. 8. Окно секундомера после останова программы
При тактовой частоте работы МК, установленной 20 МГц по умолчанию, время выполнения данного участка программы будет равно 148,8 мкс, а количество машинных циклов - 744. Изменить тактовую частоту МК можно с помощью пункта меню Debugger > Settings, выбрав вкладку Osc/Trace.
Задание. Установите тактовую частоту работы МК равной 4 МГц и определите время выполнения программы.
3.12. Отладка подпрограмм
Отладку программ, содержащих подпрограммы, удобно выполнять с использованием трех вариантов пошагового режима:
1) режим Step Into, в котором исполняется одна команда программы, в том числе и команды подпрограммы. После каждого шага все окна обновляются;
2) режим Step Out, в котором производится ускоренное завершение выполнения подпрограммы и останов на команде, следующей за командой вызова call. В окнах будут результаты выполнения подпрограммы;
3) режим Step Over, в котором исполняются только команды основной программы без захода в подпрограммы. Если очередная команда будет вызовом call, то выполняется ускоренное выполнение подпрограммы и останов на команде, следующей за call. В окнах будут результаты выполнения подпрограммы.
Задание 1. В открытом окне MPLAB IDE создайте новый файл и занесите в него текст программы incr, которая выполняет бесконечный цикл увеличения на 1 (инкремента) содержимого регистра Sum. Инкремент производится через определенное время, задаваемое подпрограммой задержки delay.
;****************************************************************
; incr – программа инкрементирования содержимого регистра Sum
;******************************************************************
list p=16f84a
#include<p16f84a.inc>
__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC
Count equ 0x0C ; регистр-счетчик циклов
Sum equ 0x10 ; регистр-накопитель суммы
org 0x000
begin clrf Sum ; очистить регистр Sum
again incf Sum,F ; инкремент содержимого регистра Sum
call delay ; вызов подпрограммы delay
goto again ; бесконечный цикл инкремента регистра Sum
delay ; подпрограмма временной задержки
movlw .100
movwf Count ; загрузить в регистр Count число повторений 100
loop decfsz Count,F ; декремент Count и проверка его на нуль
goto loop ; переход на метку loop, если не нуль
return ; возврат из подпрограммы
end ; конец текста программы
Сохраните файл в вашей папке под именем incr.asm. Выполните компиляцию полученного файла с помощью пункта меню Project > Quickbuildincr.asm и убедитесь в ее правильности. Затем подключите симулятор MPLAB SIM с помощью пункта меню Debugger > SelectTool > MPLABSIM .
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.