Добрый день. Как правильно запускать таймер. Прерывания.
В мейне пишу
TRISB = 0; //Выходы
T0IE = 1;
GIE = 1;
Перед мейном функцию
void interrupt I(void)
{
RB7 = 1;
T0IF = 0;
}
Но на выходе порта нету напряжения.
Подскажите пожалуйста как правильно нужно делать?
Вопрос по таймеру на PIC 16
- Реклама
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопрос по таймеру на PIC 16
Его(таймер) нужно сначала настроить.
- adrin02
- Открыл глаза
- Сообщения: 55
- Зарегистрирован: Вс мар 04, 2012 01:41:48
- Откуда: Двинск
- Контактная информация:
Re: Вопрос по таймеру на PIC 16
Я новичёк, Не подскажите как это сделать? =) Простого мануала по этой теме на С не нашёл =(Аlex писал(а):Его(таймер) нужно сначала настроить.
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопрос по таймеру на PIC 16
А причём тут Си ? Все ответы есть в даташите на Ваш МК.
- adrin02
- Открыл глаза
- Сообщения: 55
- Зарегистрирован: Вс мар 04, 2012 01:41:48
- Откуда: Двинск
- Контактная информация:
Re: Вопрос по таймеру на PIC 16
Ничего незная, там не ответы а чёрный лес. По примерам легче ориентироватся когда ничего не знаешь. А не лезть в эти дебри.Аlex писал(а):А причём тут Си ? Все ответы есть в даташите на Ваш МК.
- Реклама
- Shapa
- Встал на лапы
- Сообщения: 127
- Зарегистрирован: Пт июн 20, 2008 09:38:05
- Откуда: Харьков
- Контактная информация:
Re: Вопрос по таймеру на PIC 16
Новичку и правда трудно разобраться с 0. Не видя в глаза примеров.
1) Вы используете таймер0? Ищите его в даташите на ваш контроллер, там описание регистров. Выставляя в регистрах нужные биты - вы настраиваете свой таймер
2) Не знаю, как в пиках, но в АВРках, хэндлер прерывания должет иметь ветор прерывания в параметрах
3) собственно нужно настроить прерывания по переполнению. За это отвечают или регистры самого таймера 0, или спец регистр настройки всех прерываний (или и то и другое).
4) В черном лесе рано или поздно придется разобраться, чем раньше, там меньше косяков будет
1) Вы используете таймер0? Ищите его в даташите на ваш контроллер, там описание регистров. Выставляя в регистрах нужные биты - вы настраиваете свой таймер
2) Не знаю, как в пиках, но в АВРках, хэндлер прерывания должет иметь ветор прерывания в параметрах
3) собственно нужно настроить прерывания по переполнению. За это отвечают или регистры самого таймера 0, или спец регистр настройки всех прерываний (или и то и другое).
4) В черном лесе рано или поздно придется разобраться, чем раньше, там меньше косяков будет
- Аlex
- Модератор
- Сообщения: 4614
- Зарегистрирован: Чт мар 18, 2010 23:09:57
- Откуда: Планета Земля
- Контактная информация:
Re: Вопрос по таймеру на PIC 16
Никакого леса, все предельно ясно. Русским по белому всё расписано, разжёвано. Осталось только в рот положить.
http://www.microchip.ru/files/d-sheets-rus/pic16_11.pdf
http://www.microchip.ru/files/d-sheets-rus/pic16_11.pdf
- adrin02
- Открыл глаза
- Сообщения: 55
- Зарегистрирован: Вс мар 04, 2012 01:41:48
- Откуда: Двинск
- Контактная информация:
Re: Вопрос по таймеру на PIC 16
Спасибо. Нашёл пример, пытаюсь вникнуть.
Код: Выделить всё
unsigned cnt;
void interrupt() {
cnt++; // Increment value of cnt on every interrupt
TMR0L = 96;
INTCON = 0x20; // Set T0IE, clear T0IF
}
void main() {
ADCON1 = 0x0F; // Set AN pins to Digital I/O
T0CON = 0xC4; // Set TMR0 in 8bit mode, assign prescaler to TMR0
TRISB = 0; // PORTB is output
PORTB = 0xFF; // Initialize PORTB
TMR0L = 96; // Timer0 initial value
INTCON = 0xA0; // Enable TMRO interrupt
cnt = 0; // Initialize cnt
do {
if (cnt == 400) {
PORTB = ~PORTB; // Toggle PORTB LEDs
cnt = 0; // Reset cnt
}
} while(1);
}


