switch (new_PORTA) { //PORTA переводится в высокое состояние
case 0x01: //РАО "R-PREAMP-PWR" (0000_0001)
if (process_valid_input_PORTA(new_PORTA)) {
preamp_off();
keep_going=0;
}
break;
case 0x02: //PA1 R-PHONO" (0000_0010)
if (which_input != 1) {
if (process_valid_input_PORTA(new_PORTA)) {
which_input = 1;
change_input();
}
}
break;
case 0x04: //PA2 "R-CD" (0000_0100)
if (which_input != 2) {
if (process_valid_input_PORTA(new_PORTA)) {
which_input = 2;
change_input();
}
}
break;
case 0x08: //РАЗ "R-TUNER" (0000_1000)
if (which_input != 3) {
if (process_valid_input_PORTA(new_PORTA)) {
which_input = 3;
change_input();
}
}
break;
case 0x10: //PA4 "R-TAPE#1" (0001_0000)
if (which_input != 4) {
if (process_valid_input_PORTA(new_PORTA)) {
which_input = 4;
change_input();
}
}
break;
case 0x20: //PA5 "R-TAPE#2M (0010_0000)
if (which_input != 5) {
if (process_valid_input_PORTA(new_PORTA)) {
which_input = 5;
change_input();
}
}
break;
case 0x40: //PA6 "R-ДОПОЛНИТЕЛЬНЫЙ КАНАЛ" (0100_0000)
if (which_input != 6) {
if (process_valid_input_PORTA(new_PORTA)) {
which_input = 6;
change_input();
}
}
break;
case 0x80: //PA7 "R-MUTE" (1000_0000)
if (process_valid_input_PORTA(new_PORTA)) {
mute_toggle();
}
break;
default:; //all other cases
} //конец switch(new_PORTA)
}//конец if new_PORTA
old_PORTA = new_PORTA; //изменяется состояние PORTA
}
//******************************************************************
//initialize_timer:установка частоты таймера обслуживающего счетчик
//******************************************************************
void initialize_timer(void) {
TMSK2 = 0x05; //установка на 250 КГц
TSCR = 0x80; //разрешение работы таймера
}
//******************************************************************
//initialize_ports: начальная конфигурация портов
//******************************************************************
void initialize_ports(void) {
DDRA=0x00; //конфигурация PORTA в качестве входного
PORTA=0x00; //запрет на подключение подтягивающих резисторов в PORTA
DDRB=0x00; //конфигурация PORTB в качестве входного
PORTB=0xff; //разрешение подключения подтягивающих резисторов в PORTB
DDRT=0xff; // конфигурация PORTT в качестве выходного
PORTT=0x00; // установка на низкий уровень
DDRP=0xff; // конфигурация PORTD в качестве выходного
PORTP=0xff // установка на высокий уровень
}
//******************************************************************
//******************************************************************
//initialize_pins: установка отдельных выводов
//******************************************************************
void initialize_pins(void) {
PORTT=0x01; //сброс реле PT0(1) 5 мс импульс с
// активным уровнем (0000_0001)
//delay_5ms():
PORTT=0x00;
}
//******************************************************************
//delay_5ms: Задержка на 5 мс сформированная из базе частоты таймера
//в 250 кГц
//******************************************************************
void delay_5ms(void) {
int i;
for(i=0; i<1250; i++)
asm("nop"); //требуется только один импульс таймера
}
//******************************************************************
//delay_3s: Задержка на 3 с
//******************************************************************
void delay_3s(void) {
int i;
for(i=0;i<600;i++) delay_5ms();
}
//******************************************************************
//change_input: изменение активного входа
//******************************************************************
void change_input(void) {
PORTP &= ~0x80; //установка LED-MUTE-RELAY PP7(0) 1000_0000
PORTT |= 0x01; //установка сброса реле PT0(l) 5 мс
delay_5ms();
PORTT &= ~0x01; //turn off PT0
switch(which_input) {
case 1: //PHONO
phono_task();
break;
case 2: //CD
CD_task();
break;
case 3: //TUNER
tuner_task();
break;
case 4: //TAPE#1
tape1_task();
break;
case 5: //TAPE#2
tape2_task();
break;
case 6: //AUX
aux_task();
break;
default:;//все другие входы
}//конец switch
delay _3s();
PORTP |= 0x80; //сброс LED-MUTE-RELAY PP7(1)
}
//******************************************************************
//mute_toggle: включение и выключение звука
//******************************************************************
void mute_toggle(void) {
if (mute == off) {
PORTP &= ~0x80; //установка LED-MUTE-RELAY PP7(0)
mute = on;
} else {
PORTP |= 0x80; // сброс LED-MUTE-RELAY PP7(1)
mute = off;
}
}//end mute_toggle
//******************************************************************
Читать дальше