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

📄 rece3.asm

📁 串行通信8250全双工 微机原理
💻 ASM
字号:
;***********************************************************************************;
;     本程序负责接收 两路数字信号 并分别在指示灯和LED上显示  并将两路信号分别返回   ;
;     cs0<->cs273,D0~D7依次接LED1~LED8*;      
;       模数转换,前端数码管显示,后端在屏幕上显示  ; 

;1: allowio 0xdc80 0xdc82 0xdc84 0xdc86 0xdc88 0xdc8A 0xdc8C 0xdc90 0xdc92 0xdcA0 0xdcb0 0xdcb2
;2: receive23.exe 
;***********************************************************************************;
;------数据段--------------------- 
    DATA  SEGMENT
      IOPORT  EQU       0DC00H
     DAT8279  EQU       IOPORT+090H ;8279
     CON8279  EQU       IOPORT+092H
       LS273  EQU       IOPORT+0A0H  ;273
     IO0832L  EQU       IOPORT+0B0H ;LATCH DATA ADDRESS
     IO0832S  EQU       IOPORT+0B2H ;START TRANSLATE ADDRESS    
        ADDR1 EQU       IOPORT+80H  ;8250
       ADDR2  EQU       IOPORT+82H  ;interrupt enable register/ LOW BYTE OF DIVI
       INTFR  EQU       IOPORT+84H  ;interrupt flag register
         LCR  EQU       IOPORT+86H  ;line control register
         MCR  EQU       IOPORT+88H  ;modem control register
         LSR  EQU       IOPORT+8AH  ;line status register
         MSR  EQU       IOPORT+8CH  ;modem status register

         LED  DB        3FH,06H,5BH,4FH,66H,6DH,7DH,07H
              DB        7FH,6FH,77H,7CH,39H,5EH,79H,71H,0FFH
        DATA  ENDS
;---------代码段----------------------- 
        CODE  SEGMENT
              ASSUME    CS:CODE,DS:DATA,ES:DATA
      START:  
              MOV       AX,DATA
              MOV       DS,AX
              MOV       ES,AX
              MOV       DX,LCR
              MOV       AX,80H
              OUT       DX,AX       ;SET THE DLAB,ACCESS THE DIVI REGISTER
              MOV       DX,ADDR1
              MOV       AX,0CH
              OUT       DX,AX       ;9600,SET  divisor gene
              MOV       DX,ADDR2
              MOV       AX,0H
              OUT       DX,AX       ;no interupt
              MOV       DX,LCR
              MOV       AX,07H      ;no pe,8 bit, 1 stop
              OUT       DX,AX
              MOV       DX,ADDR2
              MOV       AX,0
              OUT       DX,AX       ;no interupt
              MOV       DX,MCR
              MOV       AX,03H
              OUT       DX,AX       ;双机通讯
              MOV       DX,LSR
              IN        AX,DX
              MOV       DX,ADDR1
              IN        AX,DX    
              MOV       AX,0012H    ;设屏幕显示方式为VGA 640X480模示///////
              INT       10H         ;////////////////////////

      START1:
              MOV       AX,0600H
              INT       10H         ;清屏
              AND       CX,0        ;cx为横坐标
              PUSH      CX
       AGAINX:
              MOV       DX,400
              MOV       AL,07H
              MOV       AH,0CH      ;画点
              INT       10H
              CMP       CX,639      ;一行是否满
              JE        START2      ;是则转start1
              INC       CX          ;继续画点
              JMP       AGAINX 
      START2:;CALL       DELAY         
                       
              MOV       DX,0
      AGAINY: MOV       CX,0
              MOV       AL,07H
              MOV       AH,0CH
              INT       10H
              INC       DX
              CMP       DX,400
              JE        START3
              JMP       AGAINY
        START3:
              ;CALL      DELAY            
              POP       CX   
                  
    DRAW:     CALL      RECVE                         ;接收到的开关量存入AX
              CALL      DISP0

              PUSH      AX                         
              CALL      RECVE                      ;接收到的模拟数字量存入AX 
                        
              CALL      DISP3
              MOV       BL,AL                                                                                 
              POP       AX           ;将接收到的开关量输出到指示灯
             
              
              MOV       DX,LS273        ;从2A8H输出其ASCII码
              OUT       DX,AL

              neg       ax                ;将接收到的数字量取反,准备发送
              dec       ax            
              call      DISP4

              CALL      SEND                   ;将数字量发送 
              MOV       AL,BL
              CALL      SEND                  ;将模拟量发送

             
              AND       AH,0
              MOV       DX,400      ;dx为纵坐标
              SUB       DX,AX
              MOV       AL,05H      ;设置颜色
              MOV       AH,0CH      ;画点
              INT       10H
              CALL      DELAY
              CMP       CX,639      ;一行是否满
              JZ        START1      ;是则转start1
              INC       CX          ;继续画点
              PUSH      DX
              MOV       AH,06H      ;是否有键按下
              MOV       DL,0FFH
              INT       21H
              POP       DX
              JE        DRAW        ;无,则继续画点
              MOV       AX,0003     ;有恢复屏幕为字符方式
              INT       10H  
       EXIT:  MOV       AX,4C00H
              INT       21H

;-----------输出子程序--------------
    DISP0   PROC
            PUSH       BX
            PUSH       CX
            PUSH       AX
            MOV        DX,0128H          ;设定光标位置和显示方式
            MOV        AH,02H
            INT        10H
            POP        AX

            MOV        BX,AX             ;输出AX中的量到屏幕
            MOV        CL,4
            SHR        AL,CL
            CMP        AL,9
            JLE        DISP1
            ADD        AL,37H
            MOV        DL,AL 
            MOV        AH,02H
            INT        21H
            JMP        JS0        
    DISP1:  ADD        AL,30H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
            
    JS0:    MOV        AX,BX
            AND        AL,0FH
            CMP        AL,9
            JLE        DISP2
            ADD        AL,37H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
            JMP        JS1        
    DISP2:  ADD        AL,30H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
      JS1:  MOV        AX,BX
            POP        CX
            POP        BX
            RET
      DISP0  ENDP

;-----------输出子程序--------------
    DISP3   PROC
            PUSH       BX
            PUSH       CX
            PUSH       AX
            MOV        DX,0228H                    ;设定光标位置
            MOV        AH,02H
            INT        10H
            POP        AX         
            MOV        BX,AX                       ;输出AX中接收到的数据到屏幕
            MOV        CL,4
            SHR        AL,CL
            CMP        AL,9
            JLE        DISP13
            ADD        AL,37H
            MOV        DL,AL 
            MOV        AH,02H             
            INT        21H
            JMP        JS3        
   DISP13:  ADD        AL,30H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H            
    JS3:    MOV        AX,BX
            AND        AL,0FH
            CMP        AL,9
            JLE        DISP23
            ADD        AL,37H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
            JMP        JS13       
   DISP23:  ADD        AL,30H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
    JS13:   MOV        AX,BX
            POP        CX
            POP        BX
            RET
    DISP3  ENDP
 ;----------------显示子程序---------------------
 DISP4   PROC
            PUSH       BX
            PUSH       CX           
            PUSH       AX
            MOV        DX,0328H
            MOV        AH,02H
            INT        10H
            POP        AX
            MOV        BX,AX
            MOV        CL,4
            SHR        AL,CL
            CMP        AL,9
            JLE        DISP14
            ADD        AL,37H
            MOV        DL,AL 
            MOV        AH,02H
            INT        21H
            JMP        JS04        
    DISP14:  ADD        AL,30H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H            
    JS04:   MOV        AX,BX
            AND        AL,0FH
            CMP        AL,9
            JLE        DISP24
            ADD        AL,37H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
            JMP        JS14        
    DISP24: ADD        AL,30H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
      JS14: MOV        AX,BX
            POP        CX
            POP        BX           
            RET
     DISP4  ENDP

;-----------发送子程序-----------------------------
       SEND   PROC
              PUSH      BX
              MOV       BX,AX    ;将待发送值存到BX中 
              PUSH      AX
              PUSH      DX
      SEND1:  MOV       DX,LSR
              IN        AX,DX
              TEST      AX,20H
              JNZ       SEND2
              JMP       SEND1
      SEND2:  MOV       AL,BL    
              MOV       DX,ADDR1
              OUT       DX,AL
              POP       DX
              POP       AX
              POP       BX
              RET
      SEND    ENDP

;--------接收子程序-------------------------- 
      RECVE   PROC           
              MOV       DX,LSR
              IN        AX,DX
              TEST      AX,01H      ;TEST THE FLAG OF RECIEVE
              JNZ       RECV1
              JMP       RECVE
      RECV1:  MOV       DX,ADDR1
              IN        AL,DX          
              RET
       RECVE  ENDP

;-------延时----------------------------------
 DELAY  PROC      NEAR
              ;PUSH      AX
              PUSH      CX
              ;MOV       AX,50H
 DELAY1:      MOV       CX,60000
      LOOP1:  LOOP      LOOP1
              ;DEC       AX
              ;JNZ       DELAY1
              POP       CX
              ;POP       AX
              RET
       DELAY  ENDP
 
        CODE  ENDS
              END  START

⌨️ 快捷键说明

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