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

Здесь вопросы новичков
Ответить
Vova0306
Сообщения: 10
Зарегистрирован: 14 окт 2010, 08:13

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

Сообщение Vova0306 » 14 окт 2010, 10:30

объясните пожалуйста:
#include <mega16.h>

// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void) //могу ли я использовать эту функцию для счёта циклов, или я всё неверно понимаю, она не может возвращать значения в основную функцию, или как? не могу разобраться с таймером : как организовать прерывания (язык С , CVAVR), кусок кода отсутствует
{
// Reinitialize Timer 0 value
TCNT0=0xFF;
// Place your code here

}

// Declare your global variables here

void main(void)
{

// Global enable interrupts
#asm("sei")

while (1)
{
// Place your code here

};
}

Vova0306
Сообщения: 10
Зарегистрирован: 14 окт 2010, 08:13

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

Сообщение Vova0306 » 14 окт 2010, 11:09

Всё разобрался, просто никогда с таймерами не работал, видимо гдето в настройках ошибся, или в какой другой ерунде:


#include <mega16.h>

#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>

int i;
int sek;
char lcd_buffer[33];


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xFF;
i++;
if(i>30){i=0; sek++;}

}


void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x00;
DDRD=0x00;

TCCR0=0x05;
TCNT0=0xFF;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x01;

ACSR=0x80;
SFIOR=0x00;

lcd_init(16);

#asm("sei")

while (1)
{delay_ms(100);
sprintf(lcd_buffer,"t=%i",sek);
lcd_clear();
lcd_puts(lcd_buffer);



};
}

Vova0306
Сообщения: 10
Зарегистрирован: 14 окт 2010, 08:13

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

Сообщение Vova0306 » 14 окт 2010, 12:55

и далее развиваем идею:

#include <mega16.h>

#asm
.equ __lcd_port=0x18 ;PORTB
#endasm
#include <lcd.h>
#include <stdio.h>
#include <delay.h>

int i;
int sek;
int min;
int ch;
char lcd_buffer[5];


interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{
TCNT0=0xFF;
i++;
if(i>30){i=0; sek++;}

}


void main(void)
{
PORTA=0x00;
DDRA=0x00;

PORTB=0x00;
DDRB=0x00;

PORTC=0x00;
DDRC=0x00;

PORTD=0x7;
DDRD=0x00;

TCCR0=0x05;
TCNT0=0xFF;
OCR0=0x00;

TCCR1A=0x00;
TCCR1B=0x00;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;

ASSR=0x00;
TCCR2=0x00;
TCNT2=0x00;
OCR2=0x00;

MCUCR=0x00;
MCUCSR=0x00;

TIMSK=0x01;

ACSR=0x80;
SFIOR=0x00;

lcd_init(16);

#asm("sei")

while (1)
{delay_ms(100);
if (PIND.0==0){delay_ms(300); sek++;}
if (PIND.1==0){delay_ms(300); min++;}
if (PIND.2==0){delay_ms(300); ch++;}

if (sek>59){sek=0;min++;}
if (min>59){min=0; ch++;}
if (ch>23){ch=0;}


sprintf(lcd_buffer,"%d:%d:%d",ch,min,sek);



lcd_clear();
lcd_puts(lcd_buffer);





};
}

Vova0306
Сообщения: 10
Зарегистрирован: 14 окт 2010, 08:13

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

Сообщение Vova0306 » 14 окт 2010, 13:00

Вот
Вложения
.JPG
Вот схема в протеусе

Ответить

Кто сейчас на конференции

Сейчас этот форум просматривают: MailRu [Bot] и 0 гостей