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

📄 4.asm

📁 这是用于8259A的关于串口通信的程序
💻 ASM
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;     PC机RS-232串口自发自收   ;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
DATA SEGMENT
  ;COM1  EQU 3F8H-3FFH   ;PC机上自带的两个串口地址
  ;COM2  EQU 2F8H-2FFH
  IO8250TR EQU 3F8H      ;发送端数据寄存器地址
  IO8250RR EQU 3F8H      ;接受端数据寄存器地址
  IO8250DIVL EQU 3F8H    ;除数寄存器低字节地址 
  IO8250DIVH EQU 3F9H    ;除数寄存器高字节地址  
  IO8250IER EQU 3F9H     ;中断允许寄存器地址     
  IO8250IIR EQU 3FAH     ;中断识别寄存器地址    
  IO8250LCR EQU 3FBH     ;线路控制寄存器地址     
  IO8250MCR EQU 3FCH     ;MODEM控制寄存器地址 
  IO8250LSR EQU 3FDH     ;线路状态寄存器地址 
  IO8250MSR EQU 3FEH     ;MODEM状态寄存器地址             
  ERR DB 'ERROR!$'       ;提示错误信息                                                                        
DATA ENDS

STACK1 SEGMENT STACK
 DB 100 DUP(?)
STACK1 ENDS

CODE SEGMENT
   ASSUME CS:CODE,DS:DATA,SS:STACK1    
START:   MOV AX,DATA
         MOV DS,AX
         MOV AL,10000000B ;8250初始化,设DLAB=1 
         MOV DX,IO8250LCR
         OUT DX,AL
         MOV AX,30H       ;波特率2400 kb/s
         MOV DX,IO8250DIVL
         OUT DX,AL        ;写入除数低字节
         MOV AL,AH
         MOV DX,IO8250DIVH
         OUT DX,AL        ;写入除数高字节
         MOV AL,00001011B  ;8位数据,1位停止,奇校验
         MOV DX,IO8250LCR
         OUT DX,AL        ;写入线路控制寄存器  
         MOV AL,00000011B ;自检关闭,请求发送
         MOV DX,3FCH
         OUT DX,AL        ;写入MODEM控制寄存器
         MOV AL,0
         MOV DX,IO8250IER
         OUT DX,AL        ;禁止中断   
         MOV DX,IO8250LSR
         IN  AL,DX        ;空读一次                      
WAIT_FOR:MOV DX,IO8250LSR ;读线路状态寄存器
         IN  AL,DX
        TEST AL,00011110B     ;出错否
        JNZ  ERROR
        TEST AL,00000001B     ;接收数据就绪否
        JNZ  RECEIVE          ;转接收    
        TEST AL,01000000B     ;发送移位寄存器空否
        JZ   WAIT_FOR         ;不空的话返回等待
        MOV  AH,1
        INT  21H              ;读键盘    
        MOV  DX,IO8250TR      ;发送
        OUT  DX,AL
        JMP  WAIT_FOR         ;返回等待
RECEIVE:MOV  DX,IO8250RR      ;读接收数据
        IN   AL,DX
        AND  AL,01111111B
        CMP  AL,03H       ;是Ctrl-C?
        JNZ  CHAR
        MOV  AX,4C00H     ;返回DOS
        INT  21H
  CHAR: MOV DL,AL
        MOV AH,2           ;显示接受字符
        INT 21H
        JMP  WAIT_FOR      ;返回等待
  ERROR:MOV  DX,OFFSET ERR         ;显示‘error’
        MOV  AH,09H
        INT  21H
        JMP  WAIT_FOR
CODE  ENDS
      END  START

⌨️ 快捷键说明

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