Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С
//
// последовательность "MUTE":
//1. Переключить "LED-MUTE-RELAY" (PP7)
//2. Перейти к последовательности "SCAN"
//
//Последовательность "PREAMP OFF":
//1. Включить "LED-MUTE-RELAY" (PP7)
//2. DE-переключение "LED-PWR-RELAY" (PP0)
//3. DE-переключение всех светодиодов (PP1-РР6)
//4. Включить PT7(1) импульсом 10 мс
//5. DE-переключение "LED-MUTE-RELAY" (PP7) примерно через 3 с.
//6. Перейти к последовательности "PREAMP ON"
//
//авторы: Steven Barrett и Daniel Pack
//Дата разработки: 19 июня 2004
//Последняя редакция: 20 июня 2004
//*******************************************************************
//*******************************************************************
//включенные файлы
#include <912b32.h> //B32 EVB header file
#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 0xFFF8n" //инициализация вектора сброса для 68HC12 B32
" .word 0x8000, 0x8000, 0x8000, 0x8000n"
" .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)
}
//******************************************************************
//tuner_task: конфигурируется вход от тюнера
//******************************************************************
void tuner_task(void) {
//TUNER PORTT |= 0x08; // устанавливается PT3(1) (0000_1000)
delay_5ms();
PORTT & = 0x08; // выключается PT3(0
PORTP |= 0x7E; //гасятся все светодиоды
PORTP &= ~0x08; // включается светодиод 3 (0)
}
//******************************************************************
//tape1_task: конфигурируется вход от магнитофона 1
//******************************************************************
void tape1_task(void) {
//TAPE#1
PORTT |= 0x10; //assert PT4(1) (0001_0000)
delay_5ms();
PORTT &= ~0x10; // выключается PT4(0)
PORTP |= 0x7E; //гасятся все светодиоды
PORTP &= ~0x10; // включается светодиод 4 (0)
}
//******************************************************************
//tape2_task: конфигурируется вход от магнитофона 2
//******************************************************************
void tape2_task(void) {
//TAPE#2
PORTT |= 0x20; // устанавливается PT5(1) (0010_0000)
delay_5ms();
PORTT &= ~0x20; // выключается PT5(0)
PORTP |= 0x7E; //гасятся все светодиоды
PORTP & = ~0x20; // включается светодиод 5 (0)
}
//******************************************************************
//aux_task: конфигурируется вход от дополнительного канала
//******************************************************************
void aux_task(void) {
//ДК
PORTT |= 0x40; // устанавливается PT6(1) (0100_0000)
delay_5ms();
PORTT &= ~0x40; // выключается PT6(0)
PORTP |= 0x7E; //гасятся все светодиоды
PORTP &= ~0x40; // включается светодиод 6(0)
}
//******************************************************************
//activate_power_relay_task(): включается реле силового питания
//******************************************************************
void activate_power_relay_task(void) {
PORTT |= 0x80; // устанавливается PT7(1) импульсом 10 мс
delay_5ms();
delay_5ms();
PORTT &= ~0x80; // выключается PT7
}
//******************************************************************
//process_PORTB_input_task(): определяется выбранный вход от PORTB
//******************************************************************
void process_PORTB_input_task(void) {
new_PORTB = PORTB; //read PORTB
if (new_PORTB != old_PORTB) { //считывание состояния порта PORTB
switch(new_PORTB) { //PORTB устанавливается на низкий уровень
case 0xFE: //PB0 "S-PREAMP-PWR" (1111_1110)
if (process_valid_input_PORTB(new_PORTB)) {
preamp_off();
keep_going=0;
}
break;
case 0xFD: //PB1 "S-PHONO" (1111_1101)
if (which_input !=1) {
if (process_valid_input_PORTB(new_PORTB) {
which_input = 1;
change_input();
}
}
break;
case 0xFB: //PB2 "S-CD" (1111_1011)
if (which_input!=2) {
if (process_valid_input_PORTB(new_PORTB)) {
which_input = 2;
change_input();
}
}
break;
case 0xF7: //PB3 "S-TUNER" (1111_0111)
if (which_input != 3) {
if (process_valid_input_PORTB(new_PORTB)) {
which_input = 3;
change_input();
}
}
break;
case 0xEF: //PB4 "S-TAPE#1" (1110_1111)
if (which_input != 4) {
if (process_valid_input_PORTB(new_PORTB)) {
which_input = 4;
change_input();
}
}
break;
case 0xDF: //PB5 "S-TAPE#2" (1101_1111)
if (which_input != 5) {
if (process_valid_input_PORTB(new_PORTB)) {
Откройте для себя мир чтения на siteknig.com - месте, где каждая книга оживает прямо в браузере. Здесь вас уже ждёт произведение Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С, относящееся к жанру Программирование. Никаких регистраций, никаких преград - только вы и история, доступная в полном формате. Наш литературный портал создан для тех, кто любит комфорт: хотите читать с телефона - пожалуйста; предпочитаете ноутбук - идеально! Все книги открываются моментально и представлены полностью, без сокращений и скрытых страниц. Каталог жанров поможет вам быстро найти что-то по настроению: увлекательный роман, динамичное фэнтези, глубокую классику или лёгкое чтение перед сном. Мы ежедневно расширяем библиотеку, добавляя новые произведения, чтобы вам всегда было что открыть "на потом". Сегодня на siteknig.com доступно более 200000 книг - и каждая готова стать вашей новой любимой. Просто выбирайте, открывайте и наслаждайтесь чтением там, где вам удобно.


