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

📄 jieshou.txt

📁 本文通过汇编语言编写IBM-PC的串行接口接受程序
💻 TXT
字号:
STACK    SEGMENT  PARA STACK 'STACK'
	     DB       256 DUP(0)
STACK    ENDS
DATA     SEGMENT  PARA PUBLIC 'DATA'
FCB      DB       37 DUP(0)
DTA      DB       0
COUNT    DB       0
INMSG    DB       'PLEASE INPUT FILENAME:',10,13,'$'
ERRMSG   DB       'FILE ACCESS ERROR!',10,13,'$'
BUFFER   DB       100 DUP(0)          ;建立100个接收数据缓冲区
BUFFER1  DW       0                   ;取数指针
BUFFER2  DW       0                   ;存数指针
DATA     ENDS     
CODE     SEGMENT  PARA PUBLIC 'CODE'
START    PROC     FAR
         ASSUME   CS:CODE,DS:DATA,ES:DATA
         PUSH     DS
         MOV      AX,0
         PUSH     AX
         MOV      AX,DATA
         MOV      ES,AX
         MOV      DS,AX
         MOV      DX,OFFSET DTA     ;建立磁盘缓冲区首址
         MOV AH,1AH
         INT 21H
PLE: CALL SETFCB            ;键入文件标示符并填入FCB
     MOV DX,OFFSET FCB      ;建立文件
     MOV AH,16H
     INT 21H
     CMP AL,0
     JNZ PLE
     MOV WORD PTR FCB+0CH,0    ;顺序写文件初始化
     MOV WORD PTR FCB+0EH,1
     MOV FCB+20H,0
     CLI 
     MOV AX,0           ;在中断向量表中设中断向量
     MOV ES,AX
     MOV DI,0CH*4
     MOV AX,OFFSET RECEIVE
     CLD
     STOSW
     MOV AX,CS
     STOSW
     MOV AL,2CH           ;8259A初始化
     OUT 21H,AL
     MOV DX,3FBH          ;8250初始化
     MOV AL,80H
     OUT DX,AL            ;置线路控制寄存器D7为1
     MOV DX,3F8H
     MOV AL,0C0H
     OUT DX,AL            ;置波特率因子低位
     MOV DX,3F9H
     MOV AL,00H
     OUT DX,AL            ;置波特率因子高位
     MOV DX,3FBH
     MOV AL,0AH
     OUT DX,AL            ;置传送数据格式
     MOV DX,3FCH
     MOV AL,0BH           ;置中断
     OUT DX,AL
     MOV DX,3F9H
     MOV AL,01H           ;允许接受数据准备好中断
     OUT DX,AL
     STI
WRITE:  MOV BX,BUFFER1     ;察看数据接收区
        CMP BX,BUFFER2     ;若有字符,取入DTA
        JZ  WRITE
        MOV AL,[BUFFER+BX]
        MOV DTA,AL
        PUSH AX
        MOV BX,OFFSET FCB  ;顺序写文件
        MOV AH,15H
        INT 21H
        CMP AL,0
        JNZ ERROR
        POP AX
        CMP AL,1AH         ;若为文件结束符,转EOF
        JZ EOF
        CALL DISPCHAR
        MOV BX,BUFFER1     ;调整取数指针
        CMP BX,99
        JNZ ADN
        MOV BUFFER1,0 
        JMP WRITE
ADN:    INC BUFFER1         ;继续写文件
        JMP WRITE
ERROR:  MOV DX,OFFSET ERRMSG  ;显示错误信息
        MOV AH,9
        INT 21H
        RET
EOF:    MOV DX,OFFSET FCB     ;关闭文件,返回
        MOV AH,10H
        INT 21H
        RET
RECEIVE PROC NEAR             ;接收数据中断服务程序
        PUSH AX
        PUSH BX
        PUSH DX
        PUSH DS
        MOV DX,3FDH           ;检查接收的数据是否出错,有错,转ERR
        IN AL,DX
        TEST AL,1EH
        JNZ ERR
        MOV DX,32F8H            ;读入数据,存入数据接收区
        IN AL,DX
        AND AL,7FH
        MOV BX,BUFFER2
        MOV [BUFFER+BX],AL
        CMP BX,99              ;调整存数指针
        JZ SETO
        INC BUFFER2
        JMP RTN1
SETO:   MOV BUFFER2,0
RTN1:   MOV AL,20H             ;发中断结束命令给8259A
        OUT 20H,AL
        POP DS
        POP DX
        POP BX
        POP AX
        STI
        IRET
ERR:    MOV AL,'?'            ;显示错误提示符'?'
        MOV BX,0
        MOV AH,14
        INT 10H
        JMP RTN1
RECEIVE ENDP 
SETFCB  PROC NEAR       
SETFCB  ENDP
DISPCHAR PROC NEAR
DISPCHAR ENDP
START ENDP
CODE ENDS 
     END START 
        

     

⌨️ 快捷键说明

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