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

📄 8259a.txt

📁 8259原理 中断程序源代码.编译通过.运行良好
💻 TXT
字号:
1.	初始化8253A的计数器0为工作方式0,装入时间常数FFFFH,结束中断时显示信息:8253A INTERRUPT EXPERIMENT!
CODE    SEGMENT         PARA
        ASSUME          CS:CODE,DS:CODE
INT71H  PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    SI
        PUSH    DI
        PUSH    BP
        PUSH    DS
        PUSH    ES
        STI
        JMP     START
STRING  DB      '8253A INTERRUPT EXPERIMENT!',0AH,'$'
VH      DW      ?
VL      DW      ?
START:  PUSH    CS
        POP     DS
        MOV     DX,OFFSET STRING
        MOV     AH,9
        INT     21H

        MOV     DX,300H
        MOV     AX,0FFFFH
        OUT     DX,AL
        MOV     AL,AH
        OUT     DX,AL

        MOV     AL,00100000B
        OUT     0A0H,AL
        OUT      20H,AL

        CLI
        POP     ES
        POP     DS
        POP     BP
        POP     DI
        POP     SI
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        IRET
INT71H  ENDP
MAIN    PROC    FAR
        PUSH    CS
        POP     DS

        MOV     AH,35H
        MOV     AL,71H
        INT     21H
        MOV     VH,ES
        MOV     VL,BX

        MOV     DX,OFFSET INT71H
        MOV     AL,71H
        MOV     AH,25H
        INT     21H

        IN      AL,0A1H
        AND     AL,11111101B
        OUT     0A1H,AL
        STI

        MOV     DX,303H
        MOV     AL,00110000B
        OUT     DX,AL
        MOV     DX,300H
        MOV     AX,0FFFFH
        OUT     DX,AL
        MOV     AL,AH
        OUT     DX,AL

LP:     MOV     AH,1
        INT     16H
        JZ      LP
        
        MOV     DX,VL
        MOV     DS,VH
        MOV     AL,71H
        MOV     AH,25H
        INT     21H

        MOV     AX,4C00H
        INT     21H

MAIN    ENDP
CODE    ENDS
        END     MAIN
2.	初始化8253A的计数器0为工作方式3,装入时间常数FFFFH,显示0、1、2、。。。、9十个数字。
CODE    SEGMENT         PARA
        ASSUME          CS:CODE,DS:CODE
INT71H  PROC    FAR
        PUSH    AX
        PUSH    BX
        PUSH    CX
        PUSH    DX
        PUSH    SI
        PUSH    DI
        PUSH    BP
        PUSH    DS
        PUSH    ES
        STI
        JMP     START
VH      DW      ?
VL      DW      ?
NUM     DB      30H
START:  PUSH    CS
        POP     DS
        MOV     DL,NUM
        INC     NUM
        MOV     AH,2
        INT     21H

        MOV     AL,00100000B
        OUT     0A0H,AL
        OUT      20H,AL

        CLI
        POP     ES
        POP     DS
        POP     BP
        POP     DI
        POP     SI
        POP     DX
        POP     CX
        POP     BX
        POP     AX
        IRET
INT71H  ENDP
MAIN    PROC    FAR
        PUSH    CS
        POP     DS

        MOV     AH,35H
        MOV     AL,71H
        INT     21H
        MOV     VH,ES
        MOV     VL,BX

        MOV     DX,OFFSET INT71H
        MOV     AL,71H
        MOV     AH,25H
        INT     21H

        IN      AL,0A1H
        AND     AL,11111101B
        OUT     0A1H,AL
        STI

        MOV     DX,303H
        MOV     AL,00110110B
        OUT     DX,AL
        MOV     DX,300H
        MOV     AX,0FFFFH
        OUT     DX,AL
        MOV     AL,AH
        OUT     DX,AL

LP:     CMP     NUM,3AH
        JNZ     LP

        MOV     DX,303H
        MOV     AL,00111110B
        OUT     DX,AL
        
        MOV     DX,VL
        MOV     DS,VH
        MOV     AL,71H
        MOV     AH,25H
        INT     21H

        MOV     AX,4C00H
        INT     21H

MAIN    ENDP
CODE    ENDS
        END     MAIN

异步串行通信:
STACK   SEGMENT PARA STACK
	DW	100H DUP(?)
STACK   ENDS

DATA    SEGMENT
SEND    DB 0FH
DATA    ENDS

CODE    SEGMENT
        ASSUME  CS:CODE,DS:DATA,SS:STACK
MAIN:
        MOV     AX,DATA
		MOV 		DS,AX

        MOV     DX,303H
        MOV     AL,10110110B   ;初始化8253:使用计数器2、读/写2个字节、工作方式3、码制为二进制    
        OUT     DX,AL
        
        MOV     DX,302H        ;置计数器2的初值为13H,因为波特率为4800
        MOV     AL,13
        OUT     DX,AL
        MOV     AL,0
        OUT     DX,AL

        MOV     DX,31BH        ;置除数锁存器访问允许
        MOV     AL,80H
        OUT     DX,AL
        
		MOV     DX,318H        ;置除数锁存器值为0018H        
        MOV     AL,18
        OUT     DX,AL
        MOV     DX,319H
        MOV     AL,00H
        OUT     DX,AL

        MOV     DX,31BH         ;设定通信线路控制寄存器的字长为8位
        MOV     AL,03H          
        OUT     DX,AL
        MOV     DX,319H         ;设定中断允许寄存器为不允许任何中断
        MOV     AL,0
        OUT     DX,AL


LP1:

MOV     DX,31DH        ;测试线路状态寄存器的第5位,当其为1时CPU才能向UART写数据
        IN      AL,DX
        TEST    AL,00100000B
        JZ      LP1
        MOV     DX,318H
        MOV     AL,SEND         ;写入数据
        OUT     DX,AL

        MOV     AH,1
        INT     16H
        JZ      LP1

        MOV     AX,4C00H
        INT     21H
CODE    ENDS
        END     MAIN

⌨️ 快捷键说明

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