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

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

Чт фев 22, 2024 05:23:13

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

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

А можно это как то в коде показать? как я понял -сначала записать туда 1 например а потом смотреть есть ли она там?

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

Чт фев 22, 2024 08:13:42

как я понял -сначала записать туда 1


Код:
   bufPort=PORTB;
   if(bufPort&<mask>) ... blah-blah-blah;

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

Пт фев 23, 2024 05:35:33

как я понял -сначала записать туда 1


Код:
   bufPort=PORTB;
   if(bufPort&<mask>) ... blah-blah-blah;


Да, так все запустилось. Теперь еще вопрос с прерываниями по таймеру Timer0

вот такая конструкция :

void __interrupt() Timer0_interrupt() {
// if (TMR0IF) {


читаю документацию - в данном контроллере вообще нет прерываний и векторов соответственно? Я так понял при включении таймена с заданным шагом начинает увеличиваться TMR0 и его надо программно отслеживать ? нет флага о его переполнении ?

// Сброс флага прерывания
// TMR0IF = 0;
// }
}


не работает - пишет что не поддерживается данным девайсом . Как можно попасть в вектор прерывания таймера?

и где сам регистр настройки самого таймера -прескайлер, источник тактирования..


на 870 дела так все работало , а здесь нет

void interruptInit() {
T0CS = 0;
PSA = 0;
PS1 = 0;
PS0 = 1;
TMR0IE = 1;

}

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

Пт фев 23, 2024 07:35:49

Странный вы...
Читаете, что в этом МК нет прерываний и задаете вопрос где вектор прерываний...
Причем тут 870-ый?
У Микрочипа есть так называемое базовое семество МК. В них 12 битная шина инструкций, отсутствуют прерывания , нет прямого доступа к TRIS и стартовый вектор находится на последем адресе флеша.
Это простейшие МК, которым лет 30 от роду. Микрочип вообще почти ничего не снимает с производства.

Таймер или его флаг в регистре INTCON просто опрашивается либо в общем программном цикле, либо в локальном while.
Источник его тактирования - осциллятор МК. Прескалер делится между ним и вачдогом. Настройка в OPTION_REG. Кстати, доступ в этот регистр тоже односторонний через инструкцию option , а значит не надо пытаться его читать. В него можно только писать.
Ответить