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

📄 rece2.asm

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

;1: allowio 0xdc80 0xdc82 0xdc84 0xdc86 0xdc88 0xdc8A 0xdc8C 0xdc90 0xdc92 0xdcA0 
;2: receive23.exe 
;***********************************************************************************;
;------数据段--------------------- 
    DATA  SEGMENT
      IOPORT  EQU       0DC00H
                                                 
     DAT8279  EQU       IOPORT+090H ;8279
     CON8279  EQU       IOPORT+092H

       LS273  EQU       IOPORT+0A0H  ;273
       
        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       
;---------8279初始化-------------------- 
              MOV       DI,OFFSET LED
              MOV       AX,08H      ;work mode 16bit ,left in
     START1:  MOV       DX,CON8279
              OUT       DX,AX
              CALL      BLACK
             
              MOV       BX,80H      ;set the fisrt led  
       DISP:  MOV       AX,BX
              MOV       DX,CON8279  ;write command of display ram,address inc
              OUT       DX,AX
              MOV       DX,DAT8279
              
                     


              CALL      RECVE                         ;接收到的开关量存入AX
              CALL      DISP0






              PUSH      AX
              CALL      RECVE                         ;接收到的模拟数字量存入AX
              CALL      DISP0
                                       
              MOV       CX,AX                      ;将接收到的模拟信号数字量输出到LED,此时模拟数字量已存入CX
              PUSH      CX
              AND       AX,0F0H
              MOV       CL,4
              SAR       AX,CL
              POP       CX
              MOV       DI,AX
              MOV       AX,DS:[DI]
              MOV       DX,DAT8279          
              OUT       DX,AX

              CALL      ADDRESS_INC
              MOV       AX,CX
              AND       AX,0FH
              MOV       DI,AX
              MOV       AX,DS:[DI]              
              OUT       DX,AX

              POP       AX           ;将接收到的开关量输出到指示灯
             
              PUSH      CX
              MOV       DX,LS273        ;从2A8H输出其ASCII码
              OUT       DX,AL

              
              CALL      DELAY                  ;调用延时子程序
            
              CALL      SEND                   ;将数字量发送
              CALL      DELAY
              POP       CX                      ;将模拟数字量弹出,准备发送
              MOV       AX,CX
              
              CALL      SEND                  ;将模拟量发送



              
              MOV       AH,06H      ;判断是否有键按下 
              MOV       DL,0FFH
              INT       21H
              JE        START1
          ;     JMP       START1

              
       EXIT:  MOV       AX,4C00H
              INT       21H


;-----------输出子程序--------------
    DISP0   PROC
            PUSH       BX
            PUSH       CX

            MOV        BX,AX
            MOV        CL,4
            SHR        AL,CL
            CMP        AL,9
            JLE        DISP1
            ADD        AL,37H
            MOV        DL,AL 
            MOV        AH,02H

            INT        21H
            JMP        JS        
    DISP1:  ADD        AL,30H
            MOV        AH,02H
            MOV        DL,AL
            INT        21H
            
    JS:     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

;----负责将8279RAM清零-------------------------------      
      BLACK  PROC
         B1:  MOV       DX,CON8279
              MOV       AX,0D1H
              OUT       DX,AX       ;显示RAM全部清零
     WAITE2:  IN        AL,DX
              AND       AL,80H
              JNZ       WAITE2      ;waite for clear command
              RET
     BLACK ENDP
     
;----------负责数码管地址修改---------- 
 ADDRESS_INC  PROC
              PUSH      AX
              PUSH      DX
              INC       BX
              MOV       AX,BX
              MOV       DX,CON8279  ;write command of display ram,address inc
              OUT       DX,AX
              POP       DX
              POP       AX
              RET
 ADDRESS_INC  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,0500H
 DELAY1:
              MOV       CX,50000 
      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 + -