[uquote="КРАМ",url="/forum/viewtopic.php?p=4546028#p4546028"][uquote="vdv22",url="/forum/viewtopic.php?p=4545916#p4545916"]тут тоже какие то подводные камни есть ?[/uquote]
Подводные камни есть при побитной записи в порт. Ибо это процедура RMW, которая из-за отсутствия входной защелки порта способна перезаписать входные состояния пинов в выходную защелку по всем разрядам порта кроме явно устанавливаемого.
Чтение особых проблем не имеет, хотя гораздо корректнее НА ЛЮБОМ контроллере для атомарности чтения сначала защелкнуть порт в переменную, а лишь затем производить какие либо if-ы, switch-и и другие действия. Даже если вы пишите на АСМе и понимаете реальный исполняемый код.[/uquote]
А можно это как то в коде показать? как я понял -сначала записать туда 1 например а потом смотреть есть ли она там?
PIC16F57 проблемы с программированием.
- Реклама
- КРАМ
- Друг Кота
- Сообщения: 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;
Re: PIC16F57 проблемы с программированием.
[uquote="КРАМ",url="/forum/viewtopic.php?p=4546120#p4546120"][uquote="vdv22",url="/forum/viewtopic.php?p=4546092#p4546092"]как я понял -сначала записать туда 1[/uquote]
[/uquote]
Да, так все запустилось. Теперь еще вопрос с прерываниями по таймеру Timer0
вот такая конструкция :
void __interrupt() Timer0_interrupt() {
// if (TMR0IF) {
читаю документацию - в данном контроллере вообще нет прерываний и векторов соответственно? Я так понял при включении таймена с заданным шагом начинает увеличиваться TMR0 и его надо программно отслеживать ? нет флага о его переполнении ?
// Сброс флага прерывания
// TMR0IF = 0;
// }
}
не работает - пишет что не поддерживается данным девайсом . Как можно попасть в вектор прерывания таймера?
и где сам регистр настройки самого таймера -прескайлер, источник тактирования..
на 870 дела так все работало , а здесь нет
void interruptInit() {
T0CS = 0;
PSA = 0;
PS1 = 0;
PS0 = 1;
TMR0IE = 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;
}
- КРАМ
- Друг Кота
- Сообщения: 25259
- Зарегистрирован: Чт янв 10, 2008 22:01:02
- Откуда: Московская область, Фрязино
Re: PIC16F57 проблемы с программированием.
Странный вы...
Читаете, что в этом МК нет прерываний и задаете вопрос где вектор прерываний...
Причем тут 870-ый?
У Микрочипа есть так называемое базовое семество МК. В них 12 битная шина инструкций, отсутствуют прерывания , нет прямого доступа к TRIS и стартовый вектор находится на последем адресе флеша.
Это простейшие МК, которым лет 30 от роду. Микрочип вообще почти ничего не снимает с производства.
Таймер или его флаг в регистре INTCON просто опрашивается либо в общем программном цикле, либо в локальном while.
Источник его тактирования - осциллятор МК. Прескалер делится между ним и вачдогом. Настройка в OPTION_REG. Кстати, доступ в этот регистр тоже односторонний через инструкцию option , а значит не надо пытаться его читать. В него можно только писать.
Читаете, что в этом МК нет прерываний и задаете вопрос где вектор прерываний...
Причем тут 870-ый?
У Микрочипа есть так называемое базовое семество МК. В них 12 битная шина инструкций, отсутствуют прерывания , нет прямого доступа к TRIS и стартовый вектор находится на последем адресе флеша.
Это простейшие МК, которым лет 30 от роду. Микрочип вообще почти ничего не снимает с производства.
Таймер или его флаг в регистре INTCON просто опрашивается либо в общем программном цикле, либо в локальном while.
Источник его тактирования - осциллятор МК. Прескалер делится между ним и вачдогом. Настройка в OPTION_REG. Кстати, доступ в этот регистр тоже односторонний через инструкцию option , а значит не надо пытаться его читать. В него можно только писать.

