初级会员

- 积分
- 72
- 金钱
- 72
- 注册时间
- 2014-3-11
- 在线时间
- 14 小时
|

楼主 |
发表于 2016-5-7 08:10:50
|
显示全部楼层
void T0_init()
{
// TCCR0A=0X0E; //ía2¿T0½ÅϽμÑØ′¥·¢¼Æêy£¬CTCÄ£ê½
TCCR0A=0X0F; //ía2¿T0½ÅshangÑØ′¥·¢¼Æêy£¬CTCÄ£ê½
TCNT0=0X00;
OCR0A=0x01; // OCR0A = 0x09(9),(9 + 1) = 2 2é¼ˉ10 £¬è»oóÇ󯽾ù
TIMSK0|=0X02;
}
void T2_init()
{
TCCR2A=0X0A; //ía2¿ê±Öó £¬8·ÖÆμ£¬CTCģ꽣¬ê±»ùÎa1us
TCNT2=0X00;
OCR2A=0X63; //OCR2A=0X63(99),(99+1)/1000=0.1MS
TIMSK2|=0X02;
}
//T/C0±è½ÏÆ¥ÅäÖD¶Ï·tÎñ£¬·¢¶ˉ»ú
#pragma interrupt_handler t0:11
void t0()
{
fadongjizhuansu_time2_new=TCNT2;
TCNT2=0;
TIFR0|=0X02;
fadongjizhuansu_shijian_H=fadongjizhuansu_freq;
fadongjizhuansu_freq=0;
fadongjizhuansu_ok=1;
}
#pragma interrupt_handler t2:5
void t2()
{
fadongjizhuansu_freq++;
SEI();// ¿aÖD¶Ï£¬ÔêDíÖD¶ÏǶì×£¬T/C0ÖD¶Ï¿é′ò¶Ï¸ÃÖD¶Ï·tÎñ
caiji_data();
display();
}
void main()
{
char i;
T2_init();
T0_init();
IO_init();
uart_init(9600);
for(i=0;i<=4;i++)
dis_buff=0;
SEI(); // ¿a·Å諾ÖÖD¶Ï
while(1)
{
if(fadongjizhuansu_ok) //·¢¶ˉ»ú
{
fadongjizhuansu_shijian=(fadongjizhuansu_shijian_H*100+fadongjizhuansu_time2_new)/2; //ÿ′Î2é¼ˉ10è|£¬Ç󯽾ù
fdjzhuansu=60000000/fadongjizhuansu_shijian; //·¢¶ˉ»úμÄ×aËù£¨Ã¿·ÖÖó£©
fadongjizhuansu=fdjzhuansu/100+1; // Ëí¸øéÏλ»úμÄêy,Ö»ÄüÏÔê¾1λ»òêÇ2λ
freq_to_disbuff();
fadongjizhuansu_ok=0;
}
else
fadongjizhuansu=0;
uart_TXB();
delay_MS(200);
}
}
这是部分程序,这种方式,没有输入脉冲的时候,转速也不清零。不知道怎么弄了,转速好像还有捕捉方式。跪求啊。
|
|