Лабораторна робота № 4

Інформація про навчальний заклад

ВУЗ:
Інші
Інститут:
ІКТА
Факультет:
Не вказано
Кафедра:
Не вказано

Інформація про роботу

Рік:
2010
Тип роботи:
Лабораторна робота
Предмет:
Мікропроцесори
Група:
ІБ - 43

Частина тексту файла (без зображень, графіків і формул):

МІНІСТЕРСТВО ОСВІТИ УКРАЇНИ ДЕРЖАВНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА»  Побудова охоронних систем з GSM-сигналізацією на AVR-мікроконтролерах Лабораторна робота № 4 З курсу «Мікропроцесорні пристрої» Львів 2010 Мета роботи – ознайомитись з принципами побудови охоронних систем з GSM-сигналізацією та їх програмно-апаратною реалізацією на AVR мікроконтролерах. ЗАВДАННЯ Домашня підготовка до роботи 1.Вивчити теоретичний матеріал. 2.Вивчити основні властивості МК необхідні для виконання лабораторної роботи. 3.Підготувати програму функціонування охоронної системи Виконати в лабораторії 1.Створити проект в CodeVisionAVR, ввести свою програму, провести її компілювання. 2.В режимі покрокової відладки переконатися в правильності роботи програми. 3.Відкрити файл-схему у програмі Proteus, підключити до МК hex-файл. 4.Запустити режим симуляції схеми та перевірити правильність функціонування охоронної системи у всіх режимах роботи.  ТЕКСТ ПРОГРАМИ #include <90S2313.h> #include <delay.h> #include <stdio.h> #include <string.h> // Мигання світлодіода під час охорони об'єкта const unsigned int tBlick = 1000/1.5/50; // Мигання світлодіода під час тривоги const unsigned int tAlarm = 1000/20; unsigned char D_Type1; // тип 1 давача 0 - не викор., 1 - НРЗ, 2 - НЗ unsigned char D_Type2; // тип 2 давача 0 - не викор., 1 - НРЗ, 2 - НЗ unsigned char z1_Time; unsigned char z2_Time; unsigned char buf[40]; // Буфер для читання та запису АТ-команд у модем unsigned char pos; // Позиція кінця рядка в буфері unsigned char admin_no[17]; // номер адміністратора безпеки unsigned char NoError; // не рівне 0 якщо АТ команда повернула "OK" // поступив новий байт даних через UART interrupt[UART_RXC] void UART_Read() { // Ознака успішного виконання АТ команди char *OK="OK"; buf[pos]=UDR, buf[++pos]=0; NoError = *strstr(buf, OK); } void AT_Write(flash char *fStr) { register unsigned char i = 0; SREG.7 = 0; // заборона переривань putchar('A'), putchar('T'); // початок АТ команди if(fStr) strcpyf(buf, fStr); // скопіювати команду в ОП while(buf[i]) putchar(buf[i++]); // команда putchar(0x0D); // завершення команди buf[pos=0]=0; // обнулити буфер прийому SREG.7 = 1; // дозвіл переривань delay_ms(50); // затримка перед отриманням результату } // копіює входження символів, що мають визначений початок і кінець void ExtractStr(char *to, char begin, char end, char *from) { *to=0; // обнуляємо вихідний рядок // шукаємо початок while(from && *from!=begin && *from) ++from; ++from; // копіюємо до кінцевого символу while(*from && *from!=end) *to++=*from++; *to=0; // ознака закінчення рядка } // налаштування входів, передавача UART та // зчитування загальних налаштувань з GSM модема void Init() { SREG.7 = 1; // загальний дозвіл переривань // налаштування входу кнопки DDRB.0=0, PORTB.0=1; // дозвіл перерив. чит., прийому передачі через UART UCR.7 = UCR.3 = UCR.4 = 1; // швидкість передачі 9600 бод UBRR = 45; // налаштування входів давачів DDRD.4=0, PORTD.4=1; // вхід 1 НЗ DDRB.1=0, PORTB.1=1; // вхід 2 НЗ // налаштування виходу світлодіода DDRB.3=1, PORTB.3=1; } // Ініціалізація модему та запит налаштувань void InitGSM_Modem() { char tmp[10]; char first_sim[4]; // спробуємо завантажити налаштування з першої комірки сім катрки // відключити режим "ехо" AT_Write("E0"); // активна тел. книжка - сім картка AT_Write("+CPBS=\"SM\""); // вивести інформацію про тел. книжку AT_Write("+CPBR=?"); // якщо помилка використовуємо відповідь по замовчуванню if(!NoError) strcpyf(buf, "\r\n+CPBR: (501-700),40,14\r"); // скопіювати номер першої комірки в tmp ExtractStr(first_sim, '(', '-', buf); // запит на виведення першої комірки сім-картки strcpyf(buf, "+CPBR="), strcat(buf, first_sim); // вивести вміст першої комірки (містить налаштування) AT_Write(0); if(!NoError)// по замвч. всі давачі НЗ (2), і затримка по 20 сек.(1) strcpyf(buf, "+CPBR: 501,\"2211\",145,\"STATUS\""); ExtractStr(tmp, '\"', '\"', buf); // визначаємо типи давачів D_Type1 = tmp[0] - '0'; D_Type2 = tmp[1] - '0'; // визначаємо затримку z1_Time = tmp[2] - '0' + 1; z2_Time = tmp[3] - '0' + 1; // множимо на 10 кожне значення z1_Time = (z1_Time<<3) + (z1_Time<<1); z2_Time = (z2_Time<<3) + (z2_Time<<1); // читаємо номер адміністратора з другої комірки ++first_sim[2]; strcpyf(buf, "+CPBR="), strcat(buf, first_sim); AT_Write(0); if(!NoError)// якщо невдало - значення по замовчуванню strcpyf(buf, "+CPBR: 501,\"+308966129563\",145,\"Admin\""); ExtractStr(admin_no, ',', ',', buf); // задаємо текстовий режим відправки sms AT_Write("+CMGF=1"); } unsigned char Check() { unsigned char ret = 0, tmp; // опитуємо давачі if(D_Type1) // якщо підключений { // перевіряємо на спрацювання ret|=(D_Type1 & 0x0f)-PIND.4==1 && !(D_Type1&0xf0) ? 1 : 0; if((tmp = 0xf0 & D_Type1)==0) tmp=1<<7; D_Type1=D_Type1&0x0f|(((D_Type1 & 0x0f)-PIND.4==1) ? tmp : 0); } if(D_Type2) // якщо підключений { // перевіряємо на спрацювання ret|=(D_Type2 & 0x0f)-PINB.1==1 && !(D_Type2&0xf0) ? 1 : 0; D_Type2=D_Type2&0x0f|(((D_Type2 & 0x0f)-PINB.1==1) ? 1<<7 : 0); } return ret; } void main(void) { unsigned char ret=0,i,k; Init(); InitGSM_Modem(); turn_on: while(PINB.0); /*очікуємо натискання кнопки*/ delay_ms(z1_Time*1000); /*затримка перед ввімкненням охорони*/ D_Type1=D_Type1&0x0f; D_Type2=D_Type2&0x0f; // формуємо SMS про ввімкнення охорони strcpyf(buf, "+CMGS="), strcat(buf, admin_no); strcatf(buf, "\rSecurity ON\0x1a"); AT_Write(0); // відсилаємо sms while(1) { for(i=0;i<50;i++) { if((ret=Check())!=0) break; delay_ms(tBlick); } if(!ret) {PORTB.3 = !PINB.3; continue;} // цикл очікування натиску кнопки скиду сигналізації for(k=0; k<250 && ret; k++) { delay_ms(tAlarm); if((ret = !PINB.0)==0) { PORTB.3 = 0; // формуємо SMS про вимкнення охорони strcpyf(buf, "+CMGS="), strcat(buf, admin_no); strcatf(buf, "\rSecurity OFF\0x1a"); AT_Write(0); // відсилаємо sms delay_ms(2500), PORTB.3 = 1; goto turn_on; } PORTB.3 = !PINB.3; } // якщо ми тут значить секретну кнопку не натиснули - тривога // відправляємо тривожне смс strcpyf(buf, "+CMGS="), strcat(buf, admin_no); strcatf(buf, "\rAlarm. Shleif # "); if(D_Type1&(1<<7)) D_Type1=(D_Type1&0x0f)|(1<<6),strcatf(buf, "1\0x1a"); else strcatf(buf, "2\0x1a"); AT_Write(0); // відсилаємо sms } } СХЕМА ВИСНОВОК На даній лаболаторній роботі я ознайомився з принципами побудови охоронних систем з GSM-сигналізацією та їх програмно-апаратною реалізацією на AVR мікроконтролерах.
Антиботан аватар за замовчуванням

13.02.2013 01:02-

Коментарі

Ви не можете залишити коментар. Для цього, будь ласка, увійдіть або зареєструйтесь.

Ділись своїми роботами та отримуй миттєві бонуси!

Маєш корисні навчальні матеріали, які припадають пилом на твоєму комп'ютері? Розрахункові, лабораторні, практичні чи контрольні роботи — завантажуй їх прямо зараз і одразу отримуй бали на свій рахунок! Заархівуй всі файли в один .zip (до 100 МБ) або завантажуй кожен файл окремо. Внесок у спільноту – це легкий спосіб допомогти іншим та отримати додаткові можливості на сайті. Твої старі роботи можуть приносити тобі нові нагороди!
Нічого не вибрано
0%

Оголошення від адміністратора

Антиботан аватар за замовчуванням

Подякувати Студентському архіву довільною сумою

Admin

26.02.2023 12:38

Дякуємо, що користуєтесь нашим архівом!