Я использую PIC16F18326 для передачи некоторых данных через UART (асинхронный, скорость передачи 250 кбод).MCU работает на частоте 32 МГц с фактической частотой команд 8 МГц.
Я использую следующий код сборки для отправки 4 байтов (от 0xAA до 0xAD - не обращайте внимания на бесполезный повторный BANKMASK):
movlw 0xAA
banksel TX1REG
movwf BANKMASK(TX1REG)
movlw 0xAB
banksel TX1REG
movwf BANKMASK(TX1REG)
movlw 0xAC
banksel TX1REG
movwf BANKMASK(TX1REG)
movlw 0xAD
banksel TX1REG
movwf BANKMASK(TX1REG)
goto $
В результате работы логического анализатора было отправлено только 0xAA и 0xAD (первый и последний байт).
Я знаю, что не могу отправить 4 байта подряд(без каких-либо задержек или каких-либо проверок регистров UART), но я бы ожидал отправить 0xAA и 0xAB (первые 2 байта).
Согласно данным таблицы, если регистры TX1REG и TSR пусты (это мой случай, так как я никогда ничего не передавал), я могу написать в TX1REG, чтобы начать отправку первого байта, а затем, по крайней мере, через 1 тактовый цикл, я могу поставить в очередь второй байт.Согласно приведенному ниже коду, между двумя записями существует 3 такта.
Итак, что же не так?