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

📄 send2.asm

📁 串行通信8250全双工 微机原理
💻 ASM
字号:
;*******************************;
;*******273********cs0<->cs273,D0~D7依次接LED1~LED8*
;*****A/D转换******cs1<->cs0809,AN0<->ADIN0,CS2<->CS244,EOC<->IN0
;*****D/A转换******cs3<->cs0832,DAOUT<->示波器,DS跳线1<->2 
;*******244********cs2<->cs244,IN0~IN7依次接k1~k8 *; 
;       调节电位器V.ARJ可以调整AN0处的电压
;       模数转换,前端数码管显示,后端在屏幕上显示 
;*******************************;
;1: allowio 0xdc80 0xdc82 0xdc84 0xdc86 0xdc88 0xdc8A 0xdc8C 0xdc90 0xdc92 0xdca0 0xdcb0 0xdcd0 0xdcd2 0xdcc0
;2: send1.exe 
;------数据段--------------------- 
    DATA  SEGMENT
      IOPORT  EQU       0DC00H

       LS273  EQU       IOPORT+0A0H ;273
      
     IO0809A  EQU       IOPORT+0B0H ;0809 

      ; CS259  EQU       IOPORT+0C0H

                                    ;0832
     IO0832L  EQU       IOPORT+0D0H ;LATCH DATA ADDRESS
     IO0832S  EQU       IOPORT+0D2H ;START TRANSLATE ADDRESS
                                           
       CS244  EQU       IOPORT+0C0H ;244
       
        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

     DAT8279  EQU       IOPORT+090H ;8279
     CON8279  EQU       IOPORT+092H
            
         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
              MOV       DX,CON8279
              OUT       DX,AX
              CALL      BLACK

     START1:  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
              
;--------A/D转换------------------------
              MOV       DX,IO0809A  ;启动A/D转换器
              OUT       DX,AX
              push      cx
              mov       cx,10
              
      WAITE:  
              loop      WAITE       ;如果EOC=0,waiting....
              MOV       DX,IO0809A
              IN        AX,DX       ;从A/D转换器输入数据    转换结束

              push      cx
              mov       cx,0
              mov       dx,4880
              mov       ah,86h
              int       15h
              pop       cx

              
              PUSH      AX       ;保护模拟量

;----------送数码管显示----------------------
              MOV       CX,AX
              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

;------从244读入逻辑开关状态----------------             
              MOV       DX,CS244
              IN        AX,DX       

              call      DELAY
         
              CALL      SEND        ;发送数字量

              call      DELAY
             
              POP       AX

              CALL      SEND        ;发送模拟量
              
              CALL      RECV

              MOV       DX,LS273
              OUT       DX,AX       ;从273输出读到的数据

              CALL      RECV

              MOV       DX,IO0832L  ;D/A转换 
              OUT       DX,AL       ;锁存数据
              MOV       DX,IO0832S
              OUT       DX,AL       ;输出使能

              
              MOV       AH,06H      ;判断是否有键按下 
              MOV       DL,0FFH
              INT       21H
              ;POP       DX
              JE        START1
              JMP       EXIT
              
       EXIT:  MOV       AX,4C00H
              INT       21H

;-----------发送-----------------------------
       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

;--------接收子程序-------------------------- 
       RECV   PROC 
              MOV       DX,LSR
              IN        AX,DX
              TEST      AX,01H      ;TEST THE FLAG OF RECIEVE
              JNZ       RECV1
              JMP       RECV
      RECV1:  MOV       DX,ADDR1
              IN        AL,DX
              RET
      RECV    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

;----负责将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

;------代码段结束-----------------     
        CODE  ENDS
              END  START

⌨️ 快捷键说明

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