Встраиваемые системы. Проектирование приложений на микроконтроллерах семейства 68HC12/HCS12 с применением языка С - Стивен Барретт
Шрифт:
Интервал:
Закладка:
newline();
k = s;
s = s>>4;
if (s > 0x08) data(s + 0x17);
else data(s + 0x10);
command(0xC0);
k = k & 0x0F;
if (k > 0x08) data(k + 0x17);
else data(k + 0x10);
command(0xC0);
}
//********************************************************************
// Секция данных - инициализация табличных данных
//********************************************************************
#pragma abs_address 0x3000
char BeP[12] = {0x00, 0x70, 0x00, 0x10,
0x40, 0xC0, 0x10, 0x10,
0x90, 0xFF, 0x10, 0x00};
char KeM[12] = {0x00, 0x70, 0x00, 0x10,
0x40, 0xC0, 0x10, 0x10,
0x90, 0xFF, 0x10, 0x00};
char OT[5] = {0x40, 0x60, 0x80, 0xA0, 0xC0};
char IMV[6] = {0x00, 0x00, 0x00, 0x00, 0x00, 0x00};
char OMV[5] = {0x00, 0x00, 0x00, 0x00, 0x00};
// правило
char rules[45] = {0x00,0x03,0xFE,0x06, 0xFE,
0x00, 0x04, 0xFE, 0x07, 0xFE,
0x00, 0x05, 0xFE, 0x08, 0xFE,
0x01, 0x03, 0xFE, 0x07, 0xFE,
0x01, 0x04, 0xFE, 0x08, 0xFE,
0x01, 0x05, 0xFE, 0x09, 0xFE,
0x02, 0x03, 0xFE, 0x08, 0xFE,
0x02, 0x04, 0xFE, 0x09, 0xFE,
0x02, 0x05, 0xFE, 0x0A, 0xFF};
char result[3] = (0x00, 0x00, 0x00};
#pragma end_abs_address
//********************************************************************
//Основная программа
//********************************************************************
void main(void) {
int index;
char temp = 0x00;
/* определение интерактивного туннелирования */
asm("LDX #$3000");
asm("LDY #$301D");
asm("LDAA $4000"); //оценка профиля поведения
asm("MEM");
asm("MEM");
asm("MEM"); //фаззификация
asm("LDAA $4001"); //оценка членства ключевых слов
asm("MEM");
asm("MEM");
asm("MEM"); //фаззификация
asm("LDY #$301D");
asm("LDX #$3028");
asm("LDAA #$FF"); //инициализация минимума и бита V
asm("REV"); //применение правил фаззификации
asm("LDX #$3018"); //дефаззификация
asm("LDY #$3023");
asm("LDAB #$05");
asm("WAV");
asm("EDIV");
asm("TFR Y,D");
asm("STAB $3055"); //сохранение результата
PORTB = 0xff;
DDRB = 0xff;
delay2();
PORTB = 0x7F; //проверка платы с использованием ЖКД
delay2();
PORTB = 0xFF;
/*Определение туннелирования скриптов*/
asm("LDX #$3000");
asm("LDY #$301D");
asm("LDAA $4002"); //оценка профиля поведения
asm("MEM");
asm("MEM");
asm("MEM"); //фаззификация
asm("LDAA #$PF"); //оценка членства ключевых слов
asm("MEM");
asm("MEM");
asm("MEM"); //фаззификация
asm("LDY #$301D");
asm("$3028");
asm("$4003"); //инициализация минимума и бита V
asm("REV"); //применение правил фаззификации
asm("LDX #$3018"); //дефаззификация
asm("LDY #$3023");
asm("LDAB #$05");
asm("WAV");
asm("EDIV");
asm("TFR Y,D");
asm("STAB $3056"); //сохранение результата
PORTB = 0xff;
DDRB = 0xff;
delay2();
PORTB = 0x7F; //проверка платы с использованием ЖКД
delay2();
PORTB = 0xFF;
/*Проверка внедрения потоков*/
asm("LDX #$3000");
asm("LDY #$301D");
asm("LDAA $4004"); //оценка профиля поведения
asm("MEM");
asm("MEM");
asm("MEM"); //фаззификация
asm("LDAA $4005"); //оценка членства для ключевых слов
asm("MEM");
asm("MEM");
asm("MEM"); //фаззификация
asm("LDY #$301D");
asm("LDX #$3028");
asm("LDAA $4003"); //инициализация минимума и бита V
asm("REV"); //применение правил фаззификации
asm("LDX #$3018"); //дефаззификация
asm("LDY #$3023");
asm("LDAB #$05");
asm("WAV");
asm("EDIV");
asm("TFR Y,D");
asm("STAB $3057"); //сохранение результата
PORTB = 0xff;
DDRB = 0xff;
delay2();
PORTB = 0x7F; //проверка платы с использованием ЖКД
delay2();
PORTB = 0xFF;
//Конфигурация ЖКД
DDRA = 0xFF;
PORTB = 0xFF,
Initlcd(); //Инициализация ЖКД
InitMes(); //Инициализация сообщений
delay2();
Clearscreen(); //Очистить экран ЖКД
Reset_cursor; //Возврат курсора ЖКД
newline(); //Создать новую строку на ЖКД
newline();
LCD_Output("IA: ");
numdisplay(result[0]);
if (result[0] > 0xA0) //Вывести на дисплей предупреждение
LCD_output(" High Alert");
else if (result[0] > 0x60) LCD_output(" Med Alert");
else LCD_output(" Low Alert");
newline();
LCD_output("SA: ");
numdisplay(result[1]);
if (result[0] > 0xA0) LCD_output(" High Alert");
else if (result[1] > 0x60) LCD_output(" Med Alert");
else LCD_output(" Low Alert");
newline();
LCD_output{"S: ");
numdisplay(result[2]);
if (result[2] > 0xA0) LCD_output(" High Alert");
else if (result[0] > 0x60) LCD_output(" Med Alert");
else LCD_output(" Low Alert");
}
//====================================================================
7.6.8. Некоторые комментарии
Вы можете задать вопрос о необходимости иметь отдельную микроконтроллерную систему HTTP TAD. Почему бы просто не включить функцию системы HTTP TAD в состав стандартной системы обнаружения «злоумышленника»? Цель упражнения состоит в том, чтобы показать большие возможности МК HCS12 и использование их в ряде проектов. Конечно, система, описанная в этом разделе, может быть включена в состав большой системы обнаружения «злоумышленника». Одно из преимуществ создания отдельной системы — мобильность. Это обеспечивает администраторов защиты гибким инструментом, чтобы изменять одиночную переносную систему и проверять несколько модулей внутри сети. Материалы для более подробного изучения систем информационной защиты мы вынесли в раздел «Что еще прочесть» в конце главы.
7.7. Электронная версия игры в «15»
7.7.1. Описание проекта
Наверное, вы когда-нибудь передвигали фишки игры в «пятнадцать», показанной на рис. 7.35. Этой игрой дети развлекаются дома, в летних лагерях и в поездках на заднем сиденье автомобиля. Мы были свидетелями перевода целого ряда игр с передвижением фишек в электронную форму. В этом разделе мы представляем электронную версию игры в «пятнадцать». Проект был создан Скоттом Льюисом в качестве работы для получения звания «senior project design» старшего программиста.
Рис. 7.35. Игра в «15»
Цель игры заключается в следующем: необходимо упорядочить данный произвольно расположенный набор из 15 пронумерованных фишек и одного пустого промежутка, расположив фишки в порядке возрастания номеров (рис. 7.36 внизу справа). Сделать это необходимо, многократно повторяя операцию передвижения одной из соседних фишек на пустое место.
Рис. 7.36. Игра в «15». Левое поле показывает произвольное начальное состояние фишек, а на правом приведена окончательная позиция, достижение которой является целью игры
Цель нашего проекта заключается в создании электронной версии игры. Для этого необходимо обеспечить средства для допустимого изменения положения фишек и устройство для отображения текущего положения фишек после каждой операции.
Требования к системе для игры в «15» следующие:
1. Использовать микроконтроллер;
2. Позволить пользователю идентифицировать номер фишки с помощью устройства ввода данных;
3. Позволить пользователю перемещать выбранную фишку на пустое поле;
4. Отображать текущие расположения всех фишек.
7.7.2. Системы HCS12 используемые в проекте
Этот проект использует различные модули 68HC12, и интерфейс, связывающий их с несколькими переключателями и графическим ЖК дисплеем.
7.7.3. Основы теории
Система использует отладочную плату 68HC12B32EVB, графический ЖК дисплей AND 1391, ИС внешнего ОЗУ (RAM 6264) и внешнего ПЗУ (EPROM 27256), а также программируемую ИС (GAL16V8), набор кнопок и ИС триггера защелки 74HC373. На рис. 7.37 показана структурная схема игровой системы. Хотя мы могли бы использовать внутреннюю память 68HC12, но для расширения опыта читателя мы использовали внешнюю память и расширенный режим работы микроконтроллера. Для создания соответствующих сигналов управления и декодирования адреса памяти, мы использовали программируемую ИС GAL16V8, включив ее между микросхемами памяти и МК. Интегральная схема GAL16V8 программируется так, чтобы ОЗУ размещалось в адресном пространстве начиная с $2000 и заканчивая $3FFF, а программируемое ПЗУ — в ячейках памяти с адресами $4000…$7FFF. Как вы увидите, программа, представленная в этом разделе, запускается из ОЗУ. Разместив программу во внешнем ПЗУ, можно сделать систему автономной.