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

PIC16F57 проблемы с программированием.

Ср фев 21, 2024 06:37:46

Добрый день, есть такой контроллер PIC16F57, пытаюсь написать ную программу для него в MPlab X EDI на даже при моргании светодиодом возникаю проблемы - TRISA|=(1<<0) он не хочет воспринимать.
выдает вот такую ошибку-main.c:11:: error: (712) can't generate code for this expression .
Отстал от порта А и сделал по другому -TRISB=0; перевел весь порт B на выход , скомпилировалось. Далее подключаю программатор К150 - при программировании выдает ошибку. Считываю содержимое микросхемы , пробую прошить - прошивается..может кто сталкивался с данной проблемой?

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 07:50:21

Поделитесь весь кодом для blink, не только фрагмент.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 07:59:30

TRISx write only, поэтому правильно пишешь в TRISB.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 08:04:44

TRISA|=(1<<0)

Что вы имели ввиду этой строкой? :dont_know:

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 08:37:41

#include <xc.h>
#define _XTAL_FREQ 8000000
void main(void) {

TRISA&=~(1<<0); // устанавливаем 0 на RA0

while(1)
{

PORTA^=(1<<0); //меняем состояние RA0
__delay_ms(500);


}


return;
}

Добавлено after 3 minutes 2 seconds:
TRISA|=(1<<0)

Что вы имели ввиду этой строкой? :dont_know:


здесь перепутал -сделал как на avr должно быть TRISA &=~(1<0) - этой строкой я устанавливаю регистр A0 в ноль . на PIC16F870 проверенно -работает все .

Добавлено after 3 minutes 34 seconds:
TRISx write only, поэтому правильно пишешь в TRISB.



То есть так здесь не работает ? для операции логического или необходимо сначала считать регистр, потом по или произвести сложение и записать ......

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 10:10:10

То есть так здесь не работает ? для операции логического или необходимо сначала считать регистр, потом по или произвести сложение и записать ......

В этом контроллере нет регистра TRISA или TRISB. Есть инструкция tris, которая записывает содержимое аккумулятора в регистр управления драйвером порта (аппаратно эквивалентен TRIS).
Поэтому его невозможно прочитать. Если есть такая потребность, нужно организовать копию в ОЗУ и совершать над ней те же манипуляции, что и с невидимой TRIS. Или не совершать никакой математики связанной с чтением TRIS.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 10:53:07

То есть так здесь не работает ? для операции логического или необходимо сначала считать регистр, потом по или произвести сложение и записать ......

В этом контроллере нет регистра TRISA или TRISB. Есть инструкция tris, которая записывает содержимое аккумулятора в регистр управления драйвером порта (аппаратно эквивалентен TRIS).
Поэтому его невозможно прочитать. Если есть такая потребность, нужно организовать копию в ОЗУ и совершать над ней те же манипуляции, что и с невидимой TRIS. Или не совершать никакой математики связанной с чтением TRIS.

Значит запись TRISB=0 переведет порт В на выход?

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 11:07:42

Да. А если пытаться читать, делать маску и писать, то будет ошибка.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 11:19:11

Да. А если пытаться читать, делать маску и писать, то будет ошибка.

Спасибо, с этим все понятно , а почему программатор ругается при прошивке откомпилированного кода?

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 11:29:58

Дайте картинку (скопируйте сюда) "ругатни" :).
Не можем угадать, что показывает.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:02:15

Дайте картинку (скопируйте сюда) "ругатни" :).
Не можем угадать, что показывает.
первое фото это считывания после попытки прошивки.
на втором фото при верификации возникает ошибка с адреса 040. То есть с адреса 040 записывается нулями. .
Вложения
считывание после прошивки.png
(26.84 KiB) Скачиваний: 18
верификация.png
(37.44 KiB) Скачиваний: 9
2024-02-21 20_51_58-Window.png
(24.9 KiB) Скачиваний: 12

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:13:03

с адреса 040 записывается нулями. .

А ничего, что у вас в конфигурации прошивка залочена? :))) :))) :)))

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:17:43

с адреса 040 записывается нулями. .

А ничего, что у вас в конфигурации прошивка залочена? :))) :))) :)))

а как это убрать?

Добавлено after 2 minutes 52 seconds:
с адреса 040 записывается нулями. .

А ничего, что у вас в конфигурации прошивка залочена? :))) :))) :)))

а как это убрать?

Сразу прошу прощения за вопрос - я с ПИКами очень мало работал - с 870 и писалось и прошивалось все без проблем.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:26:25

как это убрать?

А код ваш?
В коде должно быть прописано слово конфигурации.
Из представленного скрина видно. что конфиг равен FF7, где четвертый (третий от нуля) бит - это code protect.
Если он равен 0 - прошивка закрыта. Если 1 - открыта.
То есть открытый код в конфиге будет выглядеть как FFF.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:36:34

как это убрать?

А код ваш?
В коде должно быть прописано слово конфигурации.
Из представленного скрина видно. что конфиг равен FF7, где четвертый (третий от нуля) бит - это code protect.
Если он равен 0 - прошивка закрыта. Если 1 - открыта.
То есть открытый код в конфиге будет выглядеть как FFF.

Да, код мой, с защитой разобрался ,огромное спасибо -сейчас прошивается нормально, но светодиод все равно не горит ... подскажите что не так ?

#include <xc.h>
#define _XTAL_FREQ 8000000
// CONFIG
#pragma config OSC = HS // Oscillator selection bits (HS oscillator)
#pragma config WDT = OFF // Watchdog timer enable bit (WDT disabled)
#pragma config CP = OFF // Code protection bit (Code protection off)

void main() {
TRISB=0;
while (1)
{
PORTB|=(1<<0);
__delay_ms(500);
PORTB&=~(1<<0);
__delay_ms(500);
}
}

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:41:38

А у вас кварц подключен?
ЗЫ. Не цитируйте предыдущее сообщение полностью.
Не оставляйте в цитатах вложенные цитаты.
Прочтите, наконец, Правила форума. Или вы рискуете быть забаненным.
Последний раз редактировалось КРАМ Ср фев 21, 2024 17:44:39, всего редактировалось 1 раз.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:44:19

А у вас кварц подключен?

да, конечно - 8000000 гц.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 17:45:41

Генерация на кварце есть? Емкости на кварце какие?
ЗЫ. Уехал с работы домой. Буду дома только после 20-00 по Москве.

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 20:27:04

еще раз спасибо за помощь!!! разобрался -на RESET надо было повесить +5

Добавлено after 2 hours 26 minutes 55 seconds:
Генерация на кварце есть? Емкости на кварце какие?
ЗЫ. Уехал с работы домой. Буду дома только после 20-00 по Москве.

Еще один вопрос возник -как опрашивать вход ? Конструкции типа if(RA1) или (PORTB & (1 << 3)) не работают - тут тоже какие то подводные камни есть ?

Re: PIC16F57 проблемы с программированием.

Ср фев 21, 2024 21:56:11

тут тоже какие то подводные камни есть ?

Подводные камни есть при побитной записи в порт. Ибо это процедура RMW, которая из-за отсутствия входной защелки порта способна перезаписать входные состояния пинов в выходную защелку по всем разрядам порта кроме явно устанавливаемого.
Чтение особых проблем не имеет, хотя гораздо корректнее НА ЛЮБОМ контроллере для атомарности чтения сначала защелкнуть порт в переменную, а лишь затем производить какие либо if-ы, switch-и и другие действия. Даже если вы пишите на АСМе и понимаете реальный исполняемый код.
Ответить