Последовательный порт микроконтроллера может использоваться в виде регистра сдвига для расширения ввода-вывода или в качестве UART с фиксированной или переменной скоростью последовательного обмена и возможностью дуплексного включения. То есть через порт можно передавать и принимать данные одновременно. Порт может принимать очередной байт даже в том случае, если уже принятый до этого байт не был прочитан из регистра приёмника. Однако, если до окончания приёма находящийся в регистре приёмника байт не будет прочитан, принятый байт теряется. Программный доступ к регистрам приёмника и передатчика осуществляется обращением к регистру специальных функций SBUF.
Ниже приведён пример фрагмента программы, принимающей из последовательного порта байт и отправляющей его назад в последовательный порт, настроенный на 8-битный режим со скоростью передачи 1200 бод при тактовой частоте микроконтроллера 6 МГц.
MOV SCON,#052H;установка режима 8-битного UART
MOV TMOD,#020H;установка режима автозагрузки таймера 1
MOV TCON,#069H
MOV TH1,#0F3H;автозагружаемое значение для получения
;скорости 1200 бод на частоте 6 МГц
;приём символа из порта
CIN: JNB RI,CIN;ожидание завершения приёма
MOV A,SBUF;чтение символа
CLR RI;очистка флага приёма
;выдача символа в последовательный порт
COUT: JNB TI,COUT;ожидание окончания передачи
CLR TI;очистка флага передачи
MOV SBUF,A;выдача символа
SJMP CIN
END
Реализация функций времени