⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 aexp9.asm

📁 微机接口技术的入门必备试验代码 试验平台msdi
💻 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 + -