
Сообщение от
newart
А можешь вкратце описать принцип работы с rs232?
Это случайно не тоже самое что LPT? (порт принтера который по умолчанию есть на scorpion и kay)
Mike дал уже ссылку, по которой можно почитать на русском
достаточно подробное описание работы RS232.
Что касается RS232, реализованного в ZXMCard, надеюсь
процедуры работы с его портами лучше помогут понять как с ними общаться в Спектруме:
Код:
; Процедуры работы с портом RS232 для ZX_MCard
;------------------------------------------------
SER_P equ 0F8EFh ;Порт RS232 по Кондратьеву
;------------------------------------------------
; передать байт (A)
tx_byte:PUSH BC
LD C,A ;байт для передачи
;/-----
w_tx: CALL tst_tx ;готов к передаче ?
JR Z,w_tx ; пока нет
; готов к передаче
LD A,C ;байт здесь
CALL dat_ou ;передать байт (A)
POP BC
RET
;---------------------------------------------------------
; Принять байт с тайм-аутом
; CY=0 прием OK
; CY=1 истек тайм-аут
rx_t1: PUSH DE
LD DE,2000h ;задаёт тайм-аут
;/-----
rec_b3: CALL tst_rx ;готовность приемника
JR NZ,rec_b2 ; готов
;
DEC DE
LD A,D
OR E
JR NZ,rec_b3
; истек тайм-аут
scf ;CY=1 - признак тайм-аута
pop de
ret
rec_b2: call dat_in ;принять байт
or a ;CY=0 - признак OK
pop de
ret
;---------------------------------
;------ Работа с портами ---------
;---------------------------------
; Принять байт из порта RS232
dat_in: PUSH BC
LD BC,SER_P ;Регистр данных
IN A,(C)
POP BC
RET
;==============================
; Передать байт в порт RS232
dat_ou: PUSH BC
LD BC,SER_P ;Регистр данных
OUT (C),A
POP BC
RET
;==============================
; Проверить на получение байта
tst_rx: PUSH BC
LD BC,SER_P+5*100h ;Чтение (base+5)
IN A,(C) ;
; готовность приема - бит 0, регистра (base+5)
AND 01h ;RDY_RX(0)
POP BC
RET
;=====================================
; Проверить на готовность передать
tst_tx: PUSH BC
LD BC,SER_P+6*100h
IN A,(C) ;(base+6)
; готов к приему - бит 4, регистра (base+6)
and 10h ;CTS ?
JR Z,no_tx ;не готов
; проверить буфер передатчика
DEC B ;BC=SER_P+5*100h
IN A,(C) ;(base+5)
; буфер пуст - бит 5 регистра (base+5)
and 20h ;Bufer empty ?
no_tx: POP BC
RET
;============================