求教啊!!单片机C语言 利用2个外部中断测量时间差

修节 2011-12-12 08:26:13
我利用2个外部中断,测量2个方波的时间差,通过时间-相位转换,求出余弦,这就是测功率因数的方法。但是我不知道我写的代码有什么错误:


#include <reg51.h>
#include <stdio.h>
#include<math.h>
#define uint unsigned int
#define uchar unsigned char
#define PI 3.14
uint num=0,t2;
float t,t1;
uchar shu1,shu2,shu3,shu4;
uchar code table[]={//码表
0x3f,0x06,0x5b,0x4f,
0x66,0x6d,0x7d,0x07,
0x7f,0x6f,0x77,0x7c,
0x39,0x5e,0x79,0x71};
void delay(uint z);//这个是数码管要用的
void display(uchar shu2,uchar shu3,uchar shu4);
void
main()
{
TMOD=0x01;//工作方式1
EA=1;
IT0=1;
IT1=1;//下降沿有效
EX0=1;
EX1=1;
TH0=0x00;
TL0=0x00;
while(1);
}

/*外部中断1*/
void
exter1() interrupt 2
{
TR0=1;

}

/*外部中断0*/
void
exter0() interrupt 0
{
TR0=0;
num++;
if(num==1)
{

EX0=0;
EX1=0; //下面是对时间处理
t=(TH0*256+TL0)*0.001;//读出定时器已经放得值
if(t>=5.0&&t<=10.0)
t=10-t;
else if(t>=10.0&&t<=15.0)
t=t-10;
else if(t>=15.0&&t<=20.0)
t=20.0-t;

t1=(float)t*2*3.14159/20;
t1=cos(t1);
t2=t1*10000;
shu2=t2/1000;
shu3=t2%1000/100;
shu4=t2/10%10;
display(shu2,shu3,shu4);//数码管显示
}

}

void
display(uchar shu2,uchar shu3,uchar shu4)
{

while(1)
{
P2=0xfe;//选中第一个数码管
P0=0xbf;
delay(1);


P2=0xfd;//选中第二个数码管
P0=table[shu2];
delay(1);

P2=0xfb;//选中第三个数码管
P0=table[shu3];
delay(1);

P2=0xf7;//选中第四个数码管
P0=table[shu4];
delay(1);
}

}

/*延时函数,1ms*/
void
delay(uint z)
{
uint x,y;
for(x=z;x>0;x--)
for(y=110;y>0;y--);
}

我从外部中断INT0、INT1同时输入各一个相同频率的有相位差的方波,通过外部中断得出时间差,对时间处理,得出功率因数。
但是数码管什么都不显示,位选全部是高电平。
求高手解答!!!!!!!!!!!!!
...全文
359 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
狂且 2011-12-16
  • 打赏
  • 举报
回复
中断里面最好只处理一些标志位或者简单的计数.

简单的处理调用放在主函数.

常用的较复杂的处理弄成专门的子函数.

这样就会好很多. 不然中断会出问题.

而且程序大了, 很难发现排除.
修节 2011-12-15
  • 打赏
  • 举报
回复
恩 我没有用到定时器1,只用了定时器0.谢谢你的回复,我也找到了问题所在和应该注意的地方:
1.中断程序太长,而且我的程序死在了中断程序里面,不会跳出来,这是不允许的,中断必须返回,所以向一些处理的程序还是在main()中。
2.是我将正弦波变成的方波,出现了失真(用示波器看波形不是很严格),而我用的是外部中断下降沿有效,那么方波不规范的话,根本不会触发中断。(根据是 “我在仿真的时候,如果直接用方波而不是用正弦波转换来的方波 可以显示”)。
chenhonglin000 2011-12-14
  • 打赏
  • 举报
回复
楼主在exter1() interrupt 2中TR0=1;但是貌似程序中就没有TR1 = 1 这句,应该是写漏了。在主函数结尾加上看能不能用。我也是个初学者,共同学习!

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧