MPLAB в вопросах и ответах

Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

Сообщение Soir »

Вот проект, который выкладывал ранее. В Proteus работает. В EEPROM загружены 42 в ячейки начиная с 20h до 27h. Это соответствует коду 00000000. Нажмите при симулировании в Proteus на паузу и Вы увидите.
Изображение
Вложения
prohivka.zip
(32.15 КБ) 321 скачивание
11.png
(8.08 КБ) 1578 скачиваний
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 46
Зарегистрирован: Ср апр 18, 2007 17:01:11

Сообщение Nazarka »

Да через пару часов попробую на реальном железе,в протэусе все работает,менял код-все тоже отлично :)) В роде понял где мой косяк.....
[color=#FFBF80][i]Существует по большому счету две неисправности-есть контакт где он не нужен,и нет контакта где он нужен[/i][/color]
Реклама
Открыл глаза
Аватара пользователя
Сообщения: 46
Зарегистрирован: Ср апр 18, 2007 17:01:11

Сообщение Nazarka »

Всё заработало в железе!!! Всем спасибо,Soir отдельное Огромное спасибо :beer:
[color=#FFBF80][i]Существует по большому счету две неисправности-есть контакт где он не нужен,и нет контакта где он нужен[/i][/color]
Встал на лапы
Сообщения: 125
Зарегистрирован: Пн апр 27, 2009 16:10:03

Сообщение george_54 »

Установленный MPLAB не поддерживает 12f629, хотя формально этот проц в списке пакета есть. Что делать? Подскажите как с помощью MPLAB из hex-файла получить исходник .asm?
Реклама
Эиком - электронные компоненты и радиодетали
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Сообщение otest »

Давайте НЕХ получите АСМ
Реклама
Встал на лапы
Сообщения: 125
Зарегистрирован: Пн апр 27, 2009 16:10:03

Сообщение george_54 »

Спасибо за помощь.
Реклама
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Сообщение otest »

Готово
Друг Кота
Аватара пользователя
Сообщения: 25404
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

george_54 писал(а):Спасибо за помощь.
Не правда ли, ну ооочень информативный исходник получился... :)) :))
Друг Кота
Сообщения: 7853
Зарегистрирован: Ср фев 11, 2009 20:35:58

Сообщение otest »

Уж какой есть. А что вы хотели в нём найти?
Друг Кота
Аватара пользователя
Сообщения: 25404
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

Сообщение КРАМ »

Трудоемкость по разбору дезассемблированного исходника превышает трудоемкость написания СВОЕГО кода по известному функционалу копируемого изделия.
А так исходник как исходник... Еще повезет если хекс был получен не из Си... :)
Chettuser

Сообщение Chettuser »

Кто как делает на Си преобразование BIN to BCD?
Я нашёл исходники только для ассемблера.
Пришлось писать самому:

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;
}
Может кто знает более оптимальный вариант чем вычитанием?. :oops:
Друг Кота
Сообщения: 3956
Зарегистрирован: Ср окт 14, 2009 10:37:49
Откуда: Украина

Сообщение Soir »

Chettuser писал(а):Кто как делает на Си преобразование BIN to BCD?...
...Может кто знает более оптимальный вариант чем вычитанием?. :oops:
У меня вот так:

AmperHandr = Amper/100;
AmperTens = Amper/10-AmperHandr*10;
AmperOnes = Amper-AmperHandr*100-AmperTens*10;

Наверно тоже, что и у Вас, только сокращенный вариант. Всего менее 700 тактов.
Chettuser

Сообщение Chettuser »

Soir писал(а):... Всего менее 700 тактов.
Спасибо, многовато будет. :o
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Доброго времени суток всем!
Помогите, если можете. Проблема следующего рода: ...Условный переход (call TABLE) выполняется, а возврат происходит на другую метку, находящуюся ниже (строк 10-15). При этом счетчик стека через некоторое время переполняется.
Подпрограмма TABLE взята из самоучителя Корабельникова Е.А. При симуляции исходника переходы проходят на "ура".
Вложения
Подпрограмма.txt
(1.15 КБ) 338 скачиваний
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Сообщение stas00n »

Скорее всего, у Вас таблица возвратов пересекает 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                     ; Конец программы.
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Сообщение stas00n »

Да, и не забудьте проверить, что содержимое W перед вызовом процедуры не более 9, иначе естественно, PC скаканет "в никуда", т.е. за пределы таблицы возвратов. Я для гарантии делал таблицу возвратов из 16 строк, и перед вызовом обнулял старший полубайт W командой

Код: Выделить всё

ANDLW    0x0F
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Уважаемый stas00n, подскажите, можно ли это просмотреть в MPLAB 5.7? Насколько я понимаю, просмотреть это значение можно в Window\File Register?
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Вымогатель припоя
Сообщения: 557
Зарегистрирован: Пн мар 23, 2009 04:03:45

Сообщение stas00n »

Во-первых последняя MPLAB имеет версию 8.60, не пользуйтесь старьем. 5.7 я даже не припоминаю такой, я тогда наверное еще под стол пешком ходил :) какого она года хоть?
Во-вторых при отладке (в симуляторе) можете смотреть содержимое регистров и памяти программ - выбираете что нужно в меню View. Смотрите пошагово, что происходит (F7), изменяющиеся регистры будут краснеть; Клавиша F8 - те же шаги, но если встречается CALL, он выполнится за одно нажатие, т.е. вы не увидите деталей выполнения подпрограммы.
В третьих, фразой "...не забыть проверить..." я подразумевал такое составление кода, при котором непредсказуемое поведение программы исключено. Т.е. если таблица возвратов (RETLW x)будет иметь 16 строк, и перед вызовом обнулить старший полубайт W (тогда W будет =<15), тогда есть гарантия, что произойдет возврат, а не скачок по неизвестному адресу (в случае, если подпрограмме были переданы невалидные данные). Об этом нужно заботиться Вам как программисту на этапе написания кода.
Это не хвост, это антенна
Аватара пользователя
Сообщения: 1368
Зарегистрирован: Вс мар 28, 2010 12:52:22
Откуда: Беларусь

Сообщение dr.doc »

Я просто пользуюсь тем, на чем придется в универе делать лабы. Поэтому и версия старая. Пробовал в новой версии создать проект с использованием данного кода, так он даже не компилирует. Сразу пишет: Ошибка компиляции. Может я чего не доустановил? Но суть не в этом. Переместив таблицу выше по коду добился ее корректной работы. Выходит дело было именно в переходе через 256-словную страницу. Но! Переполнение стека проскакивает дальше по коду. Подскажите, пожалуйста, что делать? (насколько я понял про страницу - это номера строк исполняемого кода, и переход командой call корректно не работает при "перескоке")
«Еще я хотел бы, чтобы наши ученые изобрели какой-то новый источник энергии, чтобы мы на коленях не ползали даже перед нашими братьями, умоляя их и выпрашивая тонну нефти или кубометр газа», — рассказал белорусский президент.
Встал на лапы
Аватара пользователя
Сообщения: 130
Зарегистрирован: Пн авг 24, 2009 10:41:16
Откуда: SPb

Сообщение testerplus »

В дополнение к уже сказанному: почитайте про регистр PCLATH и вычисялемые переходы.

(5.70 для лаб вполне подойдет.)
Контактная информация:
Ответить

Вернуться в «PIC»