Приклад 6.2

Запрограмувати послідовний порт на «1» режим роботи. Встановити швидкість обміну 2400 біт/с. Частота резонатора генератора складає 12 МГц.

Без використання системи переривань скласти підпрограми реакцій на завершення передачі та прийому байта.

У цьому режимі роботи SM0= 1, SM1= 0. Константу завантаження регістра SCON приведено в табл.6.4.

Таблиця 6.4

№ біта                
Ім’я біта SM0 SM1 SM2 REN TB8 RB8 TI RI
Біт                

Для налаштування заданої швидкості обміну необхідно використати таймер/лічильник ТС1 та визначити режим роботи та відповідні константи завантаження лічильних регістрів. Згідно з формулою для розрахунку швидкості обміну для «1» режиму роботи UART визначають константу завантаження регістрів таймера/лічильника ТС1. При проведенні розрахунку використовують «2» режим роботи таймера/лічильника з автоматичним перезавантаженням та приймають значення біту подвоєння швидкості SMOD=0. Розрахункове значення константи завантаження регістрів складає 243.

У табл.6.5 приведено константу завантаження регістра TMOD, яка відповідає «2» режиму роботи таймера/лічильника ТС1.

Таблиця 6.5

№ біта                
Ім’я біта GATE1 C/T1 M1 M0 GATE0 C/T0 M1 M0
Біт                

Текст програми має наступний вигляд.

;---------------------------------------------------------------

;--- Опис констант та змінних

INI_P3 equ 00000011b;константа ініціалізації порту РЗ

;дозвіл альтернативних функції TxD, RxD

INI_SCON equ 10000000b;SCON – UART у «1» режимі

INI_PCON equ 00000000b;константа ініціалізації PCON, SMOD=0

INI_TMOD equ 00100000b;TMOD – таймер TC1 у «2» режимі

INI_TC1 equ 243;ініціалізація TH1,TL1 – BR=2400 біт/с

;--- Програма

ORG 0H;адреса рестарта після пуску процесора

SJMP INIT;перехід на початок основної програми

ORG 20H;початкова адреса блоку ініціалізації

ІNІT:

MOV P3, #INI_P3;ініціалізація порту РЗ

MOV SCON, #INI_SCON;задання режиму роботи UART контролера

MOV PCON, #INI_PCON;задання режиму роботи UART контролера

MOV TMOD, #INI_TMOD;задання режиму роботи TC1

MOV TH1, #INI_TC1;завантаження регістрів таймера TC1

MOV TL1, TH1;завантаження регістрів таймера TC1

SETB TR1;включення таймера/лічильника TC1

SETB REN;включення приймача UART-контролера

;--- Головна програма

MAІN:

MAІN_RхD:

JNB RІ, MAІN_TхD;перевірка прапора завершення прийому

CALL UART_RхD;виклик підпрограми обробки прийому

MAІN_TхD:

JNB TI, MAІN;перевірка прапора завершення передачі

CALL UART_TXD;виклик підпрограми обробки передачі

SJMP MAІN;зациклення головної програми

;---Підпрограма обробки завершення прийому

UART_RхD:

CLR RІ;скидання прапора переривань приймача

RET;повернення з підпрограми

;---Підпрограма обробки завершення передачі

UART_TхD:

CLR TI;скидання прапора переривань передавача

RET;повернення з підпрограми

END;директива про закінчення програми

;---------------------------------------------------------------


7. ПРОГРАМУВАННЯ СИСТЕМИ ПЕРЕРИВАНЬ

Система переривань - одна з важливих частин мікроконтролера. Переривання припиняє нормальний хід програми для виконання пріоритетного завдання, яке визначається внутрішню або зовнішню подією.

Для кожної такої події розробляється окрема програма, яку називають підпрограмою обробки запиту на переривання (підпрограмою переривання).

При виникненні події, що викликає переривання, мікроконтролер припиняє виконання поточної програми, зберігає у стеку вміст лічильника команд, і переходить до виконання підпрограми обробки переривання. Після виконання підпрограми переривання здійснюється оновлення попередньо збереженого лічильника команд і мікроконтролер повертається до виконання перерваної програми.

Мікроконтролер АТ89С51 сімейства MCS-51 має систему переривань з п’ятьма джерелами запитів переривання. Кожне джерело має свій фіксований вектор переривання. Під вектором переривання, розуміється комірка пам'яті програм з фіксованою адресою, якій передається управління в разі приходу відповідного запиту переривання.

Адреси відповідних джерел переривань приведені в табл. 7.1

Таблиця 7.1

Джерела переривань Адреси векторів переривань
Зовнішній вхід 0003H
Таймер ТС0 000BH
Зовнішній вхід 0013H
Таймер ТС1 001BH
Послідовний порт 0023H

Для прийму зовнішніх запитів на переривання служать лінії та , які можуть бути запрограмовані на спрацювання як по фронту, так і по рівню, залежно від значення бітів IT0 и IT1 регістра TCON. Бітову структура регістру TCON приведено на рис.5.2.

Якщо значення біта IT0 (для виводу ) або IT1 (для виводу ) дорівнює 0, то запит на переривання виникає при нульовому рівні сигналу на даному вході (переривання по рівню). Якщо ж який-небудь з цих бітів дорівнює 1, то запит на переривання виникає при виявленні негативного перепаду рівня сигналу на цьому вході (переривання по фронту).

При виникненні запиту на переривання встановлюється прапор IE0 або IE1. Якщо переривання було викликане по фронту на зовнішньому виводі або ), то прапор запиту на переривання (IE0 або IE1) скидається апаратно при передачі управління обслуговуючій його підпрограмі обробки переривання.

Якщо запрограмоване переривання по рівню, то стан прапора запиту відповідає рівню сигналу на його зовнішньому виводі.

Для виявлення запиту необхідні рівні сигналів мають бути присутніми на вході на протязі, як мінімум, одного машинного циклу.

Прапор будь-якого переривання, крім того, може бути встановлений програмно для виклику відповідної підпрограми обробки.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: