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

pic单片机c语言利用中断定时器,PIC单片机编程,程序运行总是出错,可能是程序跑飞了,求大虾指点迷津。还想加个定时器,...PIC 单片机编程 程序运行总是出错 可能是程序跑飞了 求大虾指点迷津 还想加个定时器 0 zgh 04 24 浏览 199 次分享举报 刚刚学 PIC 单片机编程 一个装置 在接受到中断时 装置不报警 没有接受到中断且检测到 CGQ 为 1 时 装置报警

大家好,我是讯享网,很高兴认识大家。

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

02ae427d08e371d7e90d5b995e828d6d.png
讯享网zgh.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);

}

}

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

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

小讯
上一篇 2025-01-05 11:11
下一篇 2025-02-17 20:36

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/26068.html