📄 pcasm.asm
字号:
;=========================================================================================
;本程序为在DOS环境下,用微机控制KY系列智能液晶终端最简单的程序。
;在Microsoft (R) Macro Assembler Version 5.00 环境中编译并运行通过.
;使用COM1,2,3,4, 波特率:9600Hz,19200Hz
;本程序运行结果:选择串口和波特率后由键盘输入的字符在终端显示出来.
;输出数据格式:8个数据位,1个停止位,校验位恒0
;本程序仅供KY系列智能液晶终端的用户参考.
;北京金创业科技开发中心
;===========================================================================================
.286
DATAAREA segment
say_input_string db 0ah,0dh,'Input string for transmit:',24h
say_next db 0dh,0ah,'Select 1=exit 2=continue',24h
saybund19200 db 'Set Com work as 19200bbit/s ...!$',0dh,0ah
receivebuffer db 1000h dup(0)
sioport dw 3f8h,2f8h,3e8h,2e8h
saysecio db 'Select Com 1-COM1 2-COM2 3-COM3 4-COM4:',0dh,0ah,'$'
saybund db 'Select bund 1-9600 2-19200$'
singbyte db 0
recivefrom db 0dh,0ah,'Have recive one from',0dh,0ah,24h
PORTIOBAS DW 3F8H
SAYFUNCTION db 'select 1=answer 2=exit',0dh,0ah,'$'
reccomd db 100h dup(0)
input_buffer db 100
db 100 Dup(0)
DATAAREA ENDS
;-----------------------------
stack_seg segment stack
dw 100H dup(?)
stack_top label word
stack_seg ends
READMT SEGMENT
MAIN PROC FAR
ASSUME CS:READMT,ds:DATAAREA
ASSUME SS:stack_seg
;---开始--------------------------
START:
mov sp,stack_top
push ds
sub ax,ax
PUSH AX
mov ax,DATAAREA
MOV DS,AX
;Here You Can Write The Programe
;GET THE DATA AND YEAR
mov dx,offset saysecio; db 'Select Com 1-COM1 2-COM2 3 COM3 4COM4:$'
mov ah,9
int 21h
mov ah,0
int 16h
dec ax
and ax,3
mov bx,offset sioport
shl ax,1
add bx,ax
mov ax,[bx]
mov PORTIOBAS,ax
call testsio
mon:mov dx,offset say_input_string
mov ah,9
int 21h
mov dx,offset input_buffer
mov ah,0ah
int 21h
mov bx,offset input_buffer
add bx,2
lop_tr:mov al,[bx]
cmp al,0dh
jne con_tr
mov dx,offset say_next
mov ah,9
int 21h
mov ah,0
int 16h
cmp al,'1'
jne mon
ret
con_tr: call transmit_byte
inc bx
jmp lop_tr
MAIN ENDP
;---串口设置-----------------------
testsio proc near
pusha
mov dx,PORTIOBAS
mov al,80h
add dx,(3fbh-3f8h)
out dx,al
mov dx,offset saybund
mov ah,9
int 21h
mov ah,0
int 16h
mov ah,12
cmp al,'1'
je set_sioas9600
mov ah,6
set_sioas9600:mov al,ah
mov dx,PORTIOBAS
mov al,12 ;波特率9600
out dx,al
inc dx
mov al,0
out dx,al
mov dx,PORTIOBAS
add dx,(3fbh-3f8h)
mov al,00001011b ;数据格式
out dx,al
mov al,0
dec dx
dec dx
out dx,al
mov dx,portiobas
add dx,4
mov al,3
out dx,al
testioret:popa
ret
testsio endp
;----发送1字节(在AL中)---------------------
transmit_byte proc near
pusha
mov ah,al
mov dx,portiobas
add dx,6
;portiobas+6为MODEM状态寄存器,D4位为串口的CTS状态
;等待终端发出的"忙"BUSY信号,如BUSY=1则循环等待.BUSY经RS232板电平转换后,接微机串口的CTS端
wait_busy:in al,dx ;
test al,10h
jz wait_busy ;
mov dx,portiobas
mov al,ah
out dx,al ;发出数据,将数据送"发送保持寄存器"
add dx,5
;portiobas+5为线路状态寄存器,D6=1:表示"发送保持寄存器"和"发送移位寄存器"都处于空闲状态,如不空则等待
waittransmit:in al,dx
test al,40h
jz waittransmit
popa
ret
transmit_byte endp
;--------------------------
READMT ENDS
END START
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -