pc-sf.asm

来自「早期开发的PC与ms8051串行通讯程序源码」· 汇编 代码 · 共 78 行

ASM
78
字号
;
;*******pc-接收发送程序****************
;
stack   segment para stack  'stack'             ;
        db      256 dup(0)                      ;设堆栈段
stack   ends
data    segment  para public 'data'
msg     db      10,13,'$'
msg1    db      'one data hasnot received! $'   ;设数据段
        db      256 dup(0)
data    ends
code    segment para public 'code'
start   proc    far
        assume  cs:code,ds:data,es:data
        push    ds
        mov     ax,0                            ;保护原数据段段址
        push    ax
        mov     ax,data
        mov     es,ax                   ;设数据段和附加段偏移地址
        mov     ds,ax
        mov     dx,3fbh     ;使线控寄存器的D7位为1,准备设置波特率
        mov     al,80h
        out     dx,al
        mov     dx,3f8h          ;设置波特率为2400
        mov     al,30h          ;低
        out     dx,al
        mov     dx,3f9h         ;
        mov     al,00h          ;高
        out     dx,al
        mov     dx,3fbh         ;置通信格式为8位数据位,1位停止位
        mov     al,1bh          ;偶校
        out     dx,al
        mov     dx,3fch
        mov     al,09h          ;置数据终端准备好信号有效
        out     dx,al
        mov     dx,3f9h         ;禁止所有中断
        mov     al,0
        out     dx,al
mm0:    mov     ah,0bh          ;测试键盘,为1时表示已有键盘按下
        int     21h
        test    al,01h
        jz      mm1             ;无键按下转
        mov     ah,01h          ;显示键名
        int     21h
        mov     ah,al           ;键名送AH保存
        mov     dx,3fdh         ;
mn1:    in      al,dx           ;测试串口
        test    al,20h          ;发送保存寄存器空? 不空等待
        jz      mn1             ;
        test    al,40h          ;发送位移寄存器空? 不空等待
        jz      mn1
        mov     dl,ah
        mov     ah,04h          ;把键名发出去
        int     21h
mm1:    mov     dx,3fdh         ;测试串口
        in      al,dx
        test    al,02h          ;有"数据被冲出错?" 无错则转
        jz      mm2
        mov     dx,offset msg
        mov     ah,09h
        int     21h             ;显示"漏收一个数据"
        mov     dx,offset msg1
        mov     ah,09h          ;DOS功能调用
        int     21h
mm2:    test    al,01h          ;测试串行口,接收到数据否?无则转
        jz      mm0
        mov     ah,03h          ;接收一个数据(即对方送来的键名)
        int     21h
        mov     dl,al
        mov     ah,02h
        int     21h
        jmp     mm0             ;跳转
        ret
start   endp
        code    ends
        end     start

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?