Чтение онлайн

ЖАНРЫ

Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С

Пак Дэниэл Дж.

Шрифт:

//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;

Поделиться с друзьями: