|
想寫一個(gè)測(cè)速器,檢測(cè)兩個(gè)中斷口之間的延時(shí),以測(cè)試速度,但是輸出的值不準(zhǔn),往往實(shí)際上一秒他會(huì)輸出018,兩秒他會(huì)輸出032這樣的無效數(shù)字
#include <reg51.h>
///---------------------------------------申明區(qū)------------------------------------------------
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數(shù)碼管代碼
{0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
//---------------------------------------void區(qū)--------------------------------------------------
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 //定時(shí)器,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;
}
}
//--------------------------------------------主函數(shù)區(qū)-------------------------------------------
void main(void)
{
iobai=0;
ioshi=0;
ioge=0; //數(shù)碼管禁止亮起
num=0;
TMOD|=0x01; //設(shè)置定時(shí)器0為方式1
TL0=0xFF; //設(shè)置定時(shí)器0初值低8位
TH0=0xB7; //設(shè)置定時(shí)器0初值高8位
EA = 1;
ET0 = 1;
TR0 = 1;//定時(shí)器設(shè)置
IT1=1; //下降沿觸發(fā)方式
EX1=1; //外部INT1中斷允許
IT0=1; //下降沿觸發(fā)方式
EX0=1; //外部INT0中斷允許
while(1)
{
bai=num/100%10;
shi=num/10%10;
ge=num%10;
}
}
|
|