![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Программный код. // Функция программы: Устанавливает шесть IDS оценок членства и создает
//******************************************************************** // Файл: micro.с // Функция программы: Устанавливает шесть IDS оценок членства и создает // оценку опасности вторжения // Авторы: Даниэль Пак, Барри Муллинз, Стив Барретт // Дата создания: 17 июня 2004 // Установки: Program=0x1000, Data=0x3000, Stack=0x4000 //******************************************************************** #include < stdio.h> #include " hcs12dp256.h"
//******************************************************************** //функции поддержки //==================================================================== // _HC12Setup: выключить сторожевой таймер COP //==================================================================== void _HC12Setup(void) { COPCTL = 0x00; // выключить сторожевой таймер COP }
//******************************************************************** //delay: подпрограмма задержки //******************************************************************** void delay(void) { //подпрограмма задержки volatile unsigned n, m; m = 10; do { n = 0; do { n--; } while(n); m--; } while(m); }
//******************************************************************** // status_wait: время ожидания подпрограмма установки связи с ЖКД //******************************************************************** void status_wait(void) { //время ожидания подпрограмма установки связи с ЖК дисплеем char temp = 0x00; DDRA = 0x00; PORTB = 0xF9; while ((temp & 0x03)! = 0x03) { PORTB = 0xFF; temp = PORTA; PORTB = 0xF9; } PORTB = 0xFF; DDRA = 0xFF; }
//******************************************************************** // command: пересылка команд на ЖК дисплей //******************************************************************** void command(unsigned char n) { // пересылка команд на ЖК дисплей status_wait(); PORTA = n; PORTB = 0xFF; PORTB = PORTB & 0xFA; PORTB = 0xFF; } //********************************************************************
//******************************************************************** //data: пересылка данных на ЖК дисплей //******************************************************************** void data(unsigned char n) { // пересылка данных на ЖК дисплей status_wait(); PORTA = n; PORTB = PORTB & 0xF2; PORTB = 0xFF; }
//******************************************************************** // LCD_char: функция пересылки символа на ЖК дисплей //******************************************************************** void LCD_char(unsigned char n) { // функция пересылки символа на ЖК дисплей data(n - 0x20); command(0xC0); }
//******************************************************************** // newline: пересылка новой строки на ЖК дисплей //******************************************************************** void newline(void) { // пересылка новой строки на ЖК дисплей int i; for (i=0; i< 16; i++) LCD_char(' '); }
//******************************************************************** // LCD_output: пересылка последовательности символов на ЖК дисплей //******************************************************************** void LCD_output(char s[]) { // пересылка последовательности символов на ЖК дисплей int n = 0; while (s[n]! = '\0') { LCD_char(s[n]); ++n; } }
//******************************************************************** // Reset_cursor: возврат курсора //******************************************************************** void Reset_cursor(void) { // возврат курсора data(0x00); data(0x10); command(0x24); }
//******************************************************************** //Clearscreen: очистка экрана ЖКД //******************************************************************** void Clearscreen(void) { // очистка экрана ЖКД int i, j; Reset_cursor(); for (i=0; i< 16; i++) for(j=0; j< 16; j++) LCD_char(' '); Reset_cursor(); }
//******************************************************************** // Initlcd: инициализация ЖКД //******************************************************************** void Initlcd(void) { // инициализация ЖКД PORTB = 0xEF; //принудительный сброс delay(); PORTB = 0xFF; //все линии команд на высоком уровне status_wait(); command(0x80); // установить режим текста data(0x00); // установить младший байт адреса текста (L) data(0x10); // установить младший байт адреса текста (H) command(0x40); //установить адрес команды текста data(0x10); //установить область текста data(0x00); command(0x41); command(0x94); //включить текстовый дисплей command(0xA7); //курсор 8& #215; 8 позиций Clearscreen(); Reset_cursor(); }
//******************************************************************** // InitMes: начальное сообщение //******************************************************************** void InitMes(void) { // начальное сообщение unsigned char k; for(k=0; k< 3; k++) newline(); LCD_output(" Portable HTTP"); newline(); LCD_output(" TAD System."); newline(); LCD_output(" version 1.0"); }
//******************************************************************** // numdisplay: отображение чисел на ЖК дисплее //******************************************************************** void numdisplay(char s) { //отображение чисел на ЖК дисплее char k; 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"); } //====================================================================
|