Josef Valasek
EDN
При разработке систем на небольших микроконтроллерах доступные вам средства отладки программного кода могут быть очень ограниченными. В статье представлена простая отладочная программа для отображения одного двоичного байта на экране осциллографа. Программа использует один выход микроконтроллера.
Для отображения значения байта загрузите его в аккумулятор и вызовите программу, названную Debug. Значение байта, преобразованное в последоватеьную форму, будет выведено на вывод Test (Рисунок 1). Первым будет выводиться старший бит. Добавление коротких разделительных импульсов между одинаковыми битами упрощает восприятие информации. При необходимости посмотреть на осциллографе более одного байта, вызовите Debug еще раз.
![]() |
|
Рисунок 1. | Осциллограф говорит: «01000111». |
Ниже представлена версия для микроконтроллеров 8051. Программе не требуется оперативная память, и нужен единственный регистр R7. Время выполнения при стандартной для подобных контроллеров тактовой частоте 12 МГц составляет 76 мкс (включая вызов программы).
;*********************************************************************
;* *
;* Подпрограмма: Отладочная программа *
;* *
;* Вход: Байт данных в аккумуляторе *
;* *
;* Выход: Последовательность сигналов на выводе "Test" *
;* *
;* Используются: Аккумулятор, r7 *
;* *
;* Ассемблер: KEIL, A51 MACRO ASSEMBLER *
;* *
;*********************************************************************
Test bit P1.5 ; Выходной диагностический порт
public Debug
SGC_DEBUG SEGMENT CODE
RSEG SGC_DEBUG
Debug: push psw ; Сохранить слово состояния программы
mov r7,#9 ; Количество циклов
clr EA ; Запретить все прерывания
clr c ; Сбросить бит переноса
Loop: rlc a ; Сдвиг бита данных в C
jnc Zero
One: clr Test ; Начало вывода бита "1"
setb Test
djnz r7,Loop
Zero: setb Test ; Начало вывода бита "0"
clr Test
djnz r7,Loop ; Повторить для 9 битов
setb EA ; Разрешить все прерывания
pop psw ; Восстановить слово состояния программы
ret
END
Ниже показана версия для микроконтроллера PIC. Программа использует два байта памяти и два регистра.
;*********************************************************************
;* *
;* Подпрограмма: Отладочная программа *
;* *
;* Вход: Байт данных в W *
;* *
;* Выход: Последовательность сигналов на выводе "Test" *
;* *
;* Используются: W, C, TempCtr, TempData *
;* *
;* Ассемблер: Microchip, MPASM *
;* *
;*********************************************************************
list p=16F505,r=dec,c=93,n=63,st=OFF
#include "p16F505.inc"
#define Test PORTB,1 ; Диагностический порт
global Debug
TempCtr equ H'0E' ; Временный счетчик
TempData equ H'0F' ; Временные данные
DEBUG CODE
Debug movwf TempData ; Сохранить байт данных
movlw 9 ; Количество циклов
movwf TempCtr
bcf STATUS,C ; Сбросить бит переноса
Loop rlf TempData,F ; Сдвиг бита данных в C
btfss STATUS,C
goto Zero
nop
One bcf Test ; Начало вывода бита "1"
bsf Test
decf TempCtr,F
goto Loop
Zero bsf Test ; Начало вывода бита "0"
bcf Test
decfsz TempCtr,F
goto Loop
retlw 0
END
В качестве выхода очень удобно использовать вывод внутрисхемного программирования (ISP), поскольку это позволяет подключать щуп осциллографа непосредственно к контакту разъема.
Ссылки
- Peeters, Brad, PIC debugging routine reads out binary numbers, EDN, December 7, 2000, p.196