if (process_valid_input_PORTB(new_PORTB)) {
which_input = 5;
change_input();
}
}
break;
case 0xBF: //PB6 "S-AUX" (1011_1111)
if (which_input != 6) {
if (process_valid_input_PORTB(new_PORTB)) {
which_input = 6;
change_input();
}
}
break;
case 0x7F: //PB7 "S-MUTE" (0111_1111)
if (process_valid_input_PORTB(new_PORTB)) {
mute_toggle();
}
break;
default:; //all other cases
} //ΠΊΠΎΠ½Π΅Ρ switch(new_PORTB)
} //ΠΊΠΎΠ½Π΅Ρ if new_PORTB
old_PORTB=new_PORTB; //update PORTB
}
//******************************************************************
//process_PORTA_input_task():ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π²Ρ ΠΎΠ΄ ΠΎΡ PORTA
//******************************************************************
void process_PORTA_input_task(void) {
new_PORTA = PORTA; //Π§ΠΈΡΠ°ΡΡ PORTA
if (new_PORTA != old_PORTA) { //Π²ΡΠ±ΠΎΡ Π²Ρ ΠΎΠ΄Π° ΠΏΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΡΡΠ° PORTA
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
//******************************************************************
//preamp_off: turn amplifier off
//******************************************************************
void preamp_off(void) {
PORTP &= ~0x80; //ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° LED-MUTE-RELAY PP7(0)
PORTP |= 0x01; //ΡΠ±ΡΠΎΡ LED-PWR-RELAY PP0(1)
PORTP |= 0x7e; //ΡΠ±ΡΠΎΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ² PP1-PP6(1)(0111_1110)
//ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° PT7 ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠΌ 10 ΠΌΡ
PORTT |= 0x80; //ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° PT7(1) ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠΌ 10 ΠΌΡ
delay_5ms();
delay_5ms();
PORTT &= ~0x80; //ΡΠ±ΡΠΎΡ PT7
delay_3s();
PORTP = 0x80; //ΡΠ±ΡΠΎΡ PP7(1) LED-MUTE-RELAY
keep_going=0;
}
//******************************************************************
//process_valid_input_PORTA: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΡΠ»ΡΡΠ° Π΄ΠΈΡΡΠ°Π½ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ
//ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 50 ΠΌΡ
//******************************************************************
int process_valid_input_PORTA(unsigned char portx) {
int valid_input; //ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π°
unsigned int current_count;
valid_input = TRUE;
current_count = TCNT; // Π·Π°Π΄Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
while (TCNT < (current_count+12500)) { //ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ Π²Ρ ΠΎΠ΄ Π·Π° 50 ΠΌΡ
if (portx==PORTA) valid_input = TRUE;
else valid_input = FALSE;
if (!valid_input) break; //ΡΠΈΠΊΠ» while
}//end while
return valid_input;
}
//******************************************************************
//process_valid_input_PORTB: ΠΏΡΠΎΠ²Π΅ΡΠΊΠ° ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΠ΅Π»Π΅ΠΉ Π½Π°
//Π»ΠΈΡΠ΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ,Π΄Π»ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π½Π΅ ΠΌΠ΅Π½Π΅Π΅ 50 ΠΌΡ
//******************************************************************
int process_valid_input_PORTB(unsigned char portx) {
int valid_input; //ΡΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΡΠ»Π°Π³ ΠΎΡΠΈΠ±ΠΎΡΠ½ΠΎΠ³ΠΎ Π²Ρ ΠΎΠ΄Π°
unsigned int current_count;
valid_input = TRUE;
current_count = TCNT; // Π·Π°Π΄Π°ΡΡ ΡΠ΅ΠΊΡΡΠ΅Π΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
while (TCNT < (current_count+12500)){ //ΠΎΡΡΠ»Π΅Π΄ΠΈΡΡ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ Π²Ρ ΠΎΠ΄ Π·Π° 50 ΠΌΡ
if (portx==PORTB) valid_input = TRUE;
else valid_input = FALSE;
if (!valid_input) break; //ΡΠΈΠΊΠ» while
}//ΠΊΠΎΠ½Π΅Ρ while
return valid_input;
}
//******************************************************************
//******************************************************************
8.8.3. ΠΡΠΏΡΡΠ°Π½ΠΈΠ΅ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»Π΅ΡΠ° ΡΡΠΈΠ»ΠΈΡΠ΅Π»Ρ
ΠΡΠΎΠ²Π΅ΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ½ΠΎΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠΎΠ±ΡΠ°Π·Π½ΠΎ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΠΎΠΌ ΡΡΠΈΠ»ΠΈΡΠ΅Π»Ρ, ΠΊΠ°ΠΊ ΠΌΡ ΡΠΆΠ΅ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ Π² Π³Π»Π°Π²Π΅ 2. ΠΠΎΡΠΏΡΠΎΠΈΠ·Π²Π΅Π΄Π΅ΠΌ ΡΠ½ΠΎΠ²Π° ΡΡ Π΅ΠΌΡ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΠ° ΡΡΠΈΠ»ΠΈΡΠ΅Π»Ρ Π΄Π»Ρ ΡΠ΄ΠΎΠ±ΡΡΠ²Π° Π½Π° ΡΠΈΡ. 8.20. ΠΠ° Π΄Π΅ΡΠ΅Π²ΠΎΠΌ ΠΈΠΌΠΈΡΠ°ΡΠΎΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΠΏΠΎΠ»Π½ΠΎΠ΅ ΠΈΡΠΏΡΡΠ°Π½ΠΈΠ΅ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ° ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ, ΠΏΡΠΎΠ²Π΅ΡΠΈΠ² Π΅Π³ΠΎ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΈ ΠΌΡΡΠ»ΠΈΠΌΡΡ ΡΡΠ΅Π½Π°ΡΠΈΡΡ .