
- •Лабораторная работа № 3
- •1.2. Краткий обзор режима 0
- •1.3. Асинхронные режимы
- •1.3.1. Краткий обзор Режима 1
- •1.3.2. Краткий обзор Режима 2
- •1.3.3. Краткий обзор Режима 3
- •1.4. Многопроцессорная связь
- •1.5. Программирование последовательного порта
- •1.5.1. Регистр скорости передачи
- •1.5.2. Регистр буфера приемника последовательного порта
- •1.5.3. Регистр буфера передатчика последовательного порта
- •1.5.4. Регистр управления последовательным портом.
- •1.5.5. Регистр статуса последовательного порта.
- •1.6. Прерывания последовательного порта
- •1.6.1 Описание работы контроллера прерывания
- •1.6.2. Приоритеты прерывания
- •1.6.3. Изменение приоритетов прерывания
- •1.6.4. Программы обработки прерывания
- •Фрагмент программы
- •2. Порядок выполнения работы
- •3. Содержание отчета
1.5.5. Регистр статуса последовательного порта.
Serial Port Status Register
Аббревиатура - SP_STAT.
Размер - 1 байт.
Находится по адресу 11h.
Использовать для записи в окне HWindow 15.
Использовать для чтения в окне HWindow 0.
SP_STAT
адрес 11h ,
запись HWindow 15
чтение HWindow 0)
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
RPE/RB8 |
RI |
TI |
FE |
TXE |
OE |
R |
R |
R - зарезервированные биты, всегда должны быть очищены.
OE - (Overrun Error, ошибка наложения) - этот бит устанавливается, если данные из сдвигающего регистра приёмника загружаются в SBUF(RX) до того, как будет прочитан предыдущий принятый байт. Чтение SP_STAT очищает этот бит.
TXE - (SBUF(TX) Empty, передатчик пуст) - этот бит =1, если буфер передатчика пуст и готов принять до двух . Он очищается, когда байт записывается в SBUF(TX).
FE - (Framing Error, ошибка кадра) - этот бит =1, если внутри принятого кадра не найден стоп-бит. Чтение SP_STAT очищает этот бит.
TI - (Transmit Interrupt, флажок прерывания передатчика) - этот бит устанавливается в начале передачи стоп-бита. Чтение SP_STAT очищает этот бит.
RI - (Receive Interrupt, флажок прерывания приёмника) - этот бит устанавливается при приёме последнего бита данных. Чтение SP_STAT очищает этот бит.
Обратите внимание, что события приёма/передачи устанавливают флажки RI и TI и соответствующие биты в регистрах захвата прерывания (INT_PEND), в то время как установка битов RI и TI программным способом не воздействует на биты регистра захвата прерывания и не вызывает прерывания. Аналогично, чтение регистра SP_STAT очищает биты RI и TI, но не очищает соответствующие биты регистра захвата прерывания .
RPE/RB8 (Received Parity Error, ошибка четности при приёме/Received Bit 8, девятый принятый бит):
- RPE=1, если проверка на четность PEN разрешена (SP_CON.2=1) и произошла ошибка четности.
- RB8=1, если проверка на четность PEN запрещена (SP_CON.2=0) и девятый принятый бит =1;
Чтение SP_STAT очищает этот бит.
По сбросу состояние регистра SP_STAT следующее:
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
0 |
0 |
0 |
1 |
0 |
0 |
1 |
1 |
Обратите Внимание, что чтение регистра SP_STAT очищает все флажки, за исключением TXE. По этой причине, мы рекомендуем, чтобы Вы копировали содержимое регистра SP_STAT в промежуточный регистр и затем выполняли команды проверки разрядов типа JBC и JBS только на этом промежуточном регистре. Иначе, если выполнится больше одной команды проверки разрядов, могут быть возвращены неправильные значения битов.
1.6. Прерывания последовательного порта
Последовательный порт может быть сконфигурирован для того, чтобы генерировать или одно прерывание последовательного порта (Serial Port Interrupt) или раздельные прерывания - и по передаче (Transmit Interrupt) и по приёму (Receive Interrupt).
Если прерывание последовательного порта замаскировано, а прерывания по приёму и передаче разрешены, флажки RI и TI генерируют раздельные прерывания приёма и передачи.
Таблица 3.3. Регистры прерываний последовательного порта
Мнемоника регистра |
Название |
Ад-рес |
Описание |
INT_MASK |
Маска прерывания |
08H |
Установка бита INT_MASK.6 разрешает прерывание последовательного порта (INT06, 200CH). Очистка бита INT_MASK.6 запрещает прерывание последовательного порта |
INT_MASK1 |
Маска прерывания 1 |
13H |
Установка бита INT_MASK1.0 разрешает прерывание передатчика (INT08, 2030H). Очистка бита INT_MASK1.0 запрещает прерывание передатчика. Установка бита INT_MASK1.1 разрешает прерывание приёмника (INT09, 2032H). Очистка бита INT_MASK.1 запрещает прерывание приёмника. |
INT_PEND |
Захват прерывания |
09H |
Установка бита INT_PEND.6 индицирует захват прерывания последовательного порта (INT06). Бит сбрасывается при переходе к вектору по адресу 200CH. |
INT_PEND1 |
Захват прерывания 1 |
12H |
Установка бита INT_PEND1.0 индицирует захват прерывания передатчика (INT08). Бит сбрасывается при переходе к вектору по адресу 2030H. Установка бита INT_PEND1.1 индицирует захват прерывания приёмника (INT09). Бит сбрасывается при переходе к вектору по адресу 2032H. |
Если прерывание последовательного порта разрешено, а прерывания по приёму и передаче запрещены, и флажок RI, и флажок TI генерируют одно и то же прерывание последовательного порта. Когда флажок TI генерирует прерывание, устанавливается бит 5 в регистре SP_STAT. Когда флажок RI генерирует прерывание, устанавливается бит 6 в регистре SP_STAT.
Чтобы разрешить индивидуальные прерывания по передаче и приёму, установите биты TI_MASK (INT_MASK1.0) и RI_MASK (INT_MASK1.1) в регистре INT_MASK1. Чтобы разрешить прерывание последовательного порта, установите бит SER_MASK в регистре INT_MASK (INT_MASK.6).