Страница 1 из 1

Помогите настроить TMR0 на Си

Добавлено: Пн июн 24, 2013 19:22:46
VHEMaster
Доброго всем времени суток! Пишу программу для темброблока, а нужен таймер для перехода в режим St-By

Вот что нужно..

Если переменная sleeptimerenable == 1 то что-бы каждую секунду sleeptime уменьшался на еденицу. А когда sleeptime == 0 то sleeptimerenable = 0 и stby = 1.. Помогите мне настроить таймер.. _XTAL_FREQ 8 MHz

И ещё, у меня TMR1 используется для приёма ИК комманд по RC-5

т.е.

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

............
#define _XTAL_FREQ 8000000
unsigned int sleeptime = 0;
bit sleeptimerenable = 0;
bit stby = 0;
............
............

void main(void)
{
........
........
       INTEDG = 0;
       TMR1IE = 1;
       INTCON= = 0b11010000;
       PEIE = 1;
       INTE = 1;
       GIE = 1;
........
........
}

void interrupt isr(void)
{
       IR_RC5(); //приём ИК комманд
}
Помогите правильно оформить код

Re: Помогите настроить TMR0 на Си

Добавлено: Пн июн 24, 2013 20:32:21
Аlex
VHEMaster писал(а):Вот что нужно..

Если переменная sleeptimerenable == 1 то что-бы каждую секунду sleeptime уменьшался на еденицу. А когда sleeptime == 0 то sleeptimerenable = 0 и stby = 1..
Что-то не понятно, причём тут TMR0 ? :roll:

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

if(sleeptimerenable==1){
  sleeptime--;
}
else{
  sleeptimerenable=0;
  stby=1;
}

По TMR0 - http://www.microchip.ru/files/d-sheets-rus/pic16_11.pdf
Вся Русская дока - http://www.microchip.ru/lit/?mid=1x0

Re: Помогите настроить TMR0 на Си

Добавлено: Вт июн 25, 2013 09:50:13
VHEMaster
Аlex писал(а):
VHEMaster писал(а):Вот что нужно..

Если переменная sleeptimerenable == 1 то что-бы каждую секунду sleeptime уменьшался на еденицу. А когда sleeptime == 0 то sleeptimerenable = 0 и stby = 1..
Что-то не понятно, причём тут TMR0 ? :roll:

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

if(sleeptimerenable==1){
  sleeptime--;
}
else{
  sleeptimerenable=0;
  stby=1;
}

По TMR0 - http://www.microchip.ru/files/d-sheets-rus/pic16_11.pdf
Вся Русская дока - http://www.microchip.ru/lit/?mid=1x0

Ясно) А как оформить этот код я знал, но всё равно спасибо) И ещё вопрос. Куда этот код вставить? в interrupt? И я не вижу кода задержки для ежесекундного выполнения..




Вам нужно прочитать Правила форума.
http://radiokot.ru/forum/viewtopic.php?f=19&t=6538
Нарушение Правил форума п. 2.7

aen

Re: Помогите настроить TMR0 на Си

Добавлено: Вт июн 25, 2013 11:24:23
VHEMaster
На счёт правил - понял, виноват.

Re: Помогите настроить TMR0 на Си

Добавлено: Вт июн 25, 2013 22:35:22
Аlex
Куда этот код вставить? в interrupt?
Туда, где Вы хотите уменьшать sleeptime, я так полагаю... :roll:

Re: Помогите настроить TMR0 на Си

Добавлено: Вт июн 25, 2013 22:56:35
VHEMaster
Аlex писал(а):где Вы хотите уменьшать sleeptime, я так полагаю... :roll:
Прошу прощения, но я так и не понял :( Мне его нужно уменьшать паралельно с большим кодом...
т.е. таймер будет не точным :o Мне это не нужно :( можно ли вставить этот код в interrupt?

Re: Помогите настроить TMR0 на Си

Добавлено: Ср июн 26, 2013 09:45:14
urry
кажется, я понял метания ТС.
У него есть готовый рабочий код, в который нужно добавить 1 функцию, не сломав остальное.
Обработка прерывания у него написано некорректно с учетом того, что прерывание будет только одно, вот так

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

void interrupt isr(void)
{
       IR_RC5(); //приём ИК комманд
}
У 16 пиков один вектор на все прерывания, поэтому корректнее добавить

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

void interrupt isr(void)
{
	if (TMR1IF && TMR1IE)
	{
        TMR1IF=0;
       IR_RC5(); //приём ИК комманд
       }
	if (T0IF && T0IE)
	{
		T0IF=0;
// Ваш код
       }
}

Re: Помогите настроить TMR0 на Си

Добавлено: Пт июн 28, 2013 11:08:05
VHEMaster
urry писал(а):

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

void interrupt isr(void)
{
	if (TMR1IF && TMR1IE)
	{
        TMR1IF=0;
       IR_RC5(); //приём ИК комманд
       }
	if (T0IF && T0IE)
	{
		T0IF=0;
// Ваш код
       }
}
Спасибо большое) Помогло) Теперь таймер обратного отсчёта работает на ура))