所以我使用的微型是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 :(得分:1)
您可以将count
设为静态。当前代码出现问题,在每个实例之后,count会重新初始化为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);
}