使用51单片机,对外部方波脉冲进行不限时脉冲计数,遇到了困难,希望有大神替我解答

2019-07-18 09:40发布

我采用T0计数,采用工作方式2,每当用脉冲输入到T0端时,变量加一,并在主程序等待中断的循环体内输出并显示脉冲个数 捕获.PNG

以下是我的代码
#include<reg51.h>
unsigned int cnt_t0,cnt_t1,qian,bai,shi,ge,bb,wan,shiwan;
unsigned int num;
unsigned char code table[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //共阴极数码管断码表

void delay1ms(unsigned int z) //延时1ms程序
{
  unsigned char i,j;
  for(i=0;i<z;i++)
  for(j=0;j<110;j++);
}
                                                                                 
void init()           //T0初始化
{
  num=0;
  TMOD=0x06;
  TH0=255;
  TL0=255;
  ET0=1;
  EA=1;
  TR0=1;
}

void display(unsigned long num_num)           //驱动数码管显示
{
  shiwan=num_num%1000000/100000;
  wan=num_num%100000/10000;
  qian=num_num%10000/1000;
  bai=num_num%1000/100;
  ge=num_num%100/10;
  P0=0xdf;    //P0是位选
  P2=table[shiwan];
  delay1ms(1);
  P0=0xef;
  P2=table[wan];
  delay1ms(1);
  P0=0xf7;
  P2=table[qian];
  delay1ms(1);
  P0=0xfb;
  P2=table[bai];
  delay1ms(1);
  P0=0xfd;
  P2=table[shi];
  delay1ms(1);
  P0=0xfe;
  P2=table[ge];
  delay1ms(1);
}

void main()
{
  P0=0xff;
  init();
  while(1)
  {
     display(num);
        }
}

void timert0() interrupt 1
{
  num++;
}


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
就这个feel
1楼-- · 2019-07-18 11:43
但是经过手动输入脉冲发现,每十个脉冲才会记一次数,不知道为什么
15270567024
2楼-- · 2019-07-18 14:42
 精彩回答 2  元偷偷看……
houjue
3楼-- · 2019-07-18 17:39
用软件仿真看看是那个语句有问题,或硬件仿真也可以。
就这个feel
4楼-- · 2019-07-18 22:27
15270567024 发表于 2017-5-6 15:57
初始化好像错了,就不应该填值进去,还有此处不应该有中断,只是计数而已,你可以再看看计数模式的使用

初始化不应该填进去?你确定,不填进去系统怎么知道你是什么中断,中断是否允许,不应该用中断?我就是用的t0计数,计数满了就溢出开始执行中断里的程序啊,不应该吧
chenzhuang512
5楼-- · 2019-07-19 02:36
顶顶顶顶顶顶顶顶

一周热门 更多>