Недавно решил познакомиться с микроконтроллерами на примере 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);
}
}
};
Помогите понять что я неправильно делаю и как это исправить .
Помогите разобраться с таймерами
- Реклама
Re: Помогите разобраться с таймерами
А как вы определили, что оно не срабатывает? Никаких действий в прерывании не вижу.
