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

📄 aexp10r.asm

📁 微机接口技术的入门必备试验代码 试验平台msdi
💻 ASM
字号:
;*------------------------------------------------------*
;*    Aexp10r.asm  8251串行接口应用实验-接收端程序       *
;*    串行通信接收程序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
input_message db 'Please   Wait ...',0dh,0ah 
              db 'end with any key',0dh,0ah,'$'
bps00 dw (?)
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,04h                       ;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
        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,00h                            
        jne  over                              ;有,则退出
        mov dx,ctrl51                         ;读取状态
        in al,dx
        test al,02h                           ;测试数据是否准备好
        jz m0                                 ;没有准备好,则继续等待
        mov dx,data51                         ;准备好,接收字符
        in al,dx
        mov dl,al                             ;显示字符
        mov ah,02h
        int 21h
        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 + -