/* * Author: Jerome Kerdreux, Copyright: GPL * * * Chip type : ATMEGA8 * Clock frequency : Internal clock 1 Mhz (factory default) */ #include #include #include #include "test_avr.h" #include "avr_compat.h" #include "lcd.h" #define TIMERINI 256-72 #define TIMERCON 0x05 volatile int uptime; void delay_ms(unsigned short ms) /* delay for a minimum of */ /* with a 1Mhz clock, the resolution is 1 ms */ { uint8_t inner,inner1; while (ms) { inner = 100; while (inner) { inner--; inner1 = 70; while (inner1) { inner1--; } } ms--; } } void flashled() { if bit_is_set(PORTD,PD5) { cbi(PORTD,PD5); } else { sbi(PORTD,PD5); } } SIGNAL(SIG_OVERFLOW0) { uptime ++; return 0; } void debug(char *msg) { lcd_gotoxy(0,0); lcd_puts(msg); delay_ms(1000); } void inittimer() { // 1024 prescaler sbi(TCCR0,CS02); cbi(TCCR0,CS01); sbi(TCCR0,CS00); // set the interrupt handle //sbi(TIMSK,TOIE0); uptime = 0; } int main(void) { char line[16]; sbi(DDRD,PD5); lcd_init(LCD_DISP_ON); lcd_clrscr(); debug("LCD Ok"); // init the the timer sprintf(line,"TCCR0 %x" , TCCR0); debug(line); inittimer(); sprintf(line,"TCCR0 after %x" , TCCR0); debug(line); // flashled(); sei(); debug("Sei Ok"); while (1) { delay_ms(500); lcd_gotoxy(0,0); sprintf(line,"Timer: %d " , uptime); lcd_puts(line); lcd_gotoxy(0,1); sprintf(line,"TCNT0: %x " , TCNT0); lcd_puts(line); flashled(); } return 0; }