Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ «ВстраиваСмыС систСмы. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π° ΠΌΠΈΠΊΡ€ΠΎΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»Π»Π΅Ρ€Π°Ρ… сСмСйства 68HC12/HCS12 с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ языка Π‘Β». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 138

Автор Π‘Ρ‚ΠΈΠ²Π΅Π½ Π‘Π°Ρ€Ρ€Π΅Ρ‚Ρ‚

    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. На дСшСвом ΠΈΠΌΠΈΡ‚Π°Ρ‚ΠΎΡ€Π΅ ΠΌΠΎΠΆΠ½ΠΎ провСсти ΠΏΠΎΠ»Π½ΠΎΠ΅ испытаниС Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° управлСния, ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠ² Π΅Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Ρƒ ΠΏΡ€ΠΈ мыслимых сцСнариях.