interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
PORTB|=1<<PORTB.0;
}
а вот где взять список правильно написанных вторых частей строки(выделенно) а то мне компилятор выдал interrupt vector exceeds allowable range
Вы б прочитали ТАКИ курс.Negor писал(а):И ещё вопрос. Чтоб создать обработчик прерывания в CodeVision нужно:
interrupt [TIM0_COMPA] void timer0_compa_isr(void)
{
PORTB|=1<<PORTB.0;
}
а вот где взять список правильно написанных вторых частей строки(выделенно) а то мне компилятор выдал interrupt vector exceeds allowable range
Мастер CVAVR обычно все пишет правильно.Aheir писал(а):Да вроде как CodeWizard обычно их сам правильно пишет...
эээ. ну не обязательно на таймер вешать одну задачу. Если не хватает таймеров, можно попробовать их так оптимально настроить, чтобы каждая из задач могла использовать таймер для своих целей.Negor писал(а):Имхо уж очень легко ты разкидываешся таймерами... я понимаю, если бы их было штук восемь... а так два таймера(я изучаю тини2313) и, как правильно заметил ARV один просто будет молотить и энергия расходуется в никуда...
Negor, ты хоть на коноплю перейди - проблема сама по себе не пропадет. Надо думать, разбираться.Negor писал(а):Попробую перейти на ICC
Код: Выделить всё
TCNT1H=С2;
TCNT1L=F7;
Код: Выделить всё
TCCR1B=(1<<CS12);
Код: Выделить всё
#include<tiny2313>
#include<delay>
unsigned char i=0,j=0;
unsigned char Digit[]={0x3F,0x06,0x5B,0x4F,0x66,0x6D,0x7D,0x27,0x7F,0x6F};
unsigned char FrstState,ScndState,RealState,Flag;
unsigned char ScndH=0xC2,ScndL=0xF7;
void KeyState(void)
{
FrstState=~PIND;
ScndState=FrstState & ~PIND;
RealState=(ScndState) & ~(Flag);
Flag=ScndState;
}
void OutFrst(unsigned char Digit)
{
PORTD|=0x03;
PORTB=Digit;
PORTD&=0x7e;
}
void OutScnd(unsigned char Digit)
{
PORTD|=0x03;
PORTB=Digit;
PORTD&=0x7d;
}
interrupt [TIM0_OVF] void timer0_ovf_isr (void)
{
OutFrst(Digit[i]);
delay_us(25);
OutScnd(Digit[j]);
}
interrupt [TIM1_OVF] void timer1_ovf_isr (void)
{
i++;
if (i>9)
{
i=0;
j++;
};
if (j>5) j=0;
TCNT1H=ScndH;
TCNT1L=ScndL;
}
void main(void)
{
TCNT1H=ScndH;
TCNT1L=ScndL;
DDRB=0xff;
DDRD=0x03;
PORTD=0x7f;
#asm("SEI");
TIMSK=(1<<TOIE0)|(1<<TOIE1);
TCCR0B=(1<<CS00);
TCCR1B=(1<<CS12>9)
{
i=0;
j++;
};
if (j>9) j=0;
KeyState();
}
}
Можно конечно.Negor писал(а):ТОв.tych, зачем в начале прерывания останавливать таймер, записывать в него значение а потом запускать?
Разве нельзя просто в конце прерывания записать нужное значение в рег. таймера как сделал я?
Прверьте на какой частоте работает МК.Negor писал(а):С таким кодом циферки меняются оч. долго... секунды 3-4...
Пробовал... не помогает...Обновлять число в таймере нужно в начале обработчика прерывания.
Из приборов есть только авомметр...Прверьте на какой частоте работает МК.
Это для повышения точности счета промежутков между переполнениями.Negor писал(а):Пробовал... не помогает...Обновлять число в таймере нужно в начале обработчика прерывания.