MPLAB в вопросах и ответах
Re: HEX из проэкта MPLAB
Вот проект, который выкладывал ранее. В Proteus работает. В EEPROM загружены 42 в ячейки начиная с 20h до 27h. Это соответствует коду 00000000. Нажмите при симулировании в Proteus на паузу и Вы увидите.

- Вложения
-
- prohivka.zip
- (32.15 КБ) 317 скачиваний
-
- 11.png
- (8.08 КБ) 1568 скачиваний
Re: HEX из проэкта MPLAB
Да через пару часов попробую на реальном железе,в протэусе все работает,менял код-все тоже отлично
В роде понял где мой косяк.....
[color=#FFBF80][i]Существует по большому счету две неисправности-есть контакт где он не нужен,и нет контакта где он нужен[/i][/color]
Re: HEX из проэкта MPLAB
Всё заработало в железе!!! Всем спасибо,Soir отдельное Огромное спасибо 

[color=#FFBF80][i]Существует по большому счету две неисправности-есть контакт где он не нужен,и нет контакта где он нужен[/i][/color]
MPLAB не поддерживает pic12f629
Установленный MPLAB не поддерживает 12f629, хотя формально этот проц в списке пакета есть. Что делать? Подскажите как с помощью MPLAB из hex-файла получить исходник .asm?
Re: MPLAB не поддерживает pic12f629
Давайте НЕХ получите АСМ
Re: MPLAB не поддерживает pic12f629
Спасибо за помощь.
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: MPLAB не поддерживает pic12f629
george_54 писал(а):Спасибо за помощь.
Не правда ли, ну ооочень информативный исходник получился...
Re: MPLAB не поддерживает pic12f629
Уж какой есть. А что вы хотели в нём найти?
- КРАМ
- Друг Кота
- Сообщения: 25124
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: MPLAB не поддерживает pic12f629
Трудоемкость по разбору дезассемблированного исходника превышает трудоемкость написания СВОЕГО кода по известному функционалу копируемого изделия.
А так исходник как исходник... Еще повезет если хекс был получен не из Си...
А так исходник как исходник... Еще повезет если хекс был получен не из Си...
-
Chettuser
Re: Отладка программы PIC в MPLAB
Кто как делает на Си преобразование BIN to BCD?
Я нашёл исходники только для ассемблера.
Пришлось писать самому:
DISPLAY - исходное двоичное число.
b - переменная для сотен;
c - переменная для десятков;
d - переменная для единиц.
Аналогично можно доработать для тысяч.
Может кто знает более оптимальный вариант чем вычитанием?.
Я нашёл исходники только для ассемблера.
Пришлось писать самому:
DISPLAY - исходное двоичное число.
b - переменная для сотен;
c - переменная для десятков;
d - переменная для единиц.
Аналогично можно доработать для тысяч.
Код: Выделить всё
void BIN_TO_BCD (void) //преобразование BIN в BCD (распакованный), ЗАНИМАЕТ ПРИМЕРНО 29-515 тактов (зависит от значения DISPLAY).
{ int k = DISPLAY;
b=0;
c=0;
d=0;
{ while (k>=100)
{ k =(k-100);
b++;}
while (k>=10)
{ k =(k-10);
c++;}
d = k;
}
/* //преобразование BIN в BCD СТАРОЕ, НАПИСАННОЕ ЕЩЁ В ПЕРВОЙ ВЕРСИИ, ЗАНИМАЕТ ПРИМЕРНО 1550 тактов (от значения DISPLAY не зависит).
{
b =(DISPLAY-DISPLAY%100)/100;
c =(DISPLAY%100-DISPLAY%10)/10;
d = DISPLAY%10;
}*/
return;
}Может кто знает более оптимальный вариант чем вычитанием?.
Re: Отладка программы PIC в MPLAB
Chettuser писал(а):Кто как делает на Си преобразование BIN to BCD?...
...Может кто знает более оптимальный вариант чем вычитанием?.
У меня вот так:
AmperHandr = Amper/100;
AmperTens = Amper/10-AmperHandr*10;
AmperOnes = Amper-AmperHandr*100-AmperTens*10;
Наверно тоже, что и у Вас, только сокращенный вариант. Всего менее 700 тактов.
-
Chettuser
Re: Отладка программы PIC в MPLAB
Soir писал(а):... Всего менее 700 тактов.
Спасибо, многовато будет.
- dr.doc
- Это не хвост, это антенна
- Сообщения: 1368
- Зарегистрирован: Вс мар 28, 2010 12:52:22
- Откуда: Беларусь
MPLAB проблемы
Доброго времени суток всем!
Помогите, если можете. Проблема следующего рода: ...Условный переход (call TABLE) выполняется, а возврат происходит на другую метку, находящуюся ниже (строк 10-15). При этом счетчик стека через некоторое время переполняется.
Подпрограмма TABLE взята из самоучителя Корабельникова Е.А. При симуляции исходника переходы проходят на "ура".
Помогите, если можете. Проблема следующего рода: ...Условный переход (call TABLE) выполняется, а возврат происходит на другую метку, находящуюся ниже (строк 10-15). При этом счетчик стека через некоторое время переполняется.
Подпрограмма TABLE взята из самоучителя Корабельникова Е.А. При симуляции исходника переходы проходят на "ура".
- Вложения
-
- Подпрограмма.txt
- (1.15 КБ) 334 скачивания
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Re: MPLAB проблемы
Скорее всего, у Вас таблица возвратов пересекает 256-словную границу страниц памяти. Самое простое решение - задать положение таблицы в памяти жестко, например, директивой .org:
Код: Выделить всё
; ГРУППА КОМАНД ПРЕОБРАЗОВАНИЯ ДВОИЧНО-ДЕСЯТИЧНОГО КОДА В КОД 7-СЕГМЕНТНОГО ИНДИКАТОРА
.org 0x100
TABLE addwf PC,F ; Содержимое счетчика команд PC увеличивается
; на величину содержимого аккумулятора W.
retlw b'00111111' ; ..FEDCBA = 0 Происходит скачек по таблице
retlw b'00000110' ; .....CB. = 1 на строку со значением,
retlw b'01011011' ; .G.ED.BA = 2 записанным в аккумуляторе,
retlw b'01001111' ; .G..DCBA = 3 и далее - возврат по стеку.
retlw b'01100110' ; .GF..CB. = 4
retlw b'01101101' ; .GF.DC.A = 5
retlw b'01111101' ; .GFEDC.A = 6
retlw b'00000111' ; .....CBA = 7
retlw b'01111111' ; .GFEDCBA = 8
retlw b'01101111' ; .GF.DCBA = 9
;**********************************************************************************************
end ; Конец программы.Re: MPLAB проблемы
Да, и не забудьте проверить, что содержимое W перед вызовом процедуры не более 9, иначе естественно, PC скаканет "в никуда", т.е. за пределы таблицы возвратов. Я для гарантии делал таблицу возвратов из 16 строк, и перед вызовом обнулял старший полубайт W командой
Код: Выделить всё
ANDLW 0x0F- dr.doc
- Это не хвост, это антенна
- Сообщения: 1368
- Зарегистрирован: Вс мар 28, 2010 12:52:22
- Откуда: Беларусь
Re: MPLAB проблемы
Уважаемый stas00n, подскажите, можно ли это просмотреть в MPLAB 5.7? Насколько я понимаю, просмотреть это значение можно в Window\File Register?
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Re: MPLAB проблемы
Во-первых последняя MPLAB имеет версию 8.60, не пользуйтесь старьем. 5.7 я даже не припоминаю такой, я тогда наверное еще под стол пешком ходил
какого она года хоть?
Во-вторых при отладке (в симуляторе) можете смотреть содержимое регистров и памяти программ - выбираете что нужно в меню View. Смотрите пошагово, что происходит (F7), изменяющиеся регистры будут краснеть; Клавиша F8 - те же шаги, но если встречается CALL, он выполнится за одно нажатие, т.е. вы не увидите деталей выполнения подпрограммы.
В третьих, фразой "...не забыть проверить..." я подразумевал такое составление кода, при котором непредсказуемое поведение программы исключено. Т.е. если таблица возвратов (RETLW x)будет иметь 16 строк, и перед вызовом обнулить старший полубайт W (тогда W будет =<15), тогда есть гарантия, что произойдет возврат, а не скачок по неизвестному адресу (в случае, если подпрограмме были переданы невалидные данные). Об этом нужно заботиться Вам как программисту на этапе написания кода.
Во-вторых при отладке (в симуляторе) можете смотреть содержимое регистров и памяти программ - выбираете что нужно в меню View. Смотрите пошагово, что происходит (F7), изменяющиеся регистры будут краснеть; Клавиша F8 - те же шаги, но если встречается CALL, он выполнится за одно нажатие, т.е. вы не увидите деталей выполнения подпрограммы.
В третьих, фразой "...не забыть проверить..." я подразумевал такое составление кода, при котором непредсказуемое поведение программы исключено. Т.е. если таблица возвратов (RETLW x)будет иметь 16 строк, и перед вызовом обнулить старший полубайт W (тогда W будет =<15), тогда есть гарантия, что произойдет возврат, а не скачок по неизвестному адресу (в случае, если подпрограмме были переданы невалидные данные). Об этом нужно заботиться Вам как программисту на этапе написания кода.
- dr.doc
- Это не хвост, это антенна
- Сообщения: 1368
- Зарегистрирован: Вс мар 28, 2010 12:52:22
- Откуда: Беларусь
Re: MPLAB проблемы
Я просто пользуюсь тем, на чем придется в универе делать лабы. Поэтому и версия старая. Пробовал в новой версии создать проект с использованием данного кода, так он даже не компилирует. Сразу пишет: Ошибка компиляции. Может я чего не доустановил? Но суть не в этом. Переместив таблицу выше по коду добился ее корректной работы. Выходит дело было именно в переходе через 256-словную страницу. Но! Переполнение стека проскакивает дальше по коду. Подскажите, пожалуйста, что делать? (насколько я понял про страницу - это номера строк исполняемого кода, и переход командой call корректно не работает при "перескоке")
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
- testerplus
- Встал на лапы
- Сообщения: 130
- Зарегистрирован: Пн авг 24, 2009 10:41:16
- Откуда: SPb
- Контактная информация:
Re: MPLAB проблемы
В дополнение к уже сказанному: почитайте про регистр PCLATH и вычисялемые переходы.
(5.70 для лаб вполне подойдет.)
(5.70 для лаб вполне подойдет.)