void timer_interrupt() { static UINT8 pin; static UINT8 on; /* reset the timer */ HWREG(TCNT0) = 256-DELAY; toggle_pin(DRV_PORTB+DRV_GPIO_PORT_OFFSET,pin); /* increment to next pin after toggle on/off once. */ if ( pin < 8 ) { if ( on<1 ) { on++; } else { pin += 1; on = 0; /* if the operator is pressing the current button then reset the count */ if ( drvTestBit(DRV_PORTD,DRV_GPIO_PIN_OFFSET,pin) ) pin = 0; } } else pin = 0; }
void flash() { toggle_pin(flash_port, flash_pin); }
void main() { volatile uchar nPulse = 0; // numero dell'impulso da controllare. if==0 allora vai CONTINUO. volatile uchar loopCounter = 0; volatile uchar delayKeyb = 250; rom char *BLANK16 = " "; // nPSA = Tmr0Value; nPSA = 0; mSecScale = 0; TMRO_TabEntry = 0; irqType = 0; KeybValue = 0; // valore del HC148 uchar j; // uchar Tmr0Value = eeprom_read(_EEPROM); Init_Registers(); initPorts(); LCD_initialize(); LCD_Clear(); // intcon_RBIE = 1; // Change of state (COS) on RB4 to RB7 // stTMR0.tmr0Value = TMR0_vals[mSecScale]; // stTMR0.delayVal = TMR0_cntr[mSecScale]; // stTMR0.psaValue = TMR0_psa[mSecScale]; // stTMR0.scale = mSecSCALE[mSecScale]; stTMR0.tmr0Value = TMR0_vals[mSecScale]; stTMR0.delayVal = TMR0_delay[mSecScale]; stTMR0.psaValue = TMR0_psa[mSecScale]; stTMR0.scale = mSecSCALE[mSecScale]; stTMR0.extraCounter = TMR0_cntr[mSecScale]; delayNum = 0; while (1) { clear_wdt(); displayCfgValues(); loopCounter++; if (loopCounter > 3) delayKeyb = 200; // Next wait più basso if (loopCounter >10) delayKeyb = 10; // Next wait più basso readKeyboard(delayKeyb); // LCD_printf(0,0, "KEYB: %02X", KeybValue); switch (KeybValue) { // Value of PSA 0x00 to 0x07 case KEY_PSA_UP: case KEY_PSA_DN: stTMR0.psaValue++; if (stTMR0.psaValue > 0x08) stTMR0.psaValue = 0x00; continue; // increments the TMR0 value by 4096 units case TMR0_UP_0x1000: stTMR0.extraCounter++; continue; // increments the TMR0 value by 256 units case TMR0_UP_0x0100: stTMR0.tmr0Value += 0x0100; continue; // increments the TMR0 value by 16 units case TMR0_UP_0x0010: stTMR0.tmr0Value += 0x0010; continue; // decrements the TMR0 value by 1 units case TMR0_UP_0x0001: stTMR0.tmr0Value++; continue; // value of time to select (1mSec, 10mSec, 100mSec, 1Sec) case KEY_mSecSCALE: case KEY_mSecSCALE_DN: TMR0_psa[mSecScale] = stTMR0.psaValue ; TMR0_cntr[mSecScale] = stTMR0.extraCounter; TMR0_vals[mSecScale] = stTMR0.tmr0Value ; mSecSCALE[mSecScale] = stTMR0.scale ; mSecScale++; if (mSecScale > 4) mSecScale = 0; stTMR0.psaValue = TMR0_psa[mSecScale]; stTMR0.extraCounter = TMR0_cntr[mSecScale]; stTMR0.tmr0Value = TMR0_vals[mSecScale]; stTMR0.scale = mSecSCALE[mSecScale]; continue; case TMR0_DN_0x1000: stTMR0.extraCounter--; continue; // decrements the TMR0 value by 256 units case TMR0_DN_0x0100: stTMR0.tmr0Value -= 0x0100; continue; // decrements the TMR0 value by 16 units case TMR0_DN_0x0010: stTMR0.tmr0Value -= 0x0010; continue; // decrements the TMR0 value by 1 units case TMR0_DN_0x0001: stTMR0.tmr0Value--; continue; case KEY_START2: case KEY_START: openGate(); continue; // decrements the TMR0 value by 4096 units default: break; } toggle_pin( MyLED ); // attento al ';' finale se metterlo nella MACRO o meno TMR0_GATE_LINE = 0; //Turn OFF Gate line intcon_RBIE = 1; //Enable PortB4-7 IRQ sleep(); intcon_RBIE = 0; //Disable PortB4-7 IRQ delayKeyb = 250; // valore di default } }
void KeyBoard_SetTMR0() { uchar KeybValue; uchar delayKeyb; uchar loopCounter = 0; bool LOOP = true; LCD_Clear(); LCD_printRom(0,0, romStr_SETTING_TRM0_STRING); // delay_s(3); delay_ms(250); while (LOOP) { clear_wdt(); delayKeyb = 100; // valore di default if (loopCounter++ > 3) delayKeyb = 1; // Next wait più basso delay_ms(delayKeyb); // -- Leggiamo i dati dalla porta KeybValue = readPortB47(); displayTMRValues(); switch (KeybValue) { // value of time to select (1mSec, 10mSec, 100mSec, 1Sec) case TMR0_mSecSCALE: case TMR0_mSecSCALE_DN: gcGateIndex++; if (gcGateIndex >= MAX_nGATEs) gcGateIndex = 0; pTMR = &stTMR[gcGateIndex]; // change pointer to TMR0 value for the selected scale continue; // increments the ExtraCounter case TRM0_ExtraCounter: pTMR->extraCounter++; continue; // increments the ExtraDelay case TMR0_ExtraDelay: pTMR->delay++; continue; // increments the TMR0 value by 256 units case TMR0_UP_0x0100: pTMR->tmr += 0x0100; continue; // increments the TMR0 value by 16 units case TMR0_UP_0x0010: pTMR->tmr += 0x0010; continue; // decrements the TMR0 value by 1 units case TMR0_UP_0x0001: pTMR->tmr++; continue; // increments the ExtraCounter case TRM0_ExtraCounter_DN: pTMR->extraCounter--; continue; // increments the ExtraDelay case TMR0_ExtraDelay_DN: pTMR->delay--; continue; // decrements the TMR0 value by 256 units case TMR0_DN_0x0100: pTMR->tmr -= 0x0100; continue; // decrements the TMR0 value by 16 units case TMR0_DN_0x0010: pTMR->tmr -= 0x0010; continue; // decrements the TMR0 value by 1 units case TMR0_DN_0x0001: pTMR->tmr--; continue; //case TMR0_TEST_GATE: // openTMR0Gate(); // openTMR0Gate(pTimerX); // openTMR1Gate(); // continue; case TMR0_EXIT: if (loopCounter == 0) { // Next wait più basso LOOP = false; break; } else continue; default: break; } if (fSTART_KEY == true) { fSTART_KEY = false; LCD_Clear(); return; // LOOP = false; } // Waiting for Keyboard irq RBIF_intcon = 0; //IRQ-Flag RB7:RB4 pins changed state sleep(); // ripristiniamo alcune variabili al loro default loopCounter = 0; // reset counter toggle_pin( MyLED ); // attento al ';' finale se metterlo nella MACRO o meno } return; }
void toggle_e_pin () { toggle_pin (&LCD_CTL_PORT, LCD_E_PIN); }