Однокристальные PIC-микроконтроллеры. Технология разработки и отладки программ для микроконтроллеров PIC16, страница 13

list p=16f84a

#include<p16f84a.inc>

__CONFIG _CP_OFF & _WDT_OFF & _PWRTE_ON & _HS_OSC

Count         equ          0x0C     ; счетчик  ячеек массива памяти данных

Numder      equ          0x0F     ; количество ячеек

Base            equ          0x10    ; начальный адрес массива

Const1        equ          0x01    ; значение константы 1

Const2        equ          0x08    ; значение константы 2

Const3        equ          0x0A    ; значение константы 3

org          0x000

begin

movlw    Number

movwf    Count    ; загрузить в счетчик количество ячеек

movlw    Base

movwf    FSR          ; загрузить в регистр FSR начальный адрес

; массива

movlw    Const1  ; загрузить в регистр W константу Const1

call         fill_reg     ; вызов подпрограммы fill_reg

movlw    Numder

movwf    Count   ; загрузить в счетчик количество ячеек

movlw    Base

movwf    FSR          ; загрузить в регистр FSR начальный адрес

; массива

movlw   Const2   ; загрузить в регистр W константу Const2

call         fill_reg      ; вызов подпрограммы fill_reg

movlw   Number

movwf   Count    ; загрузить в счетчик количество ячеек

movlw   Base

movwf   FSR          ; загрузить в регистр FSR начальный адрес

; массива

movlw   Const3  ; загрузить в регистр W константу Const3

call        fill_reg     ; вызов подпрограммы fill_reg

goto       begin        ; идти на начало программы

fill_reg                                      ; подпрограмма заполнения ячеек памяти

; данных константой

movwf   INDF       ; пересылка содержимого рабочего регистра W

; в ячейку памяти данных, адрес которой находится в регистре  FSR

incf        FSR,F      ; инкремент регистра FSR

decfsz    Count,F ; декремент регистра COUNT и проверка на нуль

goto       fill_reg     ; цикл, если не нуль

return                     ; возврат из подпрограммы

end                         ; конец текста программы

     Задание 1. В открытом окне MPLAB IDE создайте новый файл и занесите в него текст рассмотренной программы. Сохраните файл в вашей папке под именем fill.asm. Выполните компиляцию полученного файла, затем выберите симулятор MPLAB SIM. Откройте окно File Registers. Затем произведите сброс микроконтроллера.

Отладку подобных программ удобно выполнять с использованием трех вариантов пошагового режима:

1)  режим Step Into, в котором исполняется одна команда программы, в том числе и команды подпрограммы. После каждого шага все окна обновляются;

2)  режим Step Out, в котором производится ускоренное завершение выполнения подпрограммы и останов на команде, следующей за командой вызова  call. В окнах будут результаты выполнения подпрограммы;

3)  режим Step Over, в котором исполняются только команды основной программы без захода в подпрограммы. Если очередная команда будет вызовом  call, то выполняется ускоренное выполнение подпрограммы и останов на команде, следующей за  call. В окнах будут результаты выполнения подпрограммы.

Сначала проверьте работу программы в режиме Step Into. Сделайте около 10 шагов с заходом в подпрограмму. По изменению содержимого ячеек, начиная с адреса 0x10, убедитесь в правильности работы.

Затем сделайте шаг в режиме Step Out. Убедитесь, что произошел останов выполнения программы на команде  movlw  Number, во всех ячейках с адресами 0x10 – 0x1F появились значения 0x01, т.е. подпрограмма  fill_reg  полностью выполнена. Дальнейшее продвижение по программе в режиме Step Out невозможно, так как он выполняется только внутри подпрограммы.