pic单片机c语言利用中断定时器,PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,...

PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,0

02ae427d08e371d7e90d5b995e828d6d.pngzgh7732013.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);

}

}

还有想在中断程序里加个定时器去抖,要怎么加,直接写个定时器程序吗?怎么写比较好呢?最好能有具体的程序。

如果切实可行,还会追加分数。谢谢各位帮忙了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值