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

📄 12_8251.asm

📁 可作为接口实验的参考教材
💻 ASM
字号:
;************************************************************
;文件名: 8251  FOR  8088

;功能: 8251可编程串行口与PC机通信实验

;接线: 用导线连接CPU模块中的CS8251接200H,
;      CPU模块中的232RXD接至ERXD,232TXD接至ETXD。
;//**********************************************************

Z8279    EQU       239H
D8279    EQU       238H
D8251    EQU       200H
Z8251    EQU       202H

LEDMOD   EQU       00H  ;左边输入八位字符显示
                        ;外部译码键扫描方式,双键互锁
LEDFEQ  EQU     2FH     ;扫描速率
LEDCLS  EQU     0C1H    ;清除显示 RAM
LEDWR0  EQU     80H     ;设定的将要写入的显示RAM地址
READKB  EQU     40H     ;读 FIFO RAM 地址 0 的命令字
CODE    SEGMENT
ASSUME  CS:CODE,DS:CODE,SS:CODE
START:  
    push    cs
    pop     ds                      
	MOV     CX,100
	LOOP    $
	CALL    INIT8279
    CALL    INIT8251
WAIT0: 

    MOV     DX,Z8251 
    IN      AL,DX              ;有数据送到吗?
	AND     AL,02h
    JZ      WAIT1              ;没有数据送到则跳转至发送
    JMP     DIS_REC  
WAIT1:    
    CALL    GETKEY
    CMP     AL,0FFH
    JNZ     WAIT0
    MOV     CX,10
	LOOP    $
	MOV     DX,Z8251
WAIT3:
    IN      AL,DX
	AND     AL,01H
    JZ      WAIT3             ;发送缓冲器不空则等待
    MOV     AL,BL             ;无键按下则跳回"接收"处                        
	MOV     DX,D8251          ;有键按下则发送相应字符
	OUT     DX,AL
    NOP
	MOV     DX,Z8251
WAIT2:
    IN      AL,DX
	AND     AL,01h
    JZ      WAIT2             ;发送缓冲器不空则等待
    JMP     WAIT0

DIS_REC:
    MOV    DX,D8251
    IN     AL,DX
    SUB    AL,30H
    JC     ERROR
    SUB    AL,0AH
    JNC    DIS_REC1
    ADD    AL,0AH
    JMP    DIS_REC2
DIS_REC1:
    SUB    AL,7H
    JC     ERROR
    SUB    AL,6H
    JNC    ERROR
    ADD    AL,10H
DIS_REC2:
    MOV    CH,0
    MOV    CL,AL 
    CALL   DISLED
ERROR:
    JMP    WAIT0
DISLED   PROC NEAR
    PUSH  AX
    PUSH  DX
    MOV   AL,LEDWR0
    ADD   AL,CH
    MOV   DX,Z8279
    OUT   DX,AL
    LEA   BX,LEDSEG
    MOV   AL,CL
    XLAT
    MOV   DX,D8279
    OUT   DX,AL
    POP   dx
    POP   aX
    RET
DISLED   ENDP        
   
INIT8251  PROC  NEAR
    PUSH    CX
	MOV     DX,Z8251          ;初始化8251
	MOV     AL,4EH
	OUT     DX,AL
	MOV     DX,Z8251          ;初始化8251
	MOV     AL,25H
	OUT     DX,AL
	MOV     DX,Z8251          ;初始化8251
	MOV     AL,65H
	OUT     DX,AL
	MOV     CX,100
	LOOP    $
    MOV     AL,04EH           ;设置为8个数据位,1个停止位波特率因子为16
	OUT     DX,AL             ;无奇偶校验位
	MOV     CX,100
    LOOP    $
	MOV     AL,25H            ;设为请求发送,允许发送,允许接收状态
	OUT     DX,AL
	MOV     CX,100
	LOOP    $
    POP     CX
    RET
INIT8251    ENDP   
INIT8279  PROC  NEAR        
    PUSH    DX
    PUSH    AX
    MOV     DX,Z8279
    MOV     AL,LEDMOD
    OUT     DX,AL
    MOV     AL,LEDFEQ
    OUT     DX,AL
    MOV     AL,LEDCLS
    OUT     DX,AL
    CALL    DELAY
    POP     AX
    POP     DX
    RET
INIT8279    ENDP 
GETKEY   PROC   NEAR
    PUSH    DX
    PUSH    CX
    MOV     DX,Z8279
    IN      AL,DX
    AND     AL,07H
    JNZ     GETVAL
    MOV     AL,0
    JMP     NKBHIT
GETVAL:
    MOV     AL,READKB
    OUT     DX,AL
    MOV     DX,D8279
    IN      AL,DX
    AND     AL,3FH
    MOV     CH,AL
    LEA     BX,KEYCODE
    XLAT
    MOV     BL,AL
    MOV     AL,LEDWR0
    MOV     DX,Z8279
    OUT     DX,AL
    PUSH    BX
    LEA     BX,LEDSEG
    MOV     AL,CH
    XLAT
    MOV     DX,D8279
    OUT     DX,AL
    POP     BX
    MOV     AL,0FFH
NKBHIT: 
    POP     CX
    POP     DX
    RET      
GETKEY   ENDP
delay    proc      near
         push      cx
         mov       cx,0FFFFh
         loop      $
         pop       cx
         ret
         delay endp     
;LED显示常数表
LEDSEG: DB      3FH,06H,5BH,4FH,66H,6DH,7DH,07H ;'0,1,2,3,4,5,6,7'
        DB      7FH,6FH,77H,7CH,39H,5EH,79H,71H ;'8,9,A,B,C,D,E,F'
       
;键盘键码表
KEYCODE:DB      30H,31H,32H,33H,34H,35H,36H,37H ;'0,1,2,3,4,5,6,7'
        DB      38H,39H,41H,42H,43H,44H,45H,46H ;'8,9,A,B,C,D,E,F'
           
CODE    ENDS
END     START
	

⌨️ 快捷键说明

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