Увидел обсуждение на сайте журнала.
Заинтересовался. Удивился, что устройство с программой все же работает.
Несмотря на ошибки в программе.
Загрузил текст программы vodomer.asm в MPLAB 8.92
При компиляции выдается предупреждение:
Message[301] ... : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Это вызвано ошибкой в программе. Там написано:
list p=16F84
#include <p16F84.inc>
Сначала автор указал что программа для PIC16F84, а потом, что PIC16F84A.
Вот компилятор и ругается.
Нужно в обоих строках указать один тип контроллера.
Полезно скопировать файл p16F84.inc в рабочую папку.
Тогда в него будет удобно заглядывать. Станет понятно, что
можно было не делать лишнюю работу давая определения
Timer0 equ 01h
Status equ 03h
PortA equ 05h
TrisA equ 05h
PortB equ 06h
TrisB equ 06h
IntCon equ 0Bh
OptionR equ 01h
Ибо похожие определения есть в p16F84.inc.
С симуляцией проекта в PROTEUS возникли проблемы из-за индикатора МТ—16S2D .
Как написано в даташите он совместим с HD44780 фирмы HITACHI и KS0066 фирмы SAMSUNG
(кроме работы в 4-х битном режиме). А именно этот режим и использован.
Для моделирования взят индикатор LM016L полностью совместимый с HD44780.
Результат моделирования - устройство работает, но отображается только одна (верхняя) строка.
Вместо кириллицы - крякозябры ибо в LM016L нет кириллицы.
На кнопки устройство реагирует. Числа в верхней строке отображаются правильно и при нажатии
кнопок меняются.
При работе протеус выдает множество сообщений об ошибках.
Stack overflow executing CALL instrucrion.
Stack overflow executing CALL instrucrion.
Stack overflow executing CALL instrucrion.
Stack overflow executing CALL instrucrion.
.....
Это вызвано ошибкой в фрагменте программы
;=============================================
;Опрос кнопок.
;=============================================
Key
btfss PortB,Plus1 ;Опрос кнопки 1
goto N10 ;прибавить 1 к холодной
btfss PortB,Minus1;Опрос кнопки 2
goto N2 ;вычесть 1 из холодной
btfss PortB,Plus2 ;Опрос кнопки 3
goto N30 ;прибавить 1 к горячей
btfss PortB,Minus2;Опрос кнопки 4
goto N4 ;вычесть 1 из горячей
call Key
Процедура бесконечно вызывает сама себя, что и ведет к переполнению стека.
Для исправления ошибки нужно заменить строку
call Key
на строку
goto Key
По ссылкам на исправленные версии программы скачать не мог. Вероятно автор удалил файлы.
По этой причине ничего сказать об ошибках не могу.