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

ЖАНРЫ

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

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

Шрифт:

#include "func_def.h" //функции-прототипы, глобальные переменные

//main program*******************************************************

// глобальные переменные

int which_input; //вход усилителя

int keep_going; //ввод переменных

int mute; //флаг управления выключением звука

unsigned char old_PORTB = 0xff; //текущие значения PORTB

unsigned char old_PORTA = 0x00; //текущие значения PORTA

unsigned char new_PORTB, new_PORTA; //новые
значения PORTA, PORTB

void main(void) {

 asm(" .area vectors(abs)\n"

" .org 0xFFF8\n" //инициализация вектора сброса для 68HC12 B32

" .word 0x8000, 0x8000, 0x8000, 0x8000\n"

" .text");

 initialize_task;

 //главный цикл

 while(1) { //ожидается сигнал на включение питания

if ((PORTB==0xFE)||(PORTA==0X01))

//PORTB переключается в низкое, PORTA - в

// высокое состояние

{ //вы забыли включить питание! Запрос на операцию включения

keep_going = 1; //цикл считывания переменных

PORTP=0x7E; //включение LED-MUTE-RELAY PP7(0)

//LED-PWR-RELAY PP0(0) (0111_1110)

which_input_task;

activate_power_relay_task;

delay_3s; //задержка 3 с.

PORTP = 0x80; // DE-переключение PD7(1) - включение звука

while(keep_going) //прохождение меню - главный цикл опроса

{

process_PORTB_input_task;

process_PORTA_input_task;

}

}//end if - ожидание включения питания - питание не подано!

 }//end while(1)

}//конец главного цикла

//*******************************************************************

// определение функций

//*******************************************************************

initialize_task: начальные установки усилителя

//*******************************************************************

void initialize_task(void) {

 mute = on; //turn mute on

 initialize_timer; // инициализация таймера

 initialize_ports; // инициализация портов

 initialize_pins; // инициализация состояния отдельных выводов

 which_input = 2 ; //по умолчанию включается вход CD(2)

//включение светодиодов на лицевой панели

 PORTP = 0x81; //включение всех светодиодов PD1-PD6 низким активным

// уровнем (1000_0001)

 delay_3s; //задержка 3
с

 PORTP = 0xff; //выключение светодиодов

}

//*******************************************************************

//which_input_task: опрос входов, установка текущего состояния

//*******************************************************************

void which_input_task(void) {

 switch(which_input) { // подсвечивается светодиод для используемого

// входа (по умолчанию вход 2 - CD)

 case 1: //Пианино

phono_task;

break;

 case 2: //CD

CD_task;

break;

 case 3: //Тюнер

tuner_task;

break;

 case 4: //Магнитофон 1

tape1_task;

break;

 case 5: //Магнитофон 2

tape2_task;

break;

 case 6: //Дополнительный канал (ДК)

aux_task;

break;

 default:;

 }//конец switch

}

//*******************************************************************

//phono_task: конфигурируется вход от Радио

//*******************************************************************

void phono_task(void) {

 PORTT |= 0x02; //устанавливается PT1(1) (0000_0010)

 delay_5ms;

 PORTT &= ~0x02; // выключается PT1(0)

 PORTP = 0x7E; //гасятся все светодиоды

 PORTP &= ~0x02; //включается светодиод 1 (0)

}

//******************************************************************

//CD_task: конфигурируется вход от CD

//******************************************************************

void CD_task(void) {

 //CD

 PORTT |= 0x04; // устанавливается PT2(1) (0000_0100)

 delay_5ms;

 PORTT &= ~0x04; // выключается PT2(0)

 PORTP |= 0x7E; //гасятся все светодиоды

 PORTP &= ~0x04; // включается светодиод 2 (0)

}

//******************************************************************

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