|
unsigned char time_1ms_ok;
unsigned int time0_old,time0_new,freq_time;
unsigned int freq;
void Initial(void)
{
// __EEGET(OSCCAL,EE_OSCCAL);
DDRB =0xC0; //PB2输出
PORTB = 0xff;
DDRC =0x30; //PB3-5输出
PORTC |= 1<<2; //模式选择输入
DDRD |= 0x1f; //PD1,4-5输出
PORTD |= 1<<7;
TCCR1B = 0x00; //stop
TCNT1H = 0x00 /*INVALID SETTING*/; //setup
TCNT1L = 0x00 /*INVALID SETTING*/;
TCCR1A = 0x00;
TCCR1B = 0x06; //start Timer
TCCR2=0x0C; // 内部时钟,32分频(4M/32=125KHz),CTC模式
TCNT2=0x00;
OCR2=0x7C; // OCR2 = 0x7C(124),(124+1)/125=1ms
TIMSK=0x80; // 允许T/C2比较匹配中断
Init_1621();
HT1621_all_off();
__enable_interrupt();
}
#pragma vector=TIMER2_COMP_vect
__interrupt void TIMER2_OVF_ISR( void ) //T0溢出中断
{
static unsigned char cnt;
time0_new=TCNT1;
time_1ms_ok = 1; //1ms定时到
}
//主函数
int main(void)
{
Initial();
while(1)
{
if (time_1ms_ok)
{ // 累计T/C1的计数值
if (time0_new >= time0_old) freq = freq + (time0_new - time0_old);
else freq = freq + (65535 - time0_old + time0_new);
time0_old = time0_new;
if (++freq_time >= 100)
{
freq_time = 0; // 100ms到,
// ShowData(freq); // 将100ms内的脉冲计数值送显示 但是显示这个始终为0
ShowData(time0_old); //显示这个值是有变化的,可以看到频率一直在往上加
freq = 0;
}
time_1ms_ok = 0;
}
}
}
马老师: 你好,我想请问一下,我这个程序为什么显示freq的时候始终为0呀,//显示time0_old或time0_new这个值是有变化的,可以看到频率一直在往上加.可是为什么freq会一直为0
晶振用的是内部8M的, 单片机型号是mega8
|
阿莫论坛20周年了!感谢大家的支持与爱护!!
月入3000的是反美的。收入3万是亲美的。收入30万是移民美国的。收入300万是取得绿卡后回国,教唆那些3000来反美的!
|