大家好,程序经修改,在PROTEUS仿真的时候测量的数据挺准确的,如70KHZ时COUNT值为14,但实际烧到板上来就差得很远,而且无法测出是哪个值?这是为什么? //有触发器和没触发器两种方法都试过。 #include<reg52.h> #define uchar unsigned char #define uint unsigned int sbit P1_0=P3^4; sbit LED=P1^1; sbit int1=P3^3; sbit LED1=P1^0; sbit LED2=P1^1; sbit LED3=P1^2; uint count; uint i; double period; bit rflag=0; void control(void) { TMOD=0x10; //定时器1方式1,不受GATE影响 IT1=1; //下降沿触发 TH1=0;TL1=0; // P1_0=0; P1_0=1; EX1=1; ET1=1; //启动T/C1开中断 } void int_1(void) interrupt 2 using 1 { if(i==0) {TR1=1;i++;}//启动定时器计数 else {EA=0;TR1=0; count=TL1+TH1*256; //取计数值 //count=TH1; //count=count<<8; rflag=1; //设标志 EX1=0;} } void main(void) { control(); P2=0xf0; P1=0xf0; EA=1; //TH1=8; //count=TH1; //count=count<<8; //TH1=2;TL1=3; //count=TH1*256+TL1; while(rflag==0); //等待一周期 period=(double)count/11.0592*12/2;//period为实际的周期 //if(count>=(3645)) P1=0xff; //500HZ:不对 //if(count<=(3649)) P2=0xff; if(count>=14) LED1=1;// 70KHZ,p1.0 if(count<=15) LED2=1;//p1.1 else LED3=1;//p1.2 while(1){EA=0;} }
|