📄 aexp9.asm
字号:
;*------------------------------------------------------*
;* Aexp9.asm 8253定时/计数器应用实验-产生波特率时钟 *
;* 波特率时钟发生器程序source file *
;* 运行步骤:1.将示波器探头接到平台板上JP8的8253out2 *
;* 2.选择不同的波特率,观测示波器上时钟脉冲波形*
;* Copyright (c) 2002 by HUST *
;*------------------------------------------------------*
data segment
tc_table dw 678 ;0=110bps
dw 497 ;1=150b/s
dw 249 ;2=300b/s
dw 124 ;3=600b/s
dw 62 ;4=1200b/s
dw 31 ;5=2400b/s
dw 16 ;6=4800b/s
dw 8 ;1=9600b/s
temp db (?)
mes db 'now begin to generate baud-rates clk!',0dh,0ah
db 'hit esc to quit!',0dh,0ah,'$'
input_mes db 'seven kids of Baud rate-0:110 1:150 2:300 3:600 4:1200',0dh,0ah
db ' 5:2400 6:4800 7:9600',0dh,0ah
db 'please take a choice (0-7) of baud-rate:',0dh,0ah,'$'
error_mes db 'input error! try again please!',0dh,0ah,'$'
data ends
code segment
assume cs:code,ds:data
ok:
mov dx,307h ;8253命令口
mov al,0b6h ;8253方式命令
out dx,al
mov dx,303h ;8255命令口
mov al,80h ;8255方式命令
out dx,al
mov al,0ch ;使PC6=0,关8253
out dx,al
mov ax,data
mov ds,ax
lea dx,input_mes ;提示选择波特率
mov ah,09h
int 21h
input: mov ah,08h ;等待键盘输入
int 21h
cmp al,'0' ;选择波特率是否正确?
jb error ;不正确,则转出错处理
cmp al,'7'
ja error
sub al,30h ;正确
mov temp,al ;则保存波特率代号
call load ;装入计数初值
jmp begin ;启动8253波特率时钟发生器
error: mov ah,9h ;出错处理
lea dx,error_mes
int 21h
jmp input ;重新选择波特率
begin: lea dx,mes ;显示提示信息
mov ah,09h
int 21h
start: mov dx,303h ;8255命令口
mov al,0dh ;使PC6=1,启动8253,产生波特率时钟
out dx,al
nop
lop: mov ah,0bh ;检测有键按下?
int 21h
cmp al,00
je lop ;无,等待
mov ah,08h ;有,检测是否是Esc键
int 21h
cmp al,1bh
je quit ;是,则退出
jmp lop ;不是,循环查Esc键
quit: mov dx,303h
mov al,0ch ;关闭8253
out dx,al
mov ax,4c00h ;程序退出
int 21h
load proc near
push ax
push dx
push si
mov dl,temp
shl dl,1 ;波特率代号乘2,存入在dx中
and dx,0fh ;只取dx的低4位
mov si,offset tc_table ;取定时常数表的首址→si
add si,dx ;si为定时常数表指针(首址+偏移量)
mov dx,306h ;计数器2的数据口
mov al,[si] ;装入计数初值低字节
out dx,al
mov al,[si]+1 ;装入计数初值高字节
out dx,al
pop si
pop dx
pop ax
ret
load endp
code ends
end ok
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -