前三道题参考汪神博客【微机原理与汇编语言】考点总结
;简单I/O口扩展 19200 ; 连线: ; 输入输出 INL ----- 端口地址 300IN ; 输入输出 i0~i7 --- 逻辑电平开关 K0~K7 ; 输入输出 OUTL ---- 端口地址 300OUT ; 输入输出 o0~o7 --- 发光二极管 L0~L7 ; 输入输出 D0~D7 --- 数据总线 D0~D7 CS_IO EQU 0300H CODE SEGMENT ASSUME CS:CODE START PROC NEAR MOV DX,CS_IO MOV DX,0300H MOV CL,00000001B MLOOP: IN AL,DX NOT AL TEST AL,01000000B JZ STOP MOV AL,CL OUT DX,AL ROL CL,1 CALL DELAY JMP MLOOP STOP: MOV AL,00000000B OUT DX,AL MOV CL,00000001B JMP MLOOP START ENDP DELAY PROC PUSH DX PUSH AX MOV DX,02H MOV AX,0 L1: SUB AX,1 SBB DX,0 CMP AX,0 JNE L1 CMP DX,0 JNE L1 POP AX POP DX RET DELAY ENDP CODE ENDS END START
; 8253定时计数器 ; 连线: ; 8253 CS ------ 端口地址 300CS ; PACK IMS ----- 393 1A ; 393 1QD ------ 8253 CLK1 ; 8253 OUT1 ---- 8253 CLK2 ; 8253 OUT2 ---- 发光二极管 L? ; 8253 GATE1 -- (A10)+5V ; 8253 GATE2 -- (A10)+5V ; 运行: ; 运行程序,发光二极管1s周期闪烁 CS8253 EQU 0303H COUNT0 EQU 0300H COUNT1 EQU 0301H COUNT2 EQU 0302H CODE SEGMENT ASSUME CS:CODE START PROC NEAR MOV DX,CS8253 MOV AL,01110110B OUT DX,AL MOV DX,COUNT1 MOV AX,19200 OUT DX,AL MOV AL,AH OUT DX,AL MOV DX,CS8253 MOV AL,10010100B OUT DX,AL MOV DX,COUNT2 MOV AX,4 OUT DX,AL JMP $ START ENDP CODE ENDS END START
; 8255 PA输入 PB输出 ; 连线: ; 8255 CS ---------- 端口地址 300CS ; 8255 PA7..PA0 ---- 逻辑电平开关 K7..K0 ; 8255 PB7..PB0 ---- 发光二极管 L7..L0 ; 运行: ; 全速运行程序,拨动K0~K7,观察L0~L7发光二极管显示 CS8255 EQU 0303H PORTA EQU 0300H PORTB EQU 0301H DATA SEGMENT BUF DB 11000000B,11111001B,10100100B,10110000B DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC NEAR MOV DX,CS8255 ;8255初始化 MOV AL,80H OUT DX,AL okok: mov si,offset BUF mov bl,4 MAIN: MOV DX,PORTA ;读PA数据 mov AL,[si] OUT DX,AL MOV DX,PORTB ;数据写PB mov al,000001B call delay OUT DX,al inc si sub bl,1 cmp bl,0 Ja MAIN jmp okok START ENDP delay proc push cx push bx mov cx ,0ffffh l0: mov bx,3 l1: sub bx,1 cmp bx,0 ja l1 dec cx cmp cx,0 ja l0 pop bx pop cx ret delay endp CODE ENDS END START
; 8255 PA输入 PB输出 ; 连线: ; 8255 CS ---------- 端口地址 300CS ; 8255 PA7..PA0 ---- 逻辑电平开关 K7..K0 ; 8255 PB7..PB0 ---- 发光二极管 L7..L0 ; 运行: ; 全速运行程序,拨动K0~K7,观察L0~L7发光二极管显示 CS8255 EQU 0303H PORTA EQU 0300H PORTB EQU 0301H DATA SEGMENT BUF DB 11000000B,11111001B,10100100B,10110000B DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START PROC NEAR MOV DX,CS8255 ;8255初始化 MOV AL,80H OUT DX,AL mov si,offset BUF MAIN: MOV DX,PORTA ;读PA数据 mov ah,1 int 21h sub al,48 mov ah,0 add si,ax mov AL,[si] OUT DX,AL MOV DX,PORTB ;数据写PB mov al,000001B OUT DX,al Jmp MAIN START ENDP CODE ENDS END START