Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Вниз

BASIC to ASM   Найти похожие ветки 

 
Zombik666   (2002-10-23 15:01) [0]

Всем Hi! Есть BASIC-block. Кто желает мне помочь, сделайте, пожалуйста, из него assenblerную процедуру.

10 OPEN "COM1:600,N,7,2,RS,CS,DS,CD" AS #2
20 A$="D"
30 PRINT #2,A$
40 IN$=INPUT$(14,#2)
50 PRINT IN$
60 CLOSE #2
70 END

Хочу, чтобы переменная IN$ (ну теперь уже ins:string), полученная в Вашей asm-процедуре была бы потом доступна Object Pascalю.

Технические параметры устройства
Transmission rate: 600 baud
Character coding: 7 bit ASCII
Parity: None
Stop bits:2

Заранее благодарю. Zombik.


 
MBo   (2002-10-23 15:17) [1]

В разделе Статьи 2 штуки про работу с COM-портами


 
DC-AC   (2002-10-24 07:31) [2]

;Здесь с индексом _1 для COM1, с индексом _2 для COM2 :-)
TxRegister_1 EQU 03f8h
RxRegister_1 EQU 03f8h
IntEnable_1 EQU 03f9h
IntIdent_1 EQU 03fah
LineControl_1 EQU 03fbh
ModemControl_1 EQU 03fch
LineStatus_1 EQU 03fdh
ModemStatus_1 EQU 03feh
VectorNum_1 EQU 0ch
EnableIRQ_1 EQU 0efh
DisableIRQ_1 EQU 10h
TxRegister_2 EQU 02f8h
RxRegister_2 EQU 02f8h
IntEnable_2 EQU 02f9h
IntIdent_2 EQU 02fah
LineControl_2 EQU 02fbh
ModemControl_2 EQU 02fch
LineStatus_2 EQU 02fdh
ModemStatus_2 EQU 02feh
VectorNum_2 EQU 0bh
EnableIRQ_2 EQU 0f7h
DisableIRQ_2 EQU 08h


;А это от номера COM-порта не зависит ;-)
Ctrl8259_0 EQU 020h
Ctrl8259_1 EQU 021h

...

;Открытие порта
mov ah, 0
mov al, 0a3h ;Параметры порта
mov dx, [COMPort] ;Номер COM-порта, 0-COM1, 1-СOM2
int 14h
call AsynchInit ;Запуск обработчика прерывания

;Передача байта
mov al, ТВОЙ_БАЙТ
call AsynchOut

;Приём байта. Вместо nop вставить доп. условие выхода из цикла,
;например по истечению счётчика или по нажатию клавы.
Wait: nop
call AsynchInStat ;Ждём байт в буфере
or dx, dx
jz Wait
call AsynchIn ;Принятый байт в AL

;Закрытие порта
call AsynchStop

...

PROC AsynchInit
call EmptyBuffer
push ds
push es
mov ax, 3500h+VectorNum
int 21h
mov [vectorSeg], es
mov [vectorOfs], bx
push cs
pop ds
mov dx, offset AsynchISR
mov ax, 2500h+VectorNum
int 21h
pop es
pop ds
in al, Ctrl8259_1
and al, EnableIRQ
out Ctrl8259_1, al
mov dx, LineControl
in al, dx
and al, 07fh
out dx, al
mov dx, IntEnable
mov al, 1
out dx, al
@@10: mov dx, RxRegister
in al, dx
mov dx, LineStatus
in al, dx
mov dx, ModemStatus
in al, dx
mov dx, IntIdent
in al, dx
test al, 1
jz @@10
mov dx, ModemControl
in al, dx
or al, 08h
out dx, al
call EmptyBuffer
ret
ENDP

PROC AsynchStop
in al, Ctrl8259
or al, DisableIRQ
out Ctrl8259, al
mov dx, LineControl
in al, dx
and al, 07fh
out dx, al
mov dx, IntEnable
xor al, al
out dx, al
mov dx, ModemControl
in al, dx
and al, 07fh
out dx, al
push ds
mov ax, 2500h+VectorNum
mov dx, [vectorOfs]
mov ds, [vectorSeg]
int 21h
pop ds
ret
ENDP

PROC AsynchISR
push ax
push bx
push ds
push dx
mov ax, @data
mov ds, ax
mov dx, RxRegister
in al,dx
mov bx, [BufHead]
mov [byte ptr bx], al
inc bx
cmp bx, offset buffer + BufSize
jb @@10
mov bx, offset buffer
@@10: cmp bx, [bufTail]
jne @@20
mov bx, [bufHead]
@@20: mov [bufHead], bx
mov al, EOI
out Ctrl8259_0, al
pop dx
pop ds
pop bx
pop ax
iret
ENDP

PROC AsynchInStat
mov dx, [bufHead]
sub dx, [bufTail]
jge @@10
add dx, BufSize
@@10: ret
ENDP

PROC AsynchIn
push bx
xor al, al
mov bx, [bufTail]
cmp bx, [bufHead]
je @@10
mov al, [byte ptr bx]
inc [bufTail]
cmp [word ptr bufTail], offset buffer + BufSize
jb @@10
mov [bufTail], offset buffer
@@10: pop bx
ret
ENDP

PROC AsynchOut
push dx
push ax
@@10: mov dx, LineStatus
in al, dx
and al, 20h
jz @@10
pop ax
mov dx, TxRegister
out dx, al
pop dx
ret
ENDP

PROC EmptyBuffer
cli
push ax
mov ax, offset buffer
mov [bufHead], ax
mov [bufTail], ax
pop ax
sti
ret
ENDP



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.12.26;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.46 MB
Время: 0.007 c
1-86026
ppcat
2002-12-15 11:50
2002.12.26
StringGrid, удалить строку.


1-85927
SONY
2002-12-15 12:45
2002.12.26
как послать сообщение используя mailslot


14-86093
RV
2002-12-05 10:14
2002.12.26
Задачка :)


3-85849
skirdov
2002-12-07 15:41
2002.12.26
Не получается удалить запись в таблице.


1-85959
Vlad
2002-12-15 16:29
2002.12.26
Подсветка синтаксиса в тексте





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский