Страница 5 из 25

Re: HEX из проэкта MPLAB

Добавлено: Пн ноя 15, 2010 17:13:05
Soir
Вот проект, который выкладывал ранее. В Proteus работает. В EEPROM загружены 42 в ячейки начиная с 20h до 27h. Это соответствует коду 00000000. Нажмите при симулировании в Proteus на паузу и Вы увидите.
Изображение

Re: HEX из проэкта MPLAB

Добавлено: Пн ноя 15, 2010 17:36:56
Nazarka
Да через пару часов попробую на реальном железе,в протэусе все работает,менял код-все тоже отлично :)) В роде понял где мой косяк.....

Re: HEX из проэкта MPLAB

Добавлено: Пн ноя 15, 2010 19:31:06
Nazarka
Всё заработало в железе!!! Всем спасибо,Soir отдельное Огромное спасибо :beer:

MPLAB не поддерживает pic12f629

Добавлено: Вт ноя 16, 2010 14:31:07
george_54
Установленный MPLAB не поддерживает 12f629, хотя формально этот проц в списке пакета есть. Что делать? Подскажите как с помощью MPLAB из hex-файла получить исходник .asm?

Re: MPLAB не поддерживает pic12f629

Добавлено: Вт ноя 16, 2010 15:37:36
otest
Давайте НЕХ получите АСМ

Re: MPLAB не поддерживает pic12f629

Добавлено: Вт ноя 16, 2010 16:40:26
george_54
Спасибо за помощь.

Re: MPLAB не поддерживает pic12f629

Добавлено: Вт ноя 16, 2010 17:17:53
otest
Готово

Re: MPLAB не поддерживает pic12f629

Добавлено: Вт ноя 16, 2010 17:47:05
КРАМ
george_54 писал(а):Спасибо за помощь.
Не правда ли, ну ооочень информативный исходник получился... :)) :))

Re: MPLAB не поддерживает pic12f629

Добавлено: Вт ноя 16, 2010 17:52:34
otest
Уж какой есть. А что вы хотели в нём найти?

Re: MPLAB не поддерживает pic12f629

Добавлено: Ср ноя 17, 2010 08:00:43
КРАМ
Трудоемкость по разбору дезассемблированного исходника превышает трудоемкость написания СВОЕГО кода по известному функционалу копируемого изделия.
А так исходник как исходник... Еще повезет если хекс был получен не из Си... :)

Re: Отладка программы PIC в MPLAB

Добавлено: Вс ноя 28, 2010 11:03:39
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:

Re: Отладка программы PIC в MPLAB

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

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

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

Re: Отладка программы PIC в MPLAB

Добавлено: Вс ноя 28, 2010 13:13:58
Chettuser
Soir писал(а):... Всего менее 700 тактов.
Спасибо, многовато будет. :o

MPLAB проблемы

Добавлено: Вс дек 05, 2010 15:28:49
dr.doc
Доброго времени суток всем!
Помогите, если можете. Проблема следующего рода: ...Условный переход (call TABLE) выполняется, а возврат происходит на другую метку, находящуюся ниже (строк 10-15). При этом счетчик стека через некоторое время переполняется.
Подпрограмма TABLE взята из самоучителя Корабельникова Е.А. При симуляции исходника переходы проходят на "ура".

Re: MPLAB проблемы

Добавлено: Вс дек 05, 2010 16:11:49
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                     ; Конец программы.

Re: MPLAB проблемы

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

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

ANDLW    0x0F

Re: MPLAB проблемы

Добавлено: Вс дек 05, 2010 16:32:48
dr.doc
Уважаемый stas00n, подскажите, можно ли это просмотреть в MPLAB 5.7? Насколько я понимаю, просмотреть это значение можно в Window\File Register?

Re: MPLAB проблемы

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

Re: MPLAB проблемы

Добавлено: Вс дек 05, 2010 17:02:26
dr.doc
Я просто пользуюсь тем, на чем придется в универе делать лабы. Поэтому и версия старая. Пробовал в новой версии создать проект с использованием данного кода, так он даже не компилирует. Сразу пишет: Ошибка компиляции. Может я чего не доустановил? Но суть не в этом. Переместив таблицу выше по коду добился ее корректной работы. Выходит дело было именно в переходе через 256-словную страницу. Но! Переполнение стека проскакивает дальше по коду. Подскажите, пожалуйста, что делать? (насколько я понял про страницу - это номера строк исполняемого кода, и переход командой call корректно не работает при "перескоке")

Re: MPLAB проблемы

Добавлено: Вс дек 05, 2010 17:05:47
testerplus
В дополнение к уже сказанному: почитайте про регистр PCLATH и вычисялемые переходы.

(5.70 для лаб вполне подойдет.)