Что-то не растет кокос.
Поиск привел меня сюда же, на форум. Нашел, что PRINTBIN = "PRINT var ;", но на результат не влияет.
Уже сделал тестовые программы, в которых только прием и передача. Суть в следующем:
На приемнике есть LCD. С передатчиком связан по двум проводам. Один из них UART, второй провод для сигнализации передатчику, что все данные приняты, обработаны и отображены.
Приемник принимает данные и ставит на провод готовности единцу, показывая, что следующую порцию данных принять не готов. После обработки и отображения данных, на провод готовности ставит ноль и зацикливается, пока не будут приняты новые данные.
Передатчик же, отправляет данные только когда на линии готовности видит ноль.
Передатчик отправляет строку, для наглядности "123456789012345678ABCD". Первый сеанс передачи дает в приемнике эту строку правильно. А все последующие сеансы передачи в приемнике дают строку "ABCD123456789012345678".
Sergik07 написал(а):Пробовали Print и Input с буфером? В хелпе есть подсказка CONFIG SERIALIN.
В подсказке используются еще CTS и RTS. У меня нет возможности их использовать. У меня всего два провода
Передатчик
dim s as string * 22
Label1:
waitms 100
if pinb.0 = 1 then goto label1
s="123456789012345678ABCD"
set portd.3
print s ;
reset portd.3
goto label1
end
Приемник
dim received as string * 22
on urxc receive
dim rcv_flag as byte
dim s1 as string * 20
dim s2 as string * 2
rcv_flag = 0
enable interrupts
enable urxc
reset portb.0 ' свободен и готов принимать
label2:
nop
if rcv_flag = 0 then goto label2
s1 = left(received, 20)
s2 = right(received, 2)
locate 1,1 : lcd s1
locate 2,1 : lcd s2
reset portb.0 ' свободен и готов принимать
rcv_flag = 0
goto label2
receive:
inputbin received
set portb.0 ' занят
return
Этот пример в протеусе работает как часы. А в железе происходит сдвиг данных.
Еще заметил, что в передатчике, сделанный для отладки set portd.3 происходит раньше, чем завершится передача данных на линии Tx. (в протеусе)
Я уже не знаю, куда копать...