Преброяване на времевия интервал на импулсите - Да се научим да работим с AVR - Каталог на статиите - Лаборатория
или попълнете нашата SMS касичка
-->--> |
-->Начало » -->Статии » Да се научим да работим с AVR |

200?'200px':''+(this.scrollHeight+5)+'px');"> //Тип чип: ATmega8 //AVR тактова честота на ядрото: 8.000000 MHz B.0
void tmr_start() < TCNT1=0; //Нулиране на брояча //Задаване на делител 64 //MC честота 8000KHz/256=31.25KHz //31250 тика в секунда, времеви интервал преди препълване 65536/31250=2.097152s TCCR1B=0x04; >
void tmr_stop(void) < TCCR1B=0x00; //Изключване на брояча >
//Външно прекъсване прекъсване [EXT_INT0] void ext_int0_isr(void) < tmr_stop(); //Спиране на брояча //[Брояч]/(31250/1000)=интервал в ms //Запазване за показване в променлива show_data show_data=TCNT1/31.25; tmr_start(); //Активиране на брояча >
//Препълване на брояча на прекъсване 1 прекъсване [TIM1_OVF] void timer1_ovf_isr(void) < tmr_stop(); //Спиране на брояча TCNT1--; //Задайте максималната стойност на брояча >
void shiftbit(unsigned char newbit) < ако (нов бит!=0) DS=1; SH_CP=1; SH_CP=0; DS=0; ST_CP=1; ST_CP=0; >
//Показване на цифрите на числото void dig_show(void) < неподписани char данни[2]; unsigned char i; ако (диг_номер==0) dig_data=покажи_данни; данни[0]=dig_data%10; dig_data/=10; данни[0]=led_table[данни[0]]; данни[1]=1 >=1; > for (i=0;i >=1; > dig_number++; if (dig_number>3) dig_number=0; >
void main(void) < DDRB=7; //Изход за седем сегмента TCCR1A=0x00; //Задаване на нормален режим на брояча, максималната стойност е 0xffff //Задаване на външно прекъсване INT0, чрез повишаване на нивото GICR=0x40; MCUCR=0x03; GIFR=0x40; TIMSK=0x04; //Прекъсване за брояч 1 #asm("sei") //Разрешаване на прекъсване докато (1) < dig_show(); //Показване на битове delay_ms(10); > >