DevioLab CRYPTO TRADING AUTOMATION
LIVE
AUTOMATED CRYPTO TRADING • BINANCE
Автоматизуйте свій криптопортфель
Торгові боти DevioLab аналізують крипторинок, автоматично відкривають і закривають позиції та керують вашим портфелем на Binance 24/7.
CRYPTO 80 Bots
BINANCE Spot Trading
TRADING 24 / 7
Спробувати DevioLab
deviolab.com

Побудова охоронних систем з GSM-сигналізацією на AVR-мікроконтролерах. Знайомство з середовищем CodeVisionAVR

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

ВУЗ:
Національний університет Львівська політехніка
Інститут:
Не вказано
Факультет:
Не вказано
Кафедра:
Кафедра захисту інформації

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

Рік:
2015
Тип роботи:
Лабораторна робота
Предмет:
Інші
Група:
ІБ-43
Варіант:
29

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

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ НАЦІОНАЛЬНИЙ УНІВЕРСИТЕТ «ЛЬВІВСЬКА ПОЛІТЕХНІКА» Кафедра ЗІ  Лабороторна робота №4 Побудова охоронних систем з GSM-сигналізацією на AVR-мікроконтролерах. Знайомство з середовищем CodeVisionAVR з курсу "МІКРОПРОЦЕСОРНІ ПРИСТРОЇ" Варіант № 29 Виконала: ст. гр. ІБ-43 Прийняла: Львів-2010 Мета роботи: – ознайомитись з принципами побудови охоронних систем з GSM-сигналізацією і їх програмно-апаратною реалізацією на AVR-мікроконтролерах. Отримати навики написання програм для AVR-мікроконтролерів на мові С в середовищі CodeVisionAVR. Завдання: 1. Вивчити теоретичний матеріал. 2. Вивчити основні властивості мікроконтролера AT90S2313, принципи побудови GSM сигналізацій та функціонування GSM-модемів необхідні для виконання лабораторної роботи. 3. Підготовити програму функціонування GSM-сигналізації згідно індивідуального завдання в табл. 4. Алгоритм функціонування охоронної системи аналогічний описаному на сторінках 56-57 за винятком відсутності дозвону на телефонний номер при спрацюванні давачів (лише відсилаються SMS-повідомлення). 2 10 1.5 20 9 НЗ НЗ PD4 PB0 PB3 PB4   Текст програми #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.4=0, PORTB.4=1; // дозвіл перерив. чит., прийому передачі через UART UCR.7 = UCR.3 = UCR.4 = 1; // швидкість передачі 9600 бод UBRR = 45; // налаштування входів давачів DDRD.4=0, PORTD.4=1; // вхід 1 НЗ DDRB.0=0, PORTB.0=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.0==1 && !(D_Type2&0xf0) ? 1 : 0; D_Type2=D_Type2&0x0f|(((D_Type2 & 0x0f)-PINB.0==1) ? 1<<7 : 0); } return ret; } void main(void) { unsigned char ret=0,i,k; Init(); InitGSM_Modem(); turn_on: while(PINB.2); /*очікуємо натискання кнопки*/ 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.4)==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 } } Схема роботи 
Антиботан аватар за замовчуванням

2015

Коментарі

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

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

Нічого не вибрано
0%

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

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

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

Admin

26.02.2023 12:38

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