发表于:2008/12/16 11:26:00
#0楼
有不规则的脉冲
用芯片89S52的定时器T2,对其下降沿进行捕获、中断,然后中断子程序要处理两次中断时TH2之差,如何写中断子程序呢,我就是标志位不知道怎么放,就不会在产生中断的时候将两次TH2的值相减,因为在中断服务程序里将TH2之值付给了R0,再来一次中断TH2之值还是付给了R0,这样就无法将两次的数据相减。就不能比较两次的值。
望高手指点下!
我程序如下:
#include<reg52.h>
sbit P2_0=P2^0; //定义P2.0口
int R0,R1;
bit flag; //定义标志位
void timer2_interrupt(void) interrupt 5 using 1 //中断服务程序
{
flag=1; //置标志为1
}
void main()
{
EA=1; //打开中断
ET2=1; // 开定时器2
T2CON=0X09; //设置T2为捕获模式,下降沿则产生中断
if(flag)
{
R0=RCAP2H;
R1=RCAP2L;
if((R0*256+R1)>=(R2*256+R3)) //就是这儿我不知道怎么比较了。
{
R2=R0;R3=R1; //就是这儿我不知道怎么比较了。
}
else
TF2=0;
EXF2=0;
TH2=0;
TL2=0;
TR2=1;
}
flag=0;
}
用芯片89S52的定时器T2,对其下降沿进行捕获、中断,然后中断子程序要处理两次中断时TH2之差,如何写中断子程序呢,我就是标志位不知道怎么放,就不会在产生中断的时候将两次TH2的值相减,因为在中断服务程序里将TH2之值付给了R0,再来一次中断TH2之值还是付给了R0,这样就无法将两次的数据相减。就不能比较两次的值。
望高手指点下!
我程序如下:
#include<reg52.h>
sbit P2_0=P2^0; //定义P2.0口
int R0,R1;
bit flag; //定义标志位
void timer2_interrupt(void) interrupt 5 using 1 //中断服务程序
{
flag=1; //置标志为1
}
void main()
{
EA=1; //打开中断
ET2=1; // 开定时器2
T2CON=0X09; //设置T2为捕获模式,下降沿则产生中断
if(flag)
{
R0=RCAP2H;
R1=RCAP2L;
if((R0*256+R1)>=(R2*256+R3)) //就是这儿我不知道怎么比较了。
{
R2=R0;R3=R1; //就是这儿我不知道怎么比较了。
}
else
TF2=0;
EXF2=0;
TH2=0;
TL2=0;
TR2=1;
}
flag=0;
}
追寻BEYOND的声音! 听,多雄厚、多坚强~
~_^ 坚持信念,迎接挑战,只向前,永不退~
~_^ 坚持信念,迎接挑战,只向前,永不退~