想写一个测速器,检测两个中断口之间的延时,以测试速度,但是输出的值不准,往往实际上一秒他会输出018,两秒他会输出032这样的无效数字
#include <reg51.h>
///---------------------------------------申明区------------------------------------------------
unsigned char num,bai,shi,ge;
sbit iobai=P2^1;
sbit ioshi=P2^2;
sbit ioge=P2^3;
unsigned char i;
unsigned char code table[]= //1-0数码管代码
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//---------------------------------------void区--------------------------------------------------
void delay5ms(void) //误差 -0.000000000001us
{
unsigned char a,b;
for(b=15;b>0;b--)
for(a=152;a>0;a--);
}
void Timer0Interrupt(void) interrupt 1 //定时器,10ms自加1
{
TL0=0xFF;
TH0=0xB7;
num++;
}
void INIT1(void) interrupt 2
{
num=0;
}
void INIT0(void) interrupt 0 //中断
{
for(i=1000;i>0;i--)
{
P0=table[bai];
iobai=1;
delay5ms();
P0=0xff;
iobai=0;
P0=table[shi];
ioshi=1;
delay5ms();
P0=0xff;
ioshi=0;
P0= table[ge];
ioge=1;
delay5ms();
P0=0xff;
ioge=0;
num=0;
}
}
//--------------------------------------------主函数区-------------------------------------------
void main(void)
{
iobai=0;
ioshi=0;
ioge=0; //数码管禁止亮起
num=0;
TMOD|=0x01; //设置定时器0为方式1
TL0=0xFF; //设置定时器0初值低8位
TH0=0xB7; //设置定时器0初值高8位
EA = 1;
ET0 = 1;
TR0 = 1;//定时器设置
IT1=1; //下降沿触发方式
EX1=1; //外部INT1中断允许
IT0=1; //下降沿触发方式
EX0=1; //外部INT0中断允许
while(1)
{
bai=num/100%10;
shi=num/10%10;
ge=num%10;
}
}
|