Помогите разобраться с таймерами

Обсуждаем контроллеры компании Atmel.
Ответить
denilkor
Родился
Сообщения: 2
Зарегистрирован: Вс дек 15, 2013 12:49:43

Помогите разобраться с таймерами

Сообщение denilkor »

Недавно решил познакомиться с микроконтроллерами на примере Atmega16 . немогу понять почему не срабатывает прерывание по таймеру 1.


#include <mega16.h>
#include <delay.h>
#include <1wire.h>
#include <ds1820.h>
int fan;
int sot;
int dec;
int ed;
//********************************************
// Timer1 output compare A interrupt service routine прерывание по таймеру
interrupt [TIM1_COMPA] void timer1_compa_isr(void)
{
// ЭТО ПРЕРЫВАНИЕ НЕ СРАБАТЫВАЕТ !!!!!

//TCNT1H=0;
//TCNT1L=0;


}

void display(void)
{
sot = fan/100;
dec = (fan%100)/10;
ed = (fan%100)%10;
PORTA=sot;
PORTA.4=1;
delay_ms(2);
PORTA.4=0;
PORTA=dec;
PORTA.5=1;
delay_ms(2);
PORTA.5=0;
PORTA=ed;
PORTA.6=1;
delay_ms(2);
PORTA.6=0;
OCR0=fan;
}

void main(void)
{


PORTA=0x00;
DDRA=0xFF;
PORTB=0x00;
DDRB=0xFF;
PORTC=0x3E;
DDRC=0x00;
PORTD=0x00;
DDRD=0x00;

// Timer/Counter 0 initialization
// Clock source: System Clock
// Clock value: 31,250 kHz
// Mode: Fast PWM top=0xFF
// OC0 output: Non-Inverted PWM
TCCR0=0x6C;
TCNT0=0x00;
OCR0=0x00;

// настройка таймера*****************************************
// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 7,813 kHz
// Mode: Normal top=0xFFFF
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Falling Edge
// Timer1 Overflow Interrupt: Off
// Input Capture Interrupt: Off
// Compare A Match Interrupt: On
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x05;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x1E;
OCR1AL=0x85;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;
MCUCR=0x00;
MCUCSR=0x00;
TIMSK=0x10;
UCSRB=0x00;
ACSR=0x80;
SFIOR=0x00;
ADCSRA=0x00;
SPCR=0x00;
TWCR=0x00;
//разрешение глобальных прерываний******************
#asm("sei")
//**************************************************
w1_init();

while (1)
{
display();
// Place your code here
while(PINC.2==0&fan<255)
{
fan=fan+5;
display();
delay_ms(50);
}
while(PINC.3==0&fan>0)
{
fan=fan-5;
display();
delay_ms(50);
}

}
};


Помогите понять что я неправильно делаю и как это исправить .
Реклама
titoFF
Встал на лапы
Сообщения: 100
Зарегистрирован: Пт авг 02, 2013 07:20:04

Re: Помогите разобраться с таймерами

Сообщение titoFF »

А как вы определили, что оно не срабатывает? Никаких действий в прерывании не вижу.
Реклама
Ответить

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