Добрый день, есть такой контроллер PIC16F57, пытаюсь написать ную программу для него в MPlab X EDI на даже при моргании светодиодом возникаю проблемы - TRISA|=(1<<0) он не хочет воспринимать.
выдает вот такую ошибку-main.c:11:: error: (712) can't generate code for this expression .
Отстал от порта А и сделал по другому -TRISB=0; перевел весь порт B на выход , скомпилировалось. Далее подключаю программатор К150 - при программировании выдает ошибку. Считываю содержимое микросхемы , пробую прошить - прошивается..может кто сталкивался с данной проблемой?
PORTA^=(1<<0); //меняем состояние RA0
__delay_ms(500);
}
return;
}
Добавлено after 3 minutes 2 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4545615#p4545615"][uquote="vdv22",url="/forum/viewtopic.php?p=4545598#p4545598"]TRISA|=(1<<0)[/uquote]
Что вы имели ввиду этой строкой? [/uquote]
здесь перепутал -сделал как на avr должно быть TRISA &=~(1<0) - этой строкой я устанавливаю регистр A0 в ноль . на PIC16F870 проверенно -работает все .
Добавлено after 3 minutes 34 seconds:
[uquote="OKF",url="/forum/viewtopic.php?p=4545613#p4545613"]TRISx write only, поэтому правильно пишешь в TRISB.[/uquote]
То есть так здесь не работает ? для операции логического или необходимо сначала считать регистр, потом по или произвести сложение и записать ......
[uquote="vdv22",url="/forum/viewtopic.php?p=4545627#p4545627"]То есть так здесь не работает ? для операции логического или необходимо сначала считать регистр, потом по или произвести сложение и записать ......[/uquote]
В этом контроллере нет регистра TRISA или TRISB. Есть инструкция tris, которая записывает содержимое аккумулятора в регистр управления драйвером порта (аппаратно эквивалентен TRIS).
Поэтому его невозможно прочитать. Если есть такая потребность, нужно организовать копию в ОЗУ и совершать над ней те же манипуляции, что и с невидимой TRIS. Или не совершать никакой математики связанной с чтением TRIS.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4545693#p4545693"][uquote="vdv22",url="/forum/viewtopic.php?p=4545627#p4545627"]То есть так здесь не работает ? для операции логического или необходимо сначала считать регистр, потом по или произвести сложение и записать ......[/uquote]
В этом контроллере нет регистра TRISA или TRISB. Есть инструкция tris, которая записывает содержимое аккумулятора в регистр управления драйвером порта (аппаратно эквивалентен TRIS).
Поэтому его невозможно прочитать. Если есть такая потребность, нужно организовать копию в ОЗУ и совершать над ней те же манипуляции, что и с невидимой TRIS. Или не совершать никакой математики связанной с чтением TRIS.[/uquote]
Значит запись TRISB=0 переведет порт В на выход?
[uquote="КРАМ",url="/forum/viewtopic.php?p=4545730#p4545730"]Да. А если пытаться читать, делать маску и писать, то будет ошибка.[/uquote]
Спасибо, с этим все понятно , а почему программатор ругается при прошивке откомпилированного кода?
[uquote="veso74",url="/forum/viewtopic.php?p=4545743#p4545743"]Дайте картинку (скопируйте сюда) "ругатни" .
Не можем угадать, что показывает.[/uquote] первое фото это считывания после попытки прошивки.
на втором фото при верификации возникает ошибка с адреса 040. То есть с адреса 040 записывается нулями. .
[uquote="vdv22",url="/forum/viewtopic.php?p=4545889#p4545889"]с адреса 040 записывается нулями. .[/uquote]
А ничего, что у вас в конфигурации прошивка залочена?
[uquote="КРАМ",url="/forum/viewtopic.php?p=4545893#p4545893"][uquote="vdv22",url="/forum/viewtopic.php?p=4545889#p4545889"]с адреса 040 записывается нулями. .[/uquote]
А ничего, что у вас в конфигурации прошивка залочена? [/uquote]
а как это убрать?
Добавлено after 2 minutes 52 seconds:
[uquote="vdv22",url="/forum/viewtopic.php?p=4545895#p4545895"][uquote="КРАМ",url="/forum/viewtopic.php?p=4545893#p4545893"][uquote="vdv22",url="/forum/viewtopic.php?p=4545889#p4545889"]с адреса 040 записывается нулями. .[/uquote]
А ничего, что у вас в конфигурации прошивка залочена? [/uquote]
а как это убрать?[/uquote]
Сразу прошу прощения за вопрос - я с ПИКами очень мало работал - с 870 и писалось и прошивалось все без проблем.
[uquote="vdv22",url="/forum/viewtopic.php?p=4545895#p4545895"]как это убрать?[/uquote]
А код ваш?
В коде должно быть прописано слово конфигурации.
Из представленного скрина видно. что конфиг равен FF7, где четвертый (третий от нуля) бит - это code protect.
Если он равен 0 - прошивка закрыта. Если 1 - открыта.
То есть открытый код в конфиге будет выглядеть как FFF.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4545898#p4545898"][uquote="vdv22",url="/forum/viewtopic.php?p=4545895#p4545895"]как это убрать?[/uquote]
А код ваш?
В коде должно быть прописано слово конфигурации.
Из представленного скрина видно. что конфиг равен FF7, где четвертый (третий от нуля) бит - это code protect.
Если он равен 0 - прошивка закрыта. Если 1 - открыта.
То есть открытый код в конфиге будет выглядеть как FFF.[/uquote]
Да, код мой, с защитой разобрался ,огромное спасибо -сейчас прошивается нормально, но светодиод все равно не горит ... подскажите что не так ?
А у вас кварц подключен?
ЗЫ. Не цитируйте предыдущее сообщение полностью.
Не оставляйте в цитатах вложенные цитаты.
Прочтите, наконец, Правила форума. Или вы рискуете быть забаненным.
Последний раз редактировалось КРАМ Ср фев 21, 2024 17:44:39, всего редактировалось 1 раз.
еще раз спасибо за помощь!!! разобрался -на RESET надо было повесить +5
Добавлено after 2 hours 26 minutes 55 seconds:
[uquote="КРАМ",url="/forum/viewtopic.php?p=4545910#p4545910"]Генерация на кварце есть? Емкости на кварце какие?
ЗЫ. Уехал с работы домой. Буду дома только после 20-00 по Москве.[/uquote]
Еще один вопрос возник -как опрашивать вход ? Конструкции типа if(RA1) или (PORTB & (1 << 3)) не работают - тут тоже какие то подводные камни есть ?
[uquote="vdv22",url="/forum/viewtopic.php?p=4545916#p4545916"]тут тоже какие то подводные камни есть ?[/uquote]
Подводные камни есть при побитной записи в порт. Ибо это процедура RMW, которая из-за отсутствия входной защелки порта способна перезаписать входные состояния пинов в выходную защелку по всем разрядам порта кроме явно устанавливаемого.
Чтение особых проблем не имеет, хотя гораздо корректнее НА ЛЮБОМ контроллере для атомарности чтения сначала защелкнуть порт в переменную, а лишь затем производить какие либо if-ы, switch-и и другие действия. Даже если вы пишите на АСМе и понимаете реальный исполняемый код.