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

Поклонники продукции Microchip Technology Inc тусуются тут.
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

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

Сообщение vdv22 »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4546028#p4546028"][uquote="vdv22",url="/forum/viewtopic.php?p=4545916#p4545916"]тут тоже какие то подводные камни есть ?[/uquote]
Подводные камни есть при побитной записи в порт. Ибо это процедура RMW, которая из-за отсутствия входной защелки порта способна перезаписать входные состояния пинов в выходную защелку по всем разрядам порта кроме явно устанавливаемого.
Чтение особых проблем не имеет, хотя гораздо корректнее НА ЛЮБОМ контроллере для атомарности чтения сначала защелкнуть порт в переменную, а лишь затем производить какие либо if-ы, switch-и и другие действия. Даже если вы пишите на АСМе и понимаете реальный исполняемый код.[/uquote]
А можно это как то в коде показать? как я понял -сначала записать туда 1 например а потом смотреть есть ли она там?
Реклама
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

[uquote="vdv22",url="/forum/viewtopic.php?p=4546092#p4546092"]как я понял -сначала записать туда 1[/uquote]

Код: Выделить всё

   bufPort=PORTB;
   if(bufPort&<mask>) ... blah-blah-blah;
Реклама
Аватара пользователя
vdv22
Первый раз сказал Мяу!
Сообщения: 39
Зарегистрирован: Чт июн 08, 2017 17:52:33

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

Сообщение vdv22 »

[uquote="КРАМ",url="/forum/viewtopic.php?p=4546120#p4546120"][uquote="vdv22",url="/forum/viewtopic.php?p=4546092#p4546092"]как я понял -сначала записать туда 1[/uquote]

Код: Выделить всё

   bufPort=PORTB;
   if(bufPort&<mask>) ... blah-blah-blah;
[/uquote]

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

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

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


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

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


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

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


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

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

}
Аватара пользователя
КРАМ
Друг Кота
Сообщения: 25259
Зарегистрирован: Чт янв 10, 2008 22:01:02
Откуда: Московская область, Фрязино

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

Сообщение КРАМ »

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

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

Вернуться в «PIC»