메뉴 바로가기

서브메뉴 바로가기

본문 바로가기

logo

묻고 답하기
WhiteAT2008.01.09 11:53
이 내용은 제가 앞에서 언급했던 내용인데..... 제 소스를 추가해드릴테니
참고해서 수정해 보세요.^^.
지금이라도 전체 구조를 변경하셔야 할듯합니다ㅡㅡ;

 //    250uS 마다 동작하고 4번 동작시 1ms 가 된다.
// Timer 0 output compare interrupt service routine
interrupt [TIM0_COMP] void OnTimer0_comp_isr(void)
{

        
        // 256uS X 4 마다 수행
        if(stateKeyInput.uiTimer0)        stateKeyInput.uiTimer0--;
        if(stateLedOut.uiTimer0)        stateLedOut.uiTimer0--;
    TCNT0    =0x00;    //위치 주의// 시간계산이 정확히 1mS로 안되기 때문에..
        if(stateDisplayLCD.uiTimer0)    stateDisplayLCD.uiTimer0--;

        if(stateOneSecond.uiTimer0)        stateOneSecond.uiTimer0--;


        if(stateOperLED.uiTimer0)        stateOperLED.uiTimer0--;
        if(statePIDCOOL.uiTimer0)        statePIDCOOL.uiTimer0--;
        if(statePIDHEAT.uiTimer0)        statePIDHEAT.uiTimer0--;
        if(statePIDHUMI.uiTimer0)        statePIDHUMI.uiTimer0--;
        if(stateFAN.uiTimer0)            stateFAN.uiTimer0--;


        if(stateMainClock.uiTimer0)        stateMainClock.uiTimer0--;
        if(stateADC.uiTimer0)            stateADC.uiTimer0--;
        if(infoReadTempHumi.uiTimer0)    infoReadTempHumi.uiTimer0--;
    
        if(stateOUT_main.uiTimer0)        stateOUT_main.uiTimer0--;
        if(stateCOMPCheck.uiTimer0)        stateCOMPCheck.uiTimer0--;
        if(stateComp1.uiTimer0)            stateComp1.uiTimer0--;
        if(stateComp2.uiTimer0)            stateComp2.uiTimer0--;


        if(stateDefrost.uiTimer0)        stateDefrost.uiTimer0--;
        if(stateDrain.uiTimer0)            stateDrain.uiTimer0--;

        
        if(stateHEATCheck.uiTimer0)        stateHEATCheck.uiTimer0--;
        if(stateHUMICheck.uiTimer0)        stateHUMICheck.uiTimer0--;

        if(stateErrorCheckWaterLeak.uiTimer0)        stateErrorCheckWaterLeak.uiTimer0--;
        if(stateErrorCheckRM.uiTimer0)        stateErrorCheckRM.uiTimer0--;
        if(stateErrorCheckFire.uiTimer0)        stateErrorCheckFire.uiTimer0--;
        
    
//    }
}


     while(1) { 

        #asm("WDR")
        OperatingOneSecond(&stateOneSecond);
        
          OperatingDisplayLCD();
        OperatingLedOut();
         OperatingRxFromMonitor();
         OperatingPID(&statePIDCOOL);
           OperatingRxFromPC();
        OperatingTxToPC();


         OperatingLED();
        OperatingADC();
        
    }


 void OperatingOneSecond(struct _FUNC_INFO *structThisState){
    if(structThisState->uiTimer0) return;
    structThisState->uiTimer0=1000;



    // ALARM OUT 
    if (IsSystemError())
    {
        OUTA_ON(OUTA_AL);
    }else{
        OUTA_OFF(OUTA_AL);

    }
}






사진 및 파일 첨부

여기에 파일을 끌어 놓거나 왼쪽의 버튼을 클릭하세요.

파일 용량 제한 : 0MB (허용 확장자 : *.*)

0개 첨부 됨 ( / )