Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
УЧПУ.Контроллеры электроавтоматики.doc
Скачиваний:
21
Добавлен:
17.09.2019
Размер:
6.86 Mб
Скачать

2.4.1.2. Асинхронный приемник модуля usart.

Асинхронный приемник работает независимо от передатчика, осуществляя таким образом полный дуплекс обмена информацией, однако существует синхронизация работы обоих узлов через генератор тактовых импульсов на основе регистра SPBRG. Структурная схема приемника приведена на рис.

Приемник настраивается и управляется регистром статуса RCSTA, распределение и наименование разрядов которого приведены в таблице 23 .

Работает приемник следующим образом. Входная посылка от абонента поступает на вывод RC7 микроконтроллера, который в данном случае должен быть запрограммирован на вход. Импульсы посылки, пройдя мажоритарный детектор поступают на вход сдвигового регистра RSR. Данный регистр является служебным внутренним регистром и недоступен пользователю. Ввод посылки начинается со старт-бита и заканчивается приемом стоп-бита. После приема стоп-бита содержимое регистра RSR (без старт-бита и стоп-бита) автоматически переписывается в регистр RCREG. 8 – ой бит (при 9 – ти битном приеме) записывается в «0» бит регистра RCSTA (см. таблицу 24 ). После записи принятого байта в регистр RCREG устанавливается флаг RCIF (в регистреPIR1), который в совокупности с битом RCIE (регистр PIE1) вызывает прерывание от приемника USART, если оно разрешено. Принятый байт должен быть программно прочитан в регистре RCREG, при этом флаг RCIF будет автоматически сброшен. Если по какой либо причине принятый байт не был прочитан и был принят второй байт, то первый принятый байт будет переписан в буфер регистра RCREG, а в вновь принятый байт будет сохранен в самом регистре RCREG. Двойным чтением из регистра RCREG информация будет сохранена. Если после заполнения буфера и самого регистра будет принят третий байт, то принятая посылка останется в регистре RSR, и будет установлен флаг ошибки приема OERR, принятый третий байт при этом будет потерян. Если при приеме посылки не будет обнаружен стоповый бит, то будет выставлен флаг ошибки кадра FERR, что даст информацию о надежности работы приемника.

Мажоритарный детектор предназначен для повышения надежности определения уровня сигнала в принимаемой посылке.

Таблица 24

Номер разряда

7

6

5

4

3

2

1

0

Обозн. разряда

SPEN

RX9

SREN

CREN

ADDEN

FERR

OERR

RX9D

где:

7 бит – SPEN – разрешение работы USART: «1» - модуль включен, выводы микроконтроллера RC7, RC6 подключены к модулю USART, «0» - модуль выключен.

6 бит – RX9 – разрешение 9–ти разрядного приема: «1» - 9-ти разрядный прием, «0» - 8-ми разрядный прием.

5 бит – SREN – для асинхронного приема не имеет значения.

4 бит – CREN – разрешение приема: «1» - прием разрешен, «0» - прием запрещен.

3 бит – ADDEN - разрешение детектирования адреса: «1» - детектирование адреса разрешено, если восьмой бит регистра RSR равен 1, то содержимое регистра RSR переписывается в регистр RCREG, рассматривается как адрес и генерируется прерывание; при равенстве 0 восьмого бита регистра RSR (<0> регистра RCSTA), принятый байт является информацией. При равенстве 0 бита ADDEN детектирование адреса запрещено, все байты принимаются как информационные.

2 бит – FERR – ошибка кадра: «1» - была ошибка – отсутствие стоп-бита, сбрасывается при чтении из регистра RCREG, «0» - ошибки не было.

1 бит – OERR – ошибка переполнения приемного буфера: «1» - произошла ошибка, бит сбрасывается при сбросе бита CREN – разрешение приема, «0» - ошибки не было.

0 бит – RX9D – 9-ый бит принятых данных (при разрешении 9-ти битного приема0.

Рекомендуемая последовательность действий при программировании приемника USART.

  1. Установить требуемую скорость приема с помощью регистра SPBRG и бита BRGH (см. раздел передатчика USART), если скорость не была установлена ранее.

  2. Выбрать асинхронный режим сбросом бита SYNC и установкой бита SPEN.

  3. Установить биты RCIE, PEIE, GIE при работе по прерываниям.

  4. Установить бит RX9 при разрешении 9-ти битного приема.

  5. Разрешить прием установкой бита CREN.

  6. Ожидать установку флага RCIF или прерывания.

  7. Считать 9-тый бит данных и проверить наличие ошибки FERR.

  8. Считать принятый байт из регистра RCREG.

  9. При обнаружении ошибки переполнения сбросить бит CREN.

Примечание. При приеме массива данных и отсутствии ошибок возвратиться на пункт 6.

При работе модуля USART в сетевом подрежиме, необходимо при программировании приемника ввести операции дешифрации адреса, поэтому алгоритм работы будет несколько иной:

1, 2, 3, 4 пункты аналогичны рассмотренным выше.

5. Установить бит ADDEN для разрешения детектирования адреса.

6. Разрешить прием установкой бита CREN.

7. Ожидать установки бита RCIF или прерывания.

8. Считать принятый байт из регистра RCREG для опознания адреса.

9. При совпадении принятого адреса с собственным сбросить биты ADDEN и RCIF для приема последующего байта информации.

Работу модуля USART в синхронных режимах при необходимости можно изучить по руководству применения PIC-микроконтроллеров [ ].

Рассмотрим пример программирования модуля USART в режиме асинхронного дуплекса. Общая задача заключается в создании последовательного канала связи между котроллером и СОМ – портом компьютера. Принципиальная схема канала будет выглядеть следующим образом.

Рис. 21 Принципиальная схема канала связи с использованием модуля USART микроконтроллера.

Для работы данного канала необходима настройка передатчика и приемника модуля USART и физическая реализация преобразователя сигналов из формата USART в формат COM и обратно, выполненного на микросхеме MAX 232/

Для передатчик:

Регистр TXSTA = 0x20 – работа с восьмибитовой информацией, сдвиговый регистр TSR сброшен, низкоскоростной режим работы BRGH = 0, асинxронный режим SYNC = 0, передача разрешена TXEN = 1. В регистр SPBRG запишем число 0x06, что при низкоскоростном режиме и тактовой частоте Fosc = 4 MHZ обеспечивает скорость работы 9600 бод (см. справочные данные на конкретный микроконтроллер).

Для приемника:

Регистр RCSTA = 0x90 – USART включен, 8 – битовый обмен, прием разрешен, адрес не дешифрируется, ошибок нет, 9-ый бит отсутствует.

Настроечный фрагмент программы имеет вид:

#define XTAL_FREQ 4MHZ

#define byte unsigned char

#define word unsigned int

#include <pic.h>

#include <stdio.h>

__CONFIG(HS & WDTDIS & PWRTEN & LVPDIS & DUNPROT & WRTEN);

void main() {

TRISС = 0xFF; // RC6, RC7 на вход

TXSTA = 0x20; // настройка передатчика

RCSTA = 0x90; // настройка приемника

SPDRG = 0x06; // настройка генератора на скорость 9600 бод

Далее следует программа обмена информацией между абонентами