📄 aexp10s.asm
字号:
;*------------------------------------------------------*
;* Aexp10s.asm 串行接口应用实验-发送端程序 *
;* 串行通信发送程序source file *
;* Copyright (c) 2002 by HUST *
;*------------------------------------------------------*
data51 equ 308h ;8251A数据口
ctrl51 equ 309h ;8251A命令/状态口
ctrl55 equ 303h ;8255命令口
timer2 equ 306h ;8253的2号计数器端口
timctl equ 307h ;8253的命令口
clk00 equ 12h ;8251输入时钟频率(十六进制表示)
clk01 equ 34deh
factor equ 16 ;波特率因子16
data segment
bps00 dw (?)
input_message db 'now enter the serial communication',0ah,0dh
db 'end with esc',0ah,0dh
db 'please input characters to transmit',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
init51 proc near ;8251A初始化子程序
mov dx,ctrl51 ;8251A命令口
xor ax,ax ;空操作
out dx,al
mov al,40h ;8251A内部复位
call charout
mov al,4ah ;8251A方式命令
call charout
mov al,23h ;8251A工作命令
call charout
ret ;返回
init51 endp
charout proc near ;送数据子程序
out dx,al
push cx
mov cx,100 ;延时
gg: loop gg
pop cx
ret
charout endp
set_bps proc near ;8253-5计数初值计算与装入子程序
mov dx,clk00 ;取8253-5输入时钟频率clk做被除数
mov ax,clk01
mov bx,bps00 ;所选波特率做第一个除数
div bx ;除法运算,商数送ax
mov dx,0 ;余数清零
mov bx,factor ;取波特率因子做第二个除数
div bx ;除法运算,的计数初值(商数)送ax
mov bx,ax ;保存计数初值至bx
mov dx,timctl ;8253-5命令口
mov al,0b6h ;8253-5初始化命令
out dx,al
mov dx,timer2 ;8253-5计数器2的端口
mov ax,bx ;取计数初值
out dx,al ;取计数初值低字节
mov al,ah ;取计数初值高字节
out dx,al
ret ;返回
set_bps endp
main proc far
begin:mov bps00,1200 ;送传输率
call set_bps
call init51
mov dx,ctrl55 ;初始化8255A
mov al,80h
out dx,al
mov al,0dh ;置PC6=1,打开8253的GATE2输出方波
out dx,al
mov dx,seg input_message ;提示输入信息
mov ds,dx
mov dx,offset input_message
mov ah,09h
int 21h
m0: mov ah,0bh ;读取键盘
int 21h
cmp al,0 ;有键按下?
je m0 ;无键按下等待
mov ah,01h ;将字符在CRT上等待
int 21h
mov bl,al ;保存键值
cmp al,1bh ;是否为ESC
jz over ;是,则退出
mov dx,ctrl51 ;不是,则发送数据
m1: in al,dx
test al,01 ;发送准备好?RxRDY=1?
jz m1 ;未准备好,则等待
mov dx,data51 ;已准备好,则将键入的字符发出去
mov al,bl
out dx,al
jmp m0 ;发送完,在转按键发送
over: mov al,0ch ; 关PC6=0,关闭8253的GATE2
mov dx,ctrl55
out dx,al
mov ax,4c00h ;程序退出
int 21h
main endp
code ends
end main
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -