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