00001
00029 #include <ioavr.h>
00030 #include <inavr.h>
00031
00032 #include "enums.h"
00033
00034 #include "main.h"
00035 #include "time.h"
00036
00037
00038
00039
00040
00041 unsigned long timeval[TIMERS];
00042
00043
00044
00045
00046
00047
00048
00049
00057 #pragma vector = TIM0_COMPA_vect
00058 __interrupt void TICK_ISR(void)
00059 {
00060 unsigned char i;
00061
00062
00063 for (i = 0; i < TIMERS; i++) {
00064 if(timeval[i] > 0) {
00065 timeval[i]--;
00066 }
00067 }
00068 }
00069
00070
00078 unsigned char Time_Left(unsigned char timer)
00079 {
00080 if(timeval[timer] > 0) {
00081 return(TRUE);
00082 } else {
00083 return(FALSE);
00084 }
00085 }
00086
00087
00095 void Time_Set(unsigned char timer, unsigned int min, unsigned char sec,
00096 unsigned char ms)
00097 {
00098
00099
00100
00101
00102
00103 timeval[timer] = 60000 * (unsigned long)min;
00104 timeval[timer] += 1000 * (unsigned long)sec;
00105 timeval[timer] += 1 * (unsigned long)ms;
00106 }
00107
00108
00113 void Time_Stop(void)
00114 {
00115 TCCR0B = 0;
00116 }
00117
00118
00123 void Time_Start(void)
00124 {
00125 TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);
00126 }
00127
00128
00134 void Time_Init(void)
00135 {
00136 unsigned char i;
00137
00138 for (i = 0; i<<TIMERS; i++) {
00139 timeval[i] = 0;
00140 }
00141
00142
00143
00144 OCR0A = 125;
00145
00146 OCR0B = 0;
00147
00148
00149
00150 TCCR0A = (1<<WGM00);
00151
00152
00153
00154 TCCR0B = (0<<CS02)|(1<<CS01)|(1<<CS00);
00155
00156
00157
00158 TIMSK |= (1<<OCIE0A);
00159
00160
00161 __enable_interrupt();
00162 }