PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,0
zgh7732013.04.24浏览199次分享举报
刚刚学PIC单片机编程,一个装置,在接受到中断时,装置不报警,没有接受到中断且检测到CGQ为1时,装置报警。但是程序出来总是出错,没有接受到中断,CGQ为1,它不报警。接受到中断,它反而报警。总之结果不稳定,不是想要的结果,有些怀疑是不是程序跑飞了,程序如下,求大虾指点,哪个地方出错了。
#include
__CONFIG(0x3f3a);
#define uchar unsigned char
#define uint unsigned int
#define CGQ RD2 //CGQ通断信号
#define silencer RD0 //消音控制信号
#define TSIG RB0 //测试仪中断信号
volatile short s=0;
void inital_I0(); //IO口初始化
void INITinterrupt(); //中断初始化
void delay(int z); //延时程序
void alarm_silencer(); //报警程序
void inital_IO()
{
TRISD0=1; //RD0口设置为输入,消音控制信号输入
TRISD2=1; //RD2口设置为输入,CGQ通断信号输入
TRISB0=1; //RB0口为输入, 中断输入
TRISE1=0; //RE1口设置为输出,报警输出
}
void INITinterrupt() //B0口外部中断初始化
{
INTEDG=0; //下降沿触发
INTF=0;
INTE=1;
GIE=1;
}
void delay(int z)
{
int x,y;
for(x=z;x>0;x--);
for(y=10000;y>0;y--);
}
void alarm_silencer()
{
if(s==0&CGQ==1)
{
delay(100);
if(s==0&CGQ==1)
{
delay(100);
RE1=1; //报警控制信号输出
delay(1000);
while(silencer==1)
{
RE1=1;
delay(1000);
} //持续报警,直到消音信号出现
RE1=0;
delay(100);
}
}
}
void interrupt test(void) //中断服务程序
{
if(INTF)
{
count_s=count_s+1; //合格产品计数
s=1;
INTF=0; //中断标志位清零
CGQ=1;
}
}
void main(void)
{
inital_IO();
INITinterrupt();
while(1)
{
s=0;
if(CGQ==0)
{
delay(100);
if(!CGQ);
{
alarm_silencer();
}
}
delay(1000);
}
}
还有想在中断程序里加个定时器去抖,要怎么加,直接写个定时器程序吗?怎么写比较好呢?最好能有具体的程序。
如果切实可行,还会追加分数。谢谢各位帮忙了。