/* * taptempo.cpp * * Created: 7-6-2019 20:53:38 * Author : ed */ #define F_CPU 16000000L #include #include #include #include #include #define OneQuarter_ON PORTD |= (1<=8000)&(Check_Start)) { Pulse_Width = 0; Start_Input_Trigger = false; } mSec_tick=true; } int main (void) { init(); Choosen_Released = true; SwitchValue = 1; OneQuarter_OFF;TwoQuarter_OFF;ThreeQuarter_OFF;FourQuarter_OFF;TheChoosen_OFF;//all outputs LOW Time_Between_Pulses = 500; Pulse_Width = 150; mSec_tick = true; sei(); // Enable the Global Interrupt Enable flag so that interrupts can be processed TCCR1B |= (1 << CS11);TIMSK1 |= (1 << OCIE1A);// enable timer compare interrupt: while(1) { uint8_t High_Time = 1; uint16_t Two_Quarter_Time = Time_Between_Pulses/2; uint16_t Three_Quarter_Time = Time_Between_Pulses/3; uint16_t Four_Quarter_Time = Time_Between_Pulses/4; for (uint16_t n=0;n<=Time_Between_Pulses;n++) { Got_Tick=false; if (n==0) {Tempi_out=0xF0;if ((SwitchValue==1)|(SwitchValue==2)|(SwitchValue==4)|(SwitchValue==8)){Got_Tick=true;}}//{OneQuarter_ON;TwoQuarter_ON;ThreeQuarter_ON;FourQuarter_ON;} if (n==High_Time){Tempi_out=0x00;}//{OneQuarter_OFF;TwoQuarter_OFF;ThreeQuarter_OFF;FourQuarter_OFF;} if (n==Four_Quarter_Time){Tempi_out=0x80;if (SwitchValue==8){Got_Tick=true;}} //{FourQuarter_ON;} if (n==(Four_Quarter_Time+High_Time)){Tempi_out=0x00;}//{FourQuarter_OFF;} if (n==Three_Quarter_Time){Tempi_out=0x40;if (SwitchValue==4){Got_Tick=true;}} //{ThreeQuarter_ON;} if (n==(Three_Quarter_Time+High_Time)){Tempi_out=0x00;}//{ThreeQuarter_OFF;} if (n==Two_Quarter_Time){Tempi_out=0xA0;if ((SwitchValue==2)|(SwitchValue==8)){Got_Tick=true;}} //{TwoQuarter_ON;FourQuarter_ON;} if (n==(Two_Quarter_Time+High_Time)){Tempi_out=0x00;}//{TwoQuarter_OFF;FourQuarter_OFF;} if (n==(Three_Quarter_Time<<1)){Tempi_out=0x40;if (SwitchValue==4){Got_Tick=true;}} //{ThreeQuarter_ON;} if (n==(High_Time+(Three_Quarter_Time<<1))){Tempi_out=0x00;}//{ThreeQuarter_OFF;} if (n==(Four_Quarter_Time*3)){Tempi_out=0x80;if (SwitchValue==8){Got_Tick=true;}} //{FourQuarter_ON;} if (n==(High_Time+(Four_Quarter_Time*3))){Tempi_out=0x00;}//{FourQuarter_OFF;} while (!(mSec_tick));// wait for interrupt flag PORTD = 0x0F | Tempi_out; if (Got_Tick) { PORTB|=0x01; //Chose output goes high }else PORTB=0x00; //Chose output goes or stays low mSec_tick=false; GetTheSwitches=(PINC&0x30); //looking at PC4 and PC5 while (GetTheSwitches==0x30){GetTheSwitches=(PINC&0x30);} // if the switch is in mid position, all outputs are halted if (GetTheSwitches&0x10){OCR1A = 0x0400;} // 0.5mSec else OCR1A = 0x0800;// 1mSec NewSwitchValue=0x0F-(PINC&0x0F); // Check to see if a SET xN switch is pressed if (NewSwitchValue!=0){SwitchValue=NewSwitchValue;} } } }