Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторки.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.62 Mб
Скачать

Лабораторна робота №15 Тема: Інформаційний обмін по протоколу rs-485| .

Мета роботи: навчитися програмувати мікроконтролер, програмно звертатися до вбудованих модулів, отримати навички по використанню програмної бібліотеки для роботи з апаратним модулем RS-485|.

Матеріальне забезпечення роботи: персональний комп’ютер, програмне забезпечення віртуального середовища Proteus ISIS, мова програмування С, відлагоджувальний комплект ICD2.

Завдання для попередньої підготовки.

  1. Вивчити відповідний теоретичний матеріал.

  2. Опрацювати контрольні запитання.

  3. Підготовити звіт.

  4. Намалювати схеми для моделювання та дослідження.

Хід роботи:

  1. В програмному симуляторі зібрати схему згідно завдання лабораторної роботи.

  2. Створити проект програмного коду в програмі mikroC.

  3. Внести заготовлений код програми до програмного середовища.

  4. Компілювати проект.

  5. Внести отриманий двійковий компільований код до програми відлагоджувальника.

  6. Запустити програму відлагоджувальник.

  7. Проаналізувати роботу програми в різних режимах.

Вихідні дані до роботи:

RS-485| - це інтерфейс для зв'язку декількох пристроїв|устроїв| по одному сигнальному кабелю. MIKROC| надає набір функцій для забезпечення сумісної роботи з|із| системою на базі RS-485|, що використовує підхід ведущий/ведомый (Master/Slave). Провідний і ведений|відомий| пристрої|устрої| обмінюються пакетами інформації, кожен з яких містить|утримує| байти синхронізації, байти CRC|, адресні байти і дані. Кожен ведений|відомий| пристрій|устрій| має своя унікальна адреса і приймає тільки|лише| пакети, що адресуються йому. Ведений|відомий| пристрій|устрій| ніколи не є|з'являється| ініціатором обміну.

Відповідальність за те, щоб|аби| тільки|лише| одне пристрій|устрій| вів передачу в конкретний момент часу по шині RS-485|, лягає на програміста.

Функції обміну по RS-485| вимагають наявність апаратного модуля USART| на PORTC|. Виводи|висновки| USART| мають бути підключені до приймача|прийомопередавача| RS-485|, такому як LTC485| або йому подібному. Для управління приймачем|прийомопередавачем| (Receiver| Output| Enable| і Driver| Outputs| Enable|) використовується біт 2 PORTC| (див. малюнок в кінці|у кінці| розділу).

Примітка|тлумачення|: Адреса 50 - загальна|спільна| адреса для всіх ведених|відомих| пристроїв|устроїв| (пакети з|із| цією адресою будуть прийняті всіма веденими|відомими| пристроями|устроями|). Єдиним виключенням|винятком| є|з'являються| ведені|відомі| пристрої|устрої| з|із| адресами 150 і 169, які вимагають своєї власної адреси в пакеті.

Примітка|тлумачення|: Функція Usart_Init|() має бути викликана|спричиняти| перед ініціалізацією RS485|.

Приклад|зразок| демонструє роботу PIC| як веденого|відомого| пристрою|устрою| при обміні по RS-485|. PIC| приймає тільки|лише| пакети адресовані йому (для прикладу|зразка| його адреса 160) або адресовані всім (з|із| адресою 50). Прийняті дані відправляються|вирушають| в PORTB| і назад провідний пристрій|устрій|.

// буфер для принимаемых/передаваемых повідомлень|сполучень|

unsigned| short| dat|[8];

unsigned| short| i = 0, j = 0;

void| interrupt|(void|){

/* Кожен байт приймається RS485Slave_Read|(dat|);

Якщо повідомлення|сполучення| прийняте без помилок

data|[4] встановлюється = 255 */

if| (RCSTA|.OERR) PORTD| = 0x81;

RS485Slave_Read|(dat|);

}

main|() {

TRISB| = 0;

TRISD| = 0;

Usart_Init|(9600); // Ініціалізація модуля USART|

RS485Slave_Init|(PORTC|, 2, 160); // Ініціалізація MCU| як

// веденого|відомого| пристрою|устрою| з|із| адресою 160

PIE1|.RCIE = 1; // Дозвіл переривань

INTCON|.PEIE = 1; // по прийому байта

PIE2|.TXIE = 0; // від USART| (RS485|)

INTCON|.GIE = 1;

PORTB| = 0;

PORTD| = 0;

dat|[4]= 0; // Вуст. нач|. значення прапора прийому = 0

dat|[5]= 0; // Вуст. нач|. значення прапора помилки = 0

do| {

if| (dat|[5]) PORTD| = 0xAA|; // Якщо помилка встановити PORTD| = 0xAA|

if| (dat|[4]) { // Якщо повідомлення|сполучення| прийняте:

dat|[4]= 0; // Очистити прапор прийому

j = dat|[3]; // Прочитати к-ть прийнятих байтів

for| (i = 0; i <= j; i++|)

PORTB| = dat|[i]; // Вивести прийнятий байт в PORTB|

dat|[0]++; // Збільшити лічильник прийнятих байтів dat|[0]

RS485Slave_Write|(dat|, 1); // Відправити дані назад в провідне устр-во|

}

} while| (1);

} //~!

Підключення пристроїв

Приклад|зразок| з'єднання|сполучення| РС і PIC| MCU| по шині RS485|