Свежие обсуждения
Микроконтроллеры

В.Трошков Термометр на DS1821 и PIC16F84A (Радио 2002 №5)

1 3

Доброго времени суток!
Собрал вышеназванную схему, все заработало сразу. Программатор EXTRA-PIC, программа IC-Prog 1.06B.
Но, так как использовал имеющийся двухстрочный ЖКИ PC1602F без русских символов, то вместо «Ул.» и «Дом» на экране отображаются иероглифы. Термометр собирал для автомобиля, поэтому хотелось-бы сделать надписи на латинице «ULICA» и «SALON» соответственно. Нашел инструкции на HD44780 с соответствующими таблицами кодов символов, заменил их в файле termo.asm (с сайта журнала Радио), откомпилировал заново в MPLAB IDE v.7.42 (ошибки отсутствовали), но экран индикатора термометра чистый. Заливаю в PIC первоначальную программу – все работает.
Это моя первая конструкция на микроконтроллере, опыта программирования вообще нет. Если кто-то может помочь доработать исходный текст программы, то выкладываю исходный и измененный тексты программы.

180527.zip

 

DISPLAY:
LINE1
movlw 055 ; "U"
call SENDD
movlw 04C ; "L"
call SENDD
movlw 049 ; "I"
call SENDD
movlw 043 ; "C"
call SENDD
movlw 041 ; "A"
call SENDD

movlw ' ' ; Пробел
call SENDD

movf SIGN1,w ; Изображение "+" или "-"
call SENDD

movf T_C,w
call BINBCD ; Преобразование к десятичному виду
movf MSD,W ; Изображение десятка градусов
addlw 30
call SENDD
movf LSD,W ; Изображение единиц градусов
addlw 30
call SENDD

movlw 0 ; Изображение символа градусов
call SENDD
movlw ' ' ; Пробел
call SENDD
return

-------------------------------------------------------------------------

055 - это с шеснадцатиричном виде, то же 0x55
.55 - это в десятичном виде

Это сдвиг по кодировочной таблице для цифр
addlw 30
call SENDD

 

по какой-то причине у вас не правильно компилируется проект -
для начала добейтесь чтоб после компиляции "журнального" проекта, .hex был одинаковый с журнальным.
---
у вас начинаются ошибки С первой строчки (смотреть .hex в программаторе) -
в "журнальной прошивке - 2805 - соответствует : goto 0x05
в вашей - 2821 - сооответствует : goto 0x21
т.е. в вашей прошивке вы пропускаете инициализацию, начинающуюся по адресу 0х05

 

AnSi:
чтоб после компиляции "журнального" проекта, .hex был одинаковый с журнальным
Я, в данном случае, делаю наоборот.
Деассемблирую хекс, а затем нахожу нужное место, и вношу коррективы.

P.S.: Деассемблер есть в том же IC-Prog'е, но я пользуюсь отдельной програмкой (специально для ПИКов, 236Kb). Если кому надо, пишите gregoryrсобакаimailточкаru.

 

Gregory: Деассемблирую хекс, а затем нахожу нужное место, и вношу коррективы.

как не крути, компилировать придётся, а компилятор у него глючит.

 

компилятор у него глючит
М-да.. С таким не сталкивался. МПЛАБ никогда ещё не подводил.
Может стоит версию обновить? Всё-таки 8-я уже давно вышла.

 

компилить должна и 5-я
может у него комп глючит или вирусов нахватался или...

 

Спасибо всем откликнувшимся.
Когда пытаюсь откомпилировать журнальный вариант termo.asm, MPASM тоже выдает кучу ошибок: Error[113] : Symbol not previously defined (sendi) (использование не определенной переменной). Можно ли отключить проверку ошибок, или может воспользоваться другим компилятором – попроще?

 

это издержки "старой" версии компилятора - программа писалась в 2001году
"старый" не понимал разницы между sendi - SENDI - а новый теперь ругается на такую небрежность
это легко поправить - перепишите все "ошибки" одинаково(одинаковыми буквами)

 

Добавил описания переменных в журнальном варианте файла termo.asm, больше ничего не делал. При компиляции теперь не ругается, полоска зеленая, но все равно этот файл в начале:
:020000040000FA
:020000002528B1
:08000800B4298501860183166D
отличается от журнального варианта:
:020000000528D1
:08000800B4298501860183166D
концовки файлов одинаковые. Может в MPLAB что-то не настроено?