请问利用51单片机怎么测100兆Hz的高频方波,显示在数码管上,如图是Proteus仿真和keil代码,100khz还能测出来,到了1M10Mhz数码管就不显示了,请问为什么,怎么改才行,谢谢大佬们。- #include <REGX51.H>
- #include <intrins.h>
- unsigned long int count,count_end;
- unsigned int ans;
- unsigned char flag;
- unsigned char b[8];
- unsigned char duan[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
- unsigned char wei[]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
- void Delay10us() //@12.000MHz
- {
- unsigned char i;
- _nop_();
- _nop_();
- i = 27;
- while (--i);
- }
- void delay(unsigned int ms) {
- unsigned int i, j;
- for (i = 0; i < ms; i++) {
- for (j = 0; j < 114; j++) {
- Delay10us();
- }
- }
- }
- void chushi(){
- TMOD=0x15; //1定时器 0计数器
- TH0=0;
- TL0=0;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- ET1=1;
- ET0=1;
- TR0=1;
- TR1=1;
- EA=1;
- }
- void main(){
- unsigned int k;
- P0=0xff;
- chushi();
- while(1){
- if(flag==1){
- for(k=0;k<8;k++){
- P2=wei[k];
- P0=duan[b[k]];
- Delay10us();
- }
- }
- }
- }
- void it_0() interrupt 1
- {
- TH0=0;
- TL0=0;
- count++;
- }
- void it_1() interrupt 3
- {
- ans++;
- TH1=(65536-50000)/256;
- TL1=(65536-50000)%256;
- if(ans==20){
- count_end=count*65536+((TH0 << 8) | TL0);
- b[0]=count_end/10000000; //10M
- b[1]=(count_end%10000000)/1000000;
- b[2]=(count_end%1000000)/100000;
- b[3]=(count_end%100000)/10000;
- b[4]=(count_end%10000)/1000;
- b[5]=(count_end%1000)/100;
- b[6]=(count_end%100)/10;
- b[7]=count_end%10;
- flag=1;
- TR0=0;
- TR1=0;
- }
- else{
- delay(10);
- }
- }
复制代码
|