Вам понадобится что-то для отправки данных в MCU, возможно, второе MCU. Я работал над похожим кодом для 6502 и Z80 для старых 8-битных периферийных устройств Atari. Это полудуплексные протоколы, поэтому, когда устройство не используется, оно запрашивает стартовый бит. После обнаружения начального бита он задерживается в 1,5 бита, а затем получает 8 бит с интервалом в 1 бит между битами. Как прием, так и отправка данных подпрограмм кодируются для получения точного количества циклов для синхронизации. Это были старые устройства, и даже самая быстрая скорость передачи данных была относительно медленной - 19 микросекунд на бит ~ = 52600 бод.
Вопрос был обновлен. Если инструкции ввода и вывода выполняются в одно и то же время (счетчик циклов), вы можете изменить код приема для передачи данных, чтобы проверить битовое время и точно подтвердить, насколько быстро работает процессор.
Для определения времени, необходимого для определения начального бита и для ожидания времени в 1,5 бита, вам потребуется рассчитать минимальное и максимальное количество циклов для определения начального бита. Максимальное число циклов будет входной инструкцией, которая просто пропускает задний фронт начального бита, тестовую инструкцию и цикл обратно на вход, после чего следует еще один тест и затем падение цикла, чтобы продолжить прием. Минимальный счетчик циклов будет входом, который едва улавливает передний фронт стартового бита, выполняет тест, а затем проходит через цикл. Затем оставшаяся часть полученного кода должна выбирать как можно ближе к середине битовых периодов данных.
Вот пример кода для 480 Гц Z80, который получает данные за 19 микросекунд == 76 циклов на бит данных. Комментарии включают количество циклов для каждой инструкции. Идеальное время ожидания от начального бита до 1-го бита данных составляет 114 циклов. Минимальное, максимальное время цикла для начального битового цикла составляет 20,50 циклов. Используется дополнительная задержка плюс вход первого бита данных из 79 циклов, поэтому минимальное, максимальное время цикла для определения начала приема 1-го бита данных составляет 99 129 циклов, в пределах минимальных, максимальных границ 76 152 циклов. Остальные биты данных считываются точно с 76 циклами на бит.
LD E,0 ;SET UP
; ; START BIT TO DATA BIT=114
NRXF0: LD A,(FBS) ;(13) WAIT FOR START BIT
AND FBSRXD ;(7)
JP NZ,NRXF0 ;(10)
; ; NOTE: 20 MIN, 50 MAX, 35 AVG
EX (SP),HL ;(19) DELAY
EX (SP),HL ;(19)
LD A,(HL) ;(7)
NRXF1: LD A,(HL) ;(7)
LD A,(HL) ;(7)
LD D,8 ;(7) 8 BITS PER BYTE
; ; 76 CYCLES PER DATA BIT
NRXF2: LD A,(FBS) ;(13) GET DATA BIT
AND FBSRXD ;(7)
ADD A,0FFH ;(7)
RR C ;(8)
PUSH BC ;(11) DELAY
POP BC ;(10)
NOP ;(4)
DEC D ;(4) LP TIL BYTE DONE
JR NZ,NRXF2 ;(12/7)
RET NZ ;(5) DELAY
NRXF4: LD A,(FBS) ;(13) WAIT FOR NEXT START BIT
AND FBSRXD ;(7)
JP NZ,NRXF4 ;(10)
; ; START BIT TO DATA BIT=114
LD (HL),C ;(7) STORE BYTE
LD A,C ;(4) DO CKSUM
ADD A,E ;(4)
ADC A,0 ;(7)
LD E,A ;(4)
INC HL ;(6) ADV ADR
DJNZ NRXF1 ;(13/8) LP IF MORE BYTES