Поклонники продукции Microchip Technology Inc тусуются тут.
Ответить

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

Пн ноя 15, 2010 17:13:05

Вот проект, который выкладывал ранее. В Proteus работает. В EEPROM загружены 42 в ячейки начиная с 20h до 27h. Это соответствует коду 00000000. Нажмите при симулировании в Proteus на паузу и Вы увидите.
Изображение
Вложения
prohivka.zip
(32.15 KiB) Скачиваний: 152
11.png
(8.08 KiB) Скачиваний: 1182

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

Пн ноя 15, 2010 17:36:56

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

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

Пн ноя 15, 2010 19:31:06

Всё заработало в железе!!! Всем спасибо,Soir отдельное Огромное спасибо :beer:

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

Вт ноя 16, 2010 14:31:07

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

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

Вт ноя 16, 2010 15:37:36

Давайте НЕХ получите АСМ

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

Вт ноя 16, 2010 16:40:26

Спасибо за помощь.
Вложения
Ra-01-2007-9666.zip
(696 байт) Скачиваний: 154

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

Вт ноя 16, 2010 17:17:53

Готово

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

Вт ноя 16, 2010 17:47:05

george_54 писал(а):Спасибо за помощь.

Не правда ли, ну ооочень информативный исходник получился... :)) :))

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

Вт ноя 16, 2010 17:52:34

Уж какой есть. А что вы хотели в нём найти?

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

Ср ноя 17, 2010 08:00:43

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

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

Вс ноя 28, 2010 11:03:39

Кто как делает на Си преобразование 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

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

Soir писал(а):... Всего менее 700 тактов.

Спасибо, многовато будет. :o

MPLAB проблемы

Вс дек 05, 2010 15:28:49

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

Re: MPLAB проблемы

Вс дек 05, 2010 16:11:49

Скорее всего, у Вас таблица возвратов пересекает 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

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

Код:
ANDLW    0x0F

Re: MPLAB проблемы

Вс дек 05, 2010 16:32:48

Уважаемый stas00n, подскажите, можно ли это просмотреть в MPLAB 5.7? Насколько я понимаю, просмотреть это значение можно в Window\File Register?

Re: MPLAB проблемы

Вс дек 05, 2010 16:50:49

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

Re: MPLAB проблемы

Вс дек 05, 2010 17:02:26

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

Re: MPLAB проблемы

Вс дек 05, 2010 17:05:47

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

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