2014-12-17 6 views
0

그래서 사용중인 마이크로는 PIC 18F입니다.C-Pic 카운터 문제

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);  
+3

'count' 변수는 글로벌해야한다. –

+0

"Bund"는 영어가 아닙니다. 그렇습니까? 중요한 단어처럼 보입니다. – unwind

+0

번들 센서가 실제로 들리지는 않았는지 알고 있습니다. 분명히 아닙니다. 어쨌든 덕분에 알렉 스는 그것을 세계적으로 선언하면 좋은 환호를 받았습니다. – NewLook

답변

1

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);  
}