|
Алгоритм такой: передаю байт контроллеру, он передает мне этот же байт обратно. Вот такой простой цикл. В качестве буфера - MAX202EEPE.
Проблема следующая: например, передаю я #80h, а получаю - #C0h!
Кроме того, контроллер мне иногда присылает 2 байта вместо одного!!!(что, вообще-то, программой исключено). Причем, второй байт принимает одно из 3-х значений: #FCh, #8Fh, #E3h (при любых значения байта, переданного контроллеру). Неизвестно лишь время появления этого сбоя - появляется случайным образом.
Вот программа:
org 00
ljmp begin
pcon equ 87h
org 100
begin:
mov p1,#11111111b
mov p3,#11111111b
mov ie,#00000000b
mov tmod,#00100000b
mov th1,#11111111b
mov tl1,#11111111b
orl pcon,#10000000b
mov scon,#01010000b
setb tr1
nop
start:
jnb ri,start
mov a,sbuf
clr ri
mov sbuf,a
loop_ti:
jnb ti,loop_ti
clr ti
jmp start
end
Откуда берется второй байт и почему контроллер возвращает значения, не соответствующие посланным ему?
Если предположить, что некая помеха инициирует ложный прием байта, то можно объяснить, почему приходит 2-й байт. Но тогда он приходил бы в любое время, независимо от "полезных" пересылок. Но этого не происходит. Второй (ложный) байт может появиться только сразу же после первого ("полезного") и ни в какое друго время.
Когда контроллер работает по более серьезной программе, с использованием таимера 0 (в режиме - два 8-ми разрядных счетчика, которые подвешены на прерывания), можно сделать вывод, что в этих сбоях виноват контроллер. Один из счетчиков формирует ШИМ. Скважность этой ШИМ поступает с компа, вручную - один байт. Этот байт пишется в РОН и, затем, в задающий регистр таймера. Все бы хорошо, но вот во время этих сбоев (когда вместо одного ответного байта приходят два), ШИМ резко меняет скважность на наименьшую (как-будто записали FF в задающий регистр таймера). Очередная посылка байта-параметра ШИМ нормализует сигнал,не будет следующего сбоя и т.д.
И для более полной картины: кварц 22.1184 мГц, com-порт опрашивается программой - Advanced Serial Port Monitor, скорость передачи 115200 бод, провод от мыши (немного перепаян), силовые линии рядом не проходят.
Заранее благодарен всем ответившим!
E-mail: info@telesys.ru