利用外部中断0测频率有问题
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
uchar f,pulse,t;
bit flat;
uint dis[3];
uchar con[]={0xfe,0xfd,0xfb,0xf7};
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit dula=P2^0;
sbit wela=P2^1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
void ini()
{
EA=1;
EX0=1;
ET0=1;
IT0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
}
void calcu()
{
dis[0]=f/1000;
dis[1]=f%1000/100;
dis[2]=f%100/10;
dis[3]=f%10;
}
void display()
{
uchar i;
for (i=0;i<4;i++)
{
P0=con[i];
wela=1;
wela=0;
P0=table[dis[i]];
dula=1;
dula=0;
delay(10);
}
}
void main()
{
ini();
while (1)
{
calcu();
display();
}
}
void int0() interrupt 0
{
pulse++;
if (flat==1)
{
flat=0;
f=pulse;
pulse=0;
}
}
void tim0() interrupt 1
{
TR0=0;
TH0=0x3c;
TL0=0xb0;
t++;
if (t==20)
{
flat=1;
}
TR0=1;
}
最后仿真不出来结果,显示为0是为什么?
#define uchar unsigned char
#define uint unsigned int
uchar f,pulse,t;
bit flat;
uint dis[3];
uchar con[]={0xfe,0xfd,0xfb,0xf7};
unsigned char code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90};
sbit dula=P2^0;
sbit wela=P2^1;
void delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=50;y>0;y--);
}
void ini()
{
EA=1;
EX0=1;
ET0=1;
IT0=1;
TMOD=0x01;
TH0=0x3c;
TL0=0xb0;
TR0=1;
}
void calcu()
{
dis[0]=f/1000;
dis[1]=f%1000/100;
dis[2]=f%100/10;
dis[3]=f%10;
}
void display()
{
uchar i;
for (i=0;i<4;i++)
{
P0=con[i];
wela=1;
wela=0;
P0=table[dis[i]];
dula=1;
dula=0;
delay(10);
}
}
void main()
{
ini();
while (1)
{
calcu();
display();
}
}
void int0() interrupt 0
{
pulse++;
if (flat==1)
{
flat=0;
f=pulse;
pulse=0;
}
}
void tim0() interrupt 1
{
TR0=0;
TH0=0x3c;
TL0=0xb0;
t++;
if (t==20)
{
flat=1;
}
TR0=1;
}
最后仿真不出来结果,显示为0是为什么?
proteus仿真

中断是不是没触发啊 你看看
可以讨论下
1002925094
我不知道啊,我用了脉冲发给P32口啊,就是部行,要么全是0。都快心塞死了。
你试试做一个开断和电源 开关开关给高低电平 看看外部中断进去了不
我试试吧,再不行就要爆炸了!
其实很简单的 一步一步调试 每个步骤都分别调试 模块化处理 再去合并在一起 比如 可以先分别单独调试 数码管显示 外部中断 定时中断 最后再合在一起 通过观察电平变化就知道问题在哪里了
我的显示没问题,我代了常数进去显示了的,定时器中断也没问题,很可能就是外部中断0出问题。
要哭了,外部按键中断可以计数。到底那里出问题了!要哭了
EX0=1啊
触发了啊
我最后将外部中断计数的n改成具体的数字,显示了后面有跳成了0是为啥?
开中断了吗?
没问题了,信号输入有问题,我改成了时钟脉冲就可以显示了。气死我了,调了一天半因为这个。
恩 之前我不是告诉你嘛 试试给它个高低电平
我之前是用按键了啊,没得问题,我一直没想到过是信号输入问题
