PDA

Просмотр полной версии : Передача данных через 8251



na1s
03.06.2008, 18:08
Есть программа передачи массива с одного компа на другой через 8251 в синхронном режиме, препод говорит, что есть две возможности синхронизировать два компа. 1 ждать DSR, вторую я не знаю. А вот моя реализация:
Но он говорит здесь есть ошибка связанная с ложной записью, кто-нибудь может подсказать в чем проблема? Пожалуйста помогите, а то достало уже. Нет ни книг описывающий как писать программы для 8251, ни препод не написал хотя бы методичку как писать.

Передатчик


mvi a, 82h ; INIT ВВ55
out 83h
mvi a, 36h ; INIT ВИ53
out 87h ; CT0, режим 3, 2 байта
mvi a, 0a7h ; мл. байт коэф. пересчета
out 84h
mvi a, 00h ; ст. байт
out 84h
lxi d, 3377h ; синхросимволы
xra a ; INIT ВВ51
out 89h ; поиск CI
out 89h
out 89h
mvi a, 40h ; сброс
out 89h
mvi a, 08h ; синхр.режим, 7 бит, 2 синхр.си
out 89h ; внутр. синхр., нет контроля
mov a, d ; первый синхр. символ
out 89h
mov a, e ; второй синхр. символ
out 89h
in 88h ; ложное чтение
mvi a, 31h ; TxEN ER RTS
out 89h
out 88h ; ложная запись
lxi b, 100h ; коэф. задержки
w1: in 89h ; ждем TxRDY (CTS)
ani 01h
jz w1
w2: dcr c ; задержка
jnz w2
dcr b
jnz w2
w3: in 89h ; ждем TxRDY
ani 01h
jz w3
mvi a,55h ; Тупо выводим 55h
out 88h ; выводим
dcr b
jnz w3 ; цикл
rst7


Приемник

mvi a, 76h ; INIT ВИ53
out 87h ; CT1, режим 3, 2 байта
mvi a, 0a7h ; мл. байт коэф. пересчета
out 85h
mvi a, 00h ; ст. байт
out 85h
lxi d, 3377h ; синхросимволы
xra a ; INIT ВВ51
out 89h ; поиск CI
out 89h
out 89h
mvi a, 40h ; сброс
out 89h
mvi a, 08h ; синхр. режим, 7 бит, 2 синхр.симв.
out 89h ; внутр. синхр., нет контроля
mov a, d ; первый синхр. символ
out 89h
mov a, e ; второй синхр. символ
out 89h
in 88h ; ложное чтение
mvi a, 94h ; EN ER RxEN
out 89h
lxi h, 0899h ; пишем в память с 0900h
mvi b, 00h ; прием 256 символов
w1: in 89h ; ждем DSR
ani 80h
jz w1
mvi a, 06h ; RxEN DTR
out 89h
w2: in 89h ; ждем RxRDY
ani 02h
jz w2
in 88h ; читаем
cmp d ; сравниваем с 1-м синхр.симв.
jz w2
cmp e ; сравниваем со 2-м синхр.симв.
jz w2
inx h ; HL++
mov m, a ; пишем в память
dcr b ; B--
jnz w2 ; цикл
rst7
[/code]