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

Re: MPLAB проблемы

Вс дек 05, 2010 17:59:07

dr.doc, я уже 2 раза Вам объяснял как надо сделать! Хорошо, объясню в третий раз. Вот как должно быть:
Код:
; ГРУППА КОМАНД ПРЕОБРАЗОВАНИЯ ДВОИЧНО-ДЕСЯТИЧНОГО КОДА В КОД 7-СЕГМЕНТНОГО ИНДИКАТОРА

TABLE
         org         0x100
         andlw      0x0F
         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
            retlw       0
            retlw       0
            retlw       0
            retlw       0
            retlw       0
            retlw       0
;**********************************************************************************************
            end                     ; Конец программы.


Чтобы не было проблем со стеком, каждому CALL должен следовать соответствующий RETURN (или RETLW), причем допускается не более 8 вложений подпрограмм.
В вашей программе, если вызвать ее со значением например, 10 (0x0A) в W, возврата из CALL'а не последует, стек будет нарушен, дальнейшее правильное выполнение программы будет невозможно.
По расположению таблицы в памяти программ: у PIC'ов (по меньшей мере, у 16-й серии) есть дебильная особенность архитектуры по части адресации памяти программ. Заключается она в том, что PC - это вовсе не PC как он есть, а только младший его байт PCL; Старший байт PCH напрямую юзеру недоступен; переполнение PCL при действиях с ним напрямую не вызовет приращение PCH. Пример:

Код:
    org         0xFE
    movlw     5
    addwf      PCL,F       ; PC станет 0x0005, а не 0x0105, как казалось вначале

Re: MPLAB проблемы

Вс дек 05, 2010 18:25:35

По расположению таблицы в памяти программ:

Именно так. Таблица с данными расположена на строке под номером 290 (начало по Program Memory Window). При попытке переназначить место расположения org 0x100, компилирования не происходит, выдается ошибка "переназначение адреса". Во время работы моего исходного кода переход на метку TABLE происходит, но следующий шаг, вместо выбора значения из таблицы, сразу перескакивает обратно со смещением.

Re: MPLAB проблемы

Вс дек 05, 2010 18:43:14

dr.doc писал(а):Пробовал в новой версии создать проект с использованием данного кода, так он даже не компилирует. Сразу пишет: Ошибка компиляции. Может я чего не доустановил?

Проверьте, что отключена чувствительность к регистру: Меню Project->Build options->Project->MPASM Assembler->Disable case sensitivity. Не забудьте подключить файл .inc для выбранного контроллера:
Код:
    include    "P16F84.inc"

Ну и наконец, не должно быть русских букв в пути к проекту, т.е. не надо создавать проект в "Моих документах" или на "Рабочем столе"

dr.doc писал(а):...(насколько я понял про страницу - это номера строк исполняемого кода, и переход командой call корректно не работает при "перескоке")

Нет, не так. CALL работает всегда, даже по далеким адресам, впрочем, как и GOTO - это безусловные команды вызова/перехода. Условные переходы если мне не изменяет память работают на небольших расстояниях (в пределах скольки-то там слов, не помню точно, вроде +127/-128). А вот прямое воздействие на PC командами, для этого по большому счету не предназначенными (ADDWF, INCF и т.д.) чревато вышеописанными проблемами. Вычисляемый переход - это трюк, призванный хоть как-то сгладить ущербность способов адресации ПИКов. Когда применяешь трюки, хоть и официально задокументированные, нужно быть предельно осторожным и дважды перепроверить все.

Re: MPLAB проблемы

Вс дек 05, 2010 18:54:36

dr.doc писал(а):При попытке переназначить место расположения org 0x100, компилирования не происходит, выдается ошибка "переназначение адреса". Во время работы моего исходного кода переход на метку TABLE происходит, но следующий шаг, вместо выбора значения из таблицы, сразу перескакивает обратно со смещением.

Значит, ваш код предшествующий таблице не влезает в 256 первых инструкций. Лучше расположите таблицу в начале исходника:
Код:
       org        0
       goto      reset
       org        4
       goto      isr
TABLE                   
        .                      ;подпрограмму с вычисляемыми переходами расположить тут
        .                      ;org 0x100 естественно не нужно :)
        .

reset
        .                       ;основная программа тут
        .
        .
isr
        .                       ;обработчик прерываний тут
        .
        .


Или в любом другом свободном месте, где она не будет сталкиваться с основным кодом, который имеет свойство разрастаться :)

Re: MPLAB проблемы

Вс дек 05, 2010 19:21:12

Поясню: директива org - от слова origin, начало. Эта директива жестко задает адрес в памяти программ, начиная с которого будут располагаться ниженаписанные команды. При ассемблировании исходника, если вы не указали расположение кода явно директивой org ассемблирование будет начато с адреса 0. Если ниже в тексте вы примените org для какого-то участка кода, нужно быть уверенным, что не будет конфликтов. Пример:
Код:
    org       0
    nop
    nop
    org       1
    movlw   1

Такой код не удастся скомпилировать, т.к. явно указано что по одному и тому же адресу нужно расположить две разные инструкции, что и является ошибкой адресов.

Re: MPLAB проблемы

Вс дек 05, 2010 21:00:03

Всем учавствовавшим большое спасибо! С проблемой разобрался. Буду дописывать далее.

Re: MPLAB проблемы

Пн дек 06, 2010 20:36:34

По PIC- ам советую купить книгу Сид Катцен " PIC микроконтроллеры Все, что вам необходимо знать"

Посмотри в сундуке, если не найдешь, могу скинуть на почту в электронном виде.

Помогите с MPLAB!

Чт мар 03, 2011 13:31:44

Здравствуйте! Проблема такова, скачиваю MPLAB 5.40.70 и комп "ложиться", может кто-нибудь знает, что делать или скинет нормальную прогу. Уже и код будущей программы продуман, нужена только среда программирования...

Re: Помогите с MPLAB!

Чт мар 03, 2011 13:40:13

,http://www.microchip.ru/?mid=2x2
Последний раз редактировалось ageeff Чт мар 03, 2011 16:06:17, всего редактировалось 1 раз.

Re: Помогите с MPLAB!

Чт мар 03, 2011 13:47:45

Скачайтё поновее,хотябы 7.50.Ваша версия вешает комп изза того что не находит лпт(у вас есть лпт порт?),если в установке отллючить привязку к лпт,то запуститса,но симулятор будет тормозить. Эта точно заработает,качайте смело http://ww1.microchip.com/downloads/en/DeviceDoc/mp750.zip,

Re: Помогите с MPLAB!

Чт мар 03, 2011 14:17:20

Midori писал(а):скачиваю MPLAB 5.40.70
Интересно, где Вы её вообще нашли, и кто Вам посоветовал её ставить?
Если у Вас комп уровня Pentium, с Win98, тогда, конечно.
Если же хотя бы P-IV, и XP, то актуальная, на данный момент, версия 8.63 (http://ww1.microchip.com/downloads/en/D ... _v8_63.zip).

Re: Помогите с MPLAB!

Пт мар 04, 2011 00:56:11

Dmitry Dubrovenko писал(а): и кто Вам посоветовал её ставить?


Известно, кто...
"-Проделки Фикса"
А качал поди с rutracker.org.
Пора антивирусникам сигнатуры MPLAB 5.40.70 подкинуть... :)))

Re: Помогите с MPLAB!

Пт мар 04, 2011 17:16:36

К@Т писал(а):Скачайтё поновее,хотябы 7.50.Ваша версия вешает комп изза того что не находит лпт(у вас есть лпт порт?),если в установке отллючить привязку к лпт,то запуститса,но симулятор будет тормозить. Эта точно заработает,качайте смело http://ww1.microchip.com/downloads/en/DeviceDoc/mp750.zip,


Да ЛПТ есть, учусь на старом компьютере. Вообщем ВСЕМ СПАСИБО за советы и ссылки. Скачаю и снова буду пытаться! От души благодарю, что так быстро отозвались!

Re: Помогите с MPLAB!

Пт мар 04, 2011 17:28:13

dosikus писал(а):Пора антивирусникам сигнатуры MPLAB 5.40.70 подкинуть... :)))
А за одно и файла Samouchitel.pdf вместе с его дебильным сайтом. :)))

Re: Помогите с MPLAB!

Пн мар 07, 2011 13:37:21

Midori писал(а):Скачаю
Учтите только, что "весят" они более 100Mb, и, если включён резидентный модуль антивирусника, будут довольно долго проверяться (из-за наличия большого количества запакованных файлов).

Программирование Pic16F84A в среде MPLAB

Вт мар 29, 2011 11:26:37

Доброго всем дня/вечера/ночи.
Кто может помочь, убедительная просьба откликнуться.
Нужен готовый код написанный в MPLAB: на pic повешены 2 кнопки на 17 и 18 ножки;на 6 и 7 ножки повешено по светодиоду; нужно чтобы данная схема работала как RS-триггер, то бишь нажмешь кнопку загорится какая то лампочка, нажмешь другую - другая.
Извините за наглость конечно, если Вас не затруднит, с комментариями.

Re: Программирование Pic16F84A в среде MPLAB

Вт мар 29, 2011 11:46:49

25$ на счет радиокота.

Re: Программирование Pic16F84A в среде MPLAB

Вт мар 29, 2011 13:21:36

это так сложно что за это надо платить 25$?
Бескорыстные люди видать кончились :(

Re: Программирование Pic16F84A в среде MPLAB

Вт мар 29, 2011 13:42:55

вы не просите помочь. вы просите дать готовое. по запаху чую - курсач. на крайняк - лаба. А потом жалуемся, что нет специалистов. Дипломы большинству нужно, чтобы залезть в тёплое кресло и получать блага ни за что. Поэтому, если не хотите научиться программировать микроконтроллеры - учитесь платить тем, кто умеет.
Попробуйте, убедите меня в обратном.
Мне лично деньги ненужны. Потому и предлагаю пополнить фонд этого прекрасного сайта. :))
M*O*N*O*L*I*T писал(а):это так сложно что за это надо платить 25$?
Бескорыстные люди видать кончились :(
Нет, это очень просто. Причем настолько, что возникает вопрос, почему вы не можете это сделать самостоятельно.
без коментариев и без инициализации:
Код:
cycle:
    movf porta, w
    andlw b'00000011'
    addwf pcl
    goto    cycle
    goto    set_a
    goto    set_b
    goto    cycle

set_a:
    movlw 1<<0
    movwf portb
    goto    cycle

set_b:
    movlw 1<<1
    movwf portb
    goto    cycle

Re: Программирование Pic16F84A в среде MPLAB

Вт мар 29, 2011 17:45:04

Большое спасибо Вам и на этом
Ответить