单片机新手~!频率计程序,proteus仿真木有响应,求指点!

2019-07-15 20:15发布

本人电信专业大三在读,老师讲的汇编太复杂,就自己弄了个板子来学c语言编程。但是频率计要用到脉冲信号,就只有先用proteus仿真了,各位大神有时间就帮小妹我看一看了。不甚感激!(*^__^*) ---

#include<reg52.h>
#include<intrins.h>
#define uint unsigned int
#define uchar unsigned char
sbit dula=P2^6;
sbit wela=P2^7;
uchar temp,t;
uchar a,b,flg;
uchar count[6];
uchar code table[]={
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void init();
void delay(uint z);
void display(uchar m,uchar n);
void fun(uchar x,uchar y);
uchar  kkk(uchar p,uchar q);
void main()
{
    uchar sum;
    flg=0;
  t=0;
temp=0;
init();
while(flg)
{
    if(flg==1)
   {
             flg=0;
             sum=TL1+TH1*256+temp*65536;  //sum为五秒内所获得的脉冲总数
    a=temp/5/1000;    //获取频率数最高三位
          b=temp/5%1000;   //获取低三位
    TR0=0;   
    }
    display(a,b);   //显示
}
}
  
void init()
  {
   TMOD=0x15;//设置定时器0为工作方式1,以及计数器1工作方式为1
EA=1;//开总中断
ET0=1;//开定时器0中断
ET1=1; //开计数器1中断
TR0=1;//启动定时器0
TR1=1;//启动计数器1
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TH1=0x00;
TL1=0x00;
  }



//延时函数
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
  for(y=110;y>0;y--);
}
//显示函数
void display(uchar m,uchar n)
{
count[0]=m/100;
fun(count[0],0);
count[1]=m%100/10;
fun(count[1],1);
count[2]=m%100%10;
fun(count[2],2);
count[3]=n/100;
fun(count[2],2);
count[4]=n%100/10;
fun(count[2],2);
count[5]=n%100%10;
fun(count[2],2);

}
//统一化每个数码管的位选字选
void fun(uchar x,uchar y)
{
        uchar w=0xfe;
     dula=1;
  P0=table[x];
  dula=0;
  wela=1;
  P0=kkk(w,y);
  wela=0;
  delay(1);
}
//位选函数
uchar  kkk(uchar p,uchar q)
{
p=_crol_(p,q);
return p;
}
//定时器工作中断内容
void time0() interrupt 1
{
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
     t++;
  if(t==100)//当计时5秒时将计数器停止工作
  {
    flg=1;
    t=0;
    TR1=0;
   }
      
}
//计数器工作中断内容
void count1() interrupt 3
{
TH1=0x00;
TL1=0x00;
temp++;
}

程序感觉是没问题的,可是接到proteus里没有反应。本人的想法是在他T1计数器那里接方波脉冲,这样就可以凭下降沿个数来知道一秒内有多少个脉冲,从而计算脉冲频率。或者是要用外部中断接脉冲?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。