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

📄 send1.asm

📁 串行通信8250全双工 微机原理
💻 ASM
字号:
;*******************************;
;        cs0<->cs0809,AN0<->ADIN0,CS1<->CS244,EOC<->IN0
;       调节电位器V.ARJ可以调整AN0处的电压
;       模数转换,前端数码管显示,后端在屏幕上显示 
;*******************************;
;1: allowiio 0xdc80 0xdc82 0xdc84 0xdc86 0xdc88 0xdc8A  0xdc8C 0xdc90 0xdc92 0xdca0  0xdcb0 
;2: send1.exe 
;------数据段--------------------- 
    DATA  SEGMENT
      IOPORT  EQU       0DC00H
      
     IO0809A  EQU       IOPORT+0A0H ;0809 
       CS244  EQU       IOPORT+0B0H
                                           
     DAT8279  EQU       IOPORT+090H ;8279
     CON8279  EQU       IOPORT+092H
       
        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
              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
              PUSH      DX
                     
              MOV       DX,IO0809A  ;启动A/D转换器
              OUT       DX,AX
      WAITE:  MOV       DX,CS244
              IN        AX,DX
              AND       AX,1
              CMP       AX,1
              JNE       WAITE       ;如果EOC=0,waiting....
              MOV       DX,IO0809A
              IN        AX,DX       ;从A/D转换器输入数据    转换结束

              call      DELAY
         
              CALL      SEND
              
              MOV       CX,AX
              PUSH      CX
              AND       AX,0F0H
              MOV       CL,4
              SAR       AX,CL
              POP       CX
              MOV       DI,AX
              MOV       AX,DS:[DI]
              POP       DX
              

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

              
              OUT       DX,AX
              
              MOV       AH,06H      ;判断是否有键按下 
              MOV       DL,0FFH
              INT       21H
              ;POP       DX
              JE        START1
              JMP       EXIT
              
       EXIT:  MOV       AX,4C00H
              INT       21H
;----负责将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


 DELAY  PROC      NEAR
              PUSH      AX
              PUSH      CX
              MOV       AX,0500H
 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 + -