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

Скачивание начинается... Если скачивание не началось автоматически, пожалуйста нажмите на эту ссылку.
Жалоба
Напишите нам, и мы в срочном порядке примем меры.
Описание книги "Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С"
Описание и краткое содержание "Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С" читать бесплатно онлайн.
В книге последовательно рассматриваются все этапы создания встраиваемых систем на микроконтроллерах с применением современных технологий проектирования. Задумав эту книгу, авторы поставили перед собой задачу научить читателя искусству создания реальных устройств управления на однокристальных микроконтроллерах.
Издание содержит материал, охватывающий все вопросы проектирования, включает множество заданий для самостоятельной работы, примеры программирования, примеры аппаратных решений и эксперименты по исследованию работы различных подсистем микроконтроллеров.
Данная книга является прекрасным учебным пособием для студентов старших курсов технических университетов, которые предполагают связать свою профессиональную деятельность с проектированием и внедрением встраиваемых микропроцессорных систем. Книга также будет полезна разработчикам радиоэлектронной аппаратуры на микроконтроллерах.
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. На дешевом имитаторе можно провести полное испытание алгоритма управления, проверив его работу при мыслимых сценариях.
Подписывайтесь на наши страницы в социальных сетях.
Будьте в курсе последних книжных новинок, комментируйте, обсуждайте. Мы ждём Вас!
Похожие книги на "Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С"
Книги похожие на "Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С" читать онлайн или скачать бесплатно полные версии.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Отзывы о "Стивен Барретт - Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С"
Отзывы читателей о книге "Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С", комментарии и мнения людей о произведении.