gpt4 book ai didi

C-Pic 计数器问题

转载 作者:行者123 更新时间:2023-11-30 15:26:03 25 4
gpt4 key购买 nike

所以我使用的微型芯片是 PIC 18F。

如果设置了Alarm_Status.bits.b3(本质上只是一个开关),则会创建警报。第一个代码片段按其应有的方式工作

BS(TRISB,7);                                // Bund sw port=input.
DelayMs(2); // will rise is bund SW open
if(RB7){
if(Control.bits.BUND_ENABLE){ // if bund alarm enabled
if(Alarm_Status.bits.b3){ // if already set
DU_Reason.bits.EmergencyDialIn=1; // alarm!
}
}
Alarm_Status.bits.b3=0; // Bund Sw Open
}
else Alarm_Status.bits.b3=1; // Bund Sw Closed
BC(TRISB,7);

但是,我只想在开关设置一段时间后才发出警报,而不是立即设置开关时发出警报。该函数每秒调用一次。谁能指出我出错的方向。

        int count = 0;
int fixedCount = 20;
BS(TRISB,7); // Bund sw port=input.
DelayMs(2); // will rise is bund SW open
if(RB7){
if(Control.bits.BUND_ENABLE){ // if bund alarm enabled
if(Alarm_Status.bits.b3){ // if already set
count +=10; //count increased by 10
}
if(count == fixedCount) {
DU_Reason.bits.EmergencyDialIn=1;// alarm!
count = 0;
}
}
Alarm_Status.bits.b3=0; // Bund Sw Open
}
else
count = 0;
Alarm_Status.bits.b3=1; // Bund Sw Closed
BC(TRISB,7);

最佳答案

您可以将其计数设为静态。当前代码存在问题,每次实例之后,计数都会重新初始化为 0,因此,它永远不会达到 fixedCount

如果您将代码修改为:

#define FIXED_COUNT 20    //Why to waste memory??

void PollSwitch()
{
static int count = 0;

BS(TRISB,7); // Bund sw port=input.
DelayMs(2); // will rise is bund SW open

if(RB7)
{
if(Control.bits.BUND_ENABLE){ // if bund alarm enabled
if(Alarm_Status.bits.b3){ // if already set
count +=10; //count increased by 10
}
if(count == FIXED_COUNT ) {
DU_Reason.bits.EmergencyDialIn=1;// alarm!
count = 0;
Alarm_Status.bits.b3=0; //Alarm is raised, Open switch
}
}
// Alarm_Status.bits.b3=0; // Bund Sw Open <<< NOT NEEDED, IMO
}
else
{
count = 0;
Alarm_Status.bits.b3=1; // Bund Sw Closed
}
BC(TRISB,7);
}

关于C-Pic 计数器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27529561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com