![]() |
|
ПРОГРАММИРОВАНИЕ
|
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
CS | B14 | B13 | B12 | B11 | B10 | B9 | B8 | B7 | B6 | B5 | B4 | B3 | B2 | B1 | B0 |
CS (CLOCK_SRC, Serial Port Cloc Baud Rate Register, источник синхронизации последовательного порта) - этот бит определяет внутренний (CS=1, вывод XTAL1) или внешний (CS=0, вывод T2CLK(P2.3)) источник синхронизации для последовательного порта.
B0...B14 (BAUD_VALUE) - эти биты составляют BAUD_VALUE. Младший байт загружается первым.
После сброса состояние регистра BAUD_RATE следующее:
15 | 14 | 13 | 12 | 11 | 10 | 9 | 8 | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
Для определения скорости передачи используются следующие формулы (Fosc- частота на выводе XTAL1 в МГц):
- синхронный режим 0:
BAUD_VALUE=(Fosc/(Baud Rate x 2))-1
или T2CLK/Baud Rate
- асинхронные режимы 1,2,3:
BAUD_VALUE=(Fosc/(Baud Rate x 16))-1
или T2CLK/(Baud Rate x 8)
Значения скоростей передачи, используемые при частоте внутренней синхронизации на выводе XTAL1 - 16 MHz, приведены ниже.
Скорость передачи | Режим 0 | Режимы 1,2,3 |
9600 | 8340H | 8067H |
4800 | 8682H | 80CFH |
2400 | 8D04H | 81A0H |
1200 | 9A0AH | 8340H |
300 | E82BH | 8D04H |
Аббревиатура - SBUF (RX)
Размер - 1 байт
Находится по адресу 07h
Использовать для записи в окне HWindow 15
Использовать для чтения в окне HWindow 0
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Регистр буфера приемника последовательного порта содержит данные, получаемые из последовательного порта. Приемник последовательного порта использует двойную буферизацию и поэтому может начать прием второго байта данных до того, как из него будет прочитан первый байт. Данные удерживаются в сдвигающем регистре приемника до тех пор, пока не будет получен последний бит данных, затем байт данных загружается в SBUF(RX). Если данные из сдвигающего регистра загружаются в SBUF(RX) до того, как из SBUF(RX) будет прочитан предыдущий байт данных, установится бит ошибки переполнения (SP_STAT.2). Регистр SBUF(RX) всегда содержит последний принятый из последовательного порта байт данных. По сбросу SBUF(RX)=00000000.
Аббревиатура - SBUF (TX)
Размер - 1 байт
Находится по адресу 07h
Использовать для записи в окне HWindow 0
Использовать для чтения в окне HWindow 15
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
Регистр буфера передатчика последовательного порта содержит данные, которые готовы для передачи. В режимах 1,2,3 запись в SBUF(TX) начинает передачу. В режиме 0 запись в SBUF(TX) начинает передачу, только если отключен приемник (SP_CON.3=0). По сбросу SBUF(TX)=00000000.
Программирование регистра управления последовательным портом устанавливает коммуникационный режим, разрешает или запрещает:
- работу приемника;
- контроль четности;
- передачу девятого бита данных.
Передатчик (TXD) совместно с портом P2 использует вывод P2.0, и поэтому, чтобы разрешить функцию передатчика, должен быть установлен пятый бит в регистре управления IOC1. В режимах 1,2,3 вывод TXD служит в качестве выхода передатчика последовательного порта, а в режиме 0 - в качестве вывода синхронизации. Для запрещения функции передатчика для вывода P2.0 надо очистить бит IOC1.5.
Приемник (RXD) совместно с портом P2 использует вывод P2.1, и поэтому, чтобы разрешить функцию приемника, должен быть установлен третий бит в регистре управления последовательного порта SP_CON. В режимах 1,2,3 RXD служит в качестве вывода приемника последовательного порта, а в режиме 0 - в качестве приемника или передатчика.
Для запрещения функции приемника для вывода P2.1 нужно очистить бит SP_CON.3 .
Аббревиатура - SP_CON
Размер - 1 байт
Находится по адресу 11h
Использовать для записи в окне HWindow 0
Использовать для чтения в окне HWindow 15
7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
R | R | R | TB8 | REN | PEN | SER_MODE | SER_MODE |
SER_MODE - эти два бита выбирают коммуникационный режим:
Бит 1 | Бит 0 | |
0 | 0 | Режим 0 |
0 | 1 | Режим 1 |
1 | 0 | Режим 2 |
1 | 1 | Режим 3 |
Выбор нового коммуникационного режима сбрасывает последовательный порт ввода/вывода и прекращает передачу и прием в канале.
PEN (Even Parity Enable, разрешение контроля четности) - в режимах 1 и 3 установка этого бита разрешает контроль четности. В режиме 2 этот бит должен быть очищен. Когда этот бит установлен, при передаче TB8 содержит значение бита контроля четности. При приеме, если принятый и вычисленный бит контроля четности не совпали, бит SP_STAT.7 устанавливается в 1.
REN (Receive Enable, разрешение приема) - установка этого бита разрешает функцию RXD для вывода P2.1/RXD. Когда этот бит установлен, переход сигнала с высокого уровня на низкий на выходе RXD в режимах 1,2,3 начинает прием. В режиме 0 для начала передачи этот бит должен быть очищен, а для начала приема этот бит должен быть установлен. Очистка этого бита останавливает процесс приема и запрещает дальнейший прием.
TB8 (Transmit Ninth Data Bit, девятый передаваемый бит данных) - это девятый бит данных, который будет передан в режиме 2 или 3. Этот бит очищается после каждой передачи, поэтому, если требуется, он должен быть установлен перед записью в SBUF(TX). Когда SPCON.2=1, ТВ8 содержит значение бита контроля четности.
R - зарезервированные биты, всегда должны быть очищены.
По сбросу состояние регистра SP_CON следующее: 00001011.
Аббревиатура - SP_STAT
Размер - 1 байт
Находится по адресу 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, если проверка на четность разрешена (SP_CON.2=1) и произошла ошибка четности. RB8=1, если проверка на четность запрещена (SP_CON.2=0) и девятый принятый бит=1. Чтение SP_STAT очищает этот бит.
Обратите внимание, что чтение регистра SP_STAT очищает все флаги, за исключением TXE. По этой причине мы рекомендуем копировать содержимое регистра SP_STAT в промежуточный регистр и затем выполнять команды проверки разрядов типа JBC и JBS только на этом промежуточном регистре. Если выполнится больше одной команды проверки разрядов, могут быть возвращены неправильные значения битов.
Последовательный порт может быть сконфигурирован так, чтобы генерировать или одно прерывание последовательного порта (Serial Port Interrupt), или раздельные прерывания и по передаче (Transmit Interrupt), и по приему (Receive Interrupt).
Если прерывание последовательного порта замаскировано, а прерывания по приему и передаче разрешены, флаги RI и TI генерируют раздельные прерывания приема и передачи.
Если прерывание последовательного порта разрешено, а прерывания по приему и передаче запрещены, флаг RI и флаг TI генерируют одно и то же прерывание последовательного порта. Когда флаг TI генерирует прерывание, устанавливается бит 5 в регистре SP_STAT. Когда флаг RI генерирует прерывание, устанавливается бит 6 в регистре SP_STAT.
Чтобы разрешить индивидуальные прерывания по передаче и приему, установите нулевой TI_MASK и первый RI_MASK биты в регистре маскирования прерываний INT_MASK1 (см. Приложение). Чтобы разрешить прерывание последовательного порта, установите бит SER_MASK в регистре INT_MASK (INT_MASK.6) (см. Приложение).
Таблица 5.1
Мнемоника регистра | Название | Адрес | Описание |
INT_MASK | Маска прерывания | 08H | Установка бита INT_MASK.6 разрешает прерывание последовательного порта INT06,800CH. Очистка бита INT_MASK.6 запрещает прерывание последовательного порта. |
INT_MASK1 | Маска прерывания 1 | 13H | Установка бита INT_MASK1.0 разрешает прерывание передатчика (INT08,8030H). Очистка бита INT_MASK.0 запрещает прерывание передатчика. Установка бита INT_MASK1.1 разрешает прерывание приемника (INT09,8032H). Очистка бита INT_MASK.1 запрещает прерывание приемника. |
INT_PEND | Захват прерывания | 09H | Установка бита INT_PEND.6 индицирует захват прерывания последовательного порта (INT06). Бит сбрасывается при переходе к вектору по адресу 800CH. |
INT_PEND1 | Захват прерывания 1 | 12H | Установка бита INT_PEND.0 индицирует захват прерывания передатчика (INT08). Бит сбрасывается при переходе к вектору по адресу 8030H. Установка бита INT_PEND.1 индицирует захват прерывания приемника (INT09). Бит сбрасывается при переходе к вектору по адресу 8032H. |
Serial_Out:
jbc SP_STAT, 3, Serial_Out ; Тестирование третьего бита регистра состояния (Буфер пуст?)
stb data, SBUF ; ОК! Передаем байт
ret