接口代码

>>EXER3.ASM


;A2.asm
;数据传送实验
DDATA	SEGMENT
CBCC6  EQU  00000H;计 
CBFC6  EQU  CBCC6+32;科 
CD7A8  EQU  CBFC6+32;专 
CD2B5  EQU  CD7A8+32;业 
CD6DC  EQU  CD2B5+32;周 
CD3C0  EQU  CD6DC+32;永 
CC7BF  EQU  CD3C0+32;强 

HZDOT:
;计   CBCC6
DB 002H,004H,004H,004H,00CH,004H,004H,004H
DB 000H,004H,0CFH,07FH,008H,004H,008H,004H
DB 008H,004H,008H,004H,008H,004H,048H,004H
DB 028H,004H,018H,004H,008H,004H,000H,004H

;科   CBFC6
DB 060H,010H,01EH,011H,010H,012H,010H,012H
DB 07FH,010H,018H,011H,038H,012H,054H,012H
DB 014H,070H,012H,01EH,0D1H,011H,010H,010H
DB 010H,010H,010H,010H,010H,010H,010H,010H

;专   CD7A8
DB 080H,000H,080H,000H,0FCH,01FH,040H,000H
DB 040H,000H,0FFH,07FH,020H,000H,010H,004H
DB 0F0H,00FH,000H,004H,000H,002H,040H,001H
DB 080H,000H,000H,001H,000H,002H,000H,000H

;业   CD2B5
DB 020H,002H,020H,002H,020H,002H,020H,022H
DB 022H,062H,024H,032H,024H,012H,028H,00AH
DB 038H,00AH,028H,006H,020H,002H,020H,002H
DB 020H,022H,0FFH,07FH,000H,000H,000H,000H

;周   CD6DC
DB 000H,000H,0F8H,03FH,008H,021H,0C8H,027H
DB 008H,021H,008H,021H,0E8H,02FH,008H,020H
DB 0C8H,027H,048H,024H,048H,024H,0C8H,027H
DB 044H,024H,004H,020H,002H,028H,001H,010H

;永   CD3C0
DB 040H,000H,080H,001H,000H,001H,0F8H,000H
DB 080H,010H,080H,018H,0BEH,005H,0A0H,002H
DB 090H,004H,090H,004H,088H,008H,088H,010H
DB 084H,060H,083H,000H,0A0H,000H,040H,000H

;强   CC7BF
DB 000H,000H,09EH,01FH,090H,010H,090H,010H
DB 09EH,01FH,002H,002H,0C2H,03FH,042H,022H
DB 05EH,022H,050H,022H,0D0H,03FH,010H,002H
DB 010H,012H,010H,022H,0D4H,07FH,018H,080H

ADDR DW ?

DDATA	ENDS

EXDA	SEGMENT
MSD	    DB  64 DUP(?)
EXDA	ENDS


SSTACK  SEGMENT STACK
         DW 256 DUP(?)
SSTACK  ENDS

CODE SEGMENT
       ASSUME CS:CODE,DS:DDATA,ES:EXDA
       
START: 
	MOV AX,DDATA
	MOV DS,AX
	
	;调用显示

	
L1:	MOV ADDR, CBCC6
	MOV CX, 112
L2:
	CALL DISPLY
	INC ADDR
	INC ADDR
	LOOP L2
	
	JMP L1
	  
	MOV AX,4C00H
	INT 21H
	   
;延时程序
;==================================================
DELAY PROC NEAR
	PUSH CX
	PUSH AX
	
	MOV CX, 0FH
D1:
	MOV AX, 5000H
D2:	
	DEC AX
	JNZ D2
	LOOP D1
	
	POP AX
	POP CX
	RET
DELAY ENDP
;====================================================

.386
;;===================================================
DISPLY PROC NEAR
	PUSH CX
	;行码
	MOV CX, 128
HEAD:
	MOV BX, 0FFFEH
	MOV SI, ADDR;OFFSET CBFC6
	PUSH CX
	MOV CX, 16
DY:
	MOV AX, [SI]
	SHL EAX, 16
	MOV AX, BX
	
	INC SI
	INC SI
	
	ROL BX, 1
	
	NOT EAX
	
	MOV DX, 9C40H	
	OUT DX, EAX
	CALL DELAY
	LOOP DY
	
	POP CX
	LOOP HEAD
	
	POP CX
		
	RET
	
DISPLY ENDP
;=======================================================

CODE  ENDS
	   END START

>>EXER4.ASM


;exe4.asm
;数据传送实验

IOY0  EQU 9C00H ;IOY0起始地址
DMA_0 EQU IOY0+00H*4 ;通道0当前地址寄存器
DMA_1 EQU IOY0+01H*4 ;通道0当前字节计数寄存器
DMA_2 EQU IOY0+02H*4 ;通道1当前地址寄存器
DMA_3 EQU IOY0+03H*4 ;通道1当前字节计数寄存器
DMA_4 EQU IOY0+04H*4 ;
DMA_5 EQU IOY0+05H*4 ;
DMA_6 EQU IOY0+06H*4 ;
DMA_7 EQU IOY0+07H*4 ;
DMA_8 EQU IOY0+08H*4 ;写命令寄存器/读状态寄存器
DMA_9 EQU IOY0+09H*4 ;请求寄存器
DMA_A EQU IOY0+0AH*4 ;
DMA_B EQU IOY0+0BH*4 ;工作方式寄存器
DMA_C EQU IOY0+0CH*4
DMA_D EQU IOY0+0DH*4 ;写总清命令/读暂存寄存器
DMA_E EQU IOY0+0EH*4
DMA_F EQU IOY0+0FH*4 ;屏蔽位寄存器

DDATA	SEGMENT
DDATA	ENDS

STACK1  SEGMENT STACK
         DW 256 DUP(?)
STACK1  ENDS

EXDA	SEGMENT
MSD	    DB  256 DUP(?)
EXDA	ENDS

CODE	SEGMENT
       ASSUME CS:CODE,DS:DDATA,ES:EXDA
       
START: MOV AX,DDATA
	   MOV DS,AX
	   
	   ;主清除寄存器
	   ;MOV DX, DMA_D
	   ;OUT DX, AL
	   
	   ;禁止8237工作
	   MOV AL, 4
	   MOV DX, DMA_8
	   OUT DX, AL
	   
	   ;设置0,1通道基地址
       ;0 ADDR
       MOV DX, DMA_0
       MOV AL, 00H
       OUT DX, AL
       MOV AL, 00H
       OUT DX, AL
       ;1 ADDR
       MOV DX, DMA_2
       MOV AL, 08H
       OUT DX, AL
       MOV AL, 00H
       OUT DX, AL
       	
       ;设置0,1基字计数器 
       ;0 
       MOV DX, DMA_1
       MOV AL, 08H
       OUT DX, AL
       MOV AL, 00H
       OUT DX, AL
       
       ;1
       MOV DX, DMA_3
       MOV AL, 08H
       OUT DX, AL
       MOV AL, 00H
       OUT DX, AL
   
       
       ;设置0,1工作方式
       ;0 read
       MOV AL, 88H
       MOV DX, DMA_B
       OUT DX, AL
       ;1 write
       MOV AL, 85H
       MOV DX, DMA_B
       OUT DX, AL
       
       ;清除通道0屏蔽
       MOV AL, 0
       MOV DX, DMA_A
       OUT DX, AL
       
       ;清除通道1屏蔽
       MOV AL, 1
       MOV DX, DMA_A
       OUT DX, AL
       
       ;允许8237工作
	   MOV AL, 41H
	   MOV DX, DMA_8
	   OUT DX, AL
    
       ;0工作
       MOV AL, 4
       MOV DX, DMA_9
       OUT DX, AL
       ;1工作
       MOV AL, 5
       MOV DX, DMA_9
       OUT DX, AL
       
WAITF:
	   MOV DX, DMA_8
	   IN AL, DX
	   AND AL, 03
	   CMP AL, 03
	   JNZ WAITF	
    	
	   MOV AX,4C00H
	   INT 21H
CODE  ENDS
	   END START


>>EXER5.ASM


;A2.asm
IOY0 EQU 9C00H
JADDR EQU IOY0+100B
OADDR EQU IOY0+000B

STACK1  SEGMENT STACK
         DW 256 DUP(?)
STACK1  ENDS

DDATA	SEGMENT
MES     DB   'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
D0	DB '0$'
D1	DB '1$'
DDATA	ENDS

CODE	SEGMENT
       ASSUME CS:CODE,DS:DDATA
       
START: MOV AX,DDATA
	   MOV DS,AX
	   
	   MOV DX,OFFSET MES          ;显示退出提示
	   MOV AH,09H		
	   INT 21H	
HEAD:	   
	   ;==================
	   ;ICW1
	   MOV DX, OADDR
	   MOV AL, 13H
	   OUT DX, AL
	   
	   ;ICW2
	   MOV DX, JADDR
	   MOV AL, 80H
	   OUT DX, AL
	   
	   ;ICW3 
	   OUT DX, AL
	   
	   ;ICW4
	   MOV AL, 00H
	   OUT DX, AL
	   
	   ;OCW1
	   MOV AL, 0FCH
	   OUT DX, AL
	   
	   ;OCW2
	   MOV DX, OADDR
	   MOV AL, 20H
	   OUT DX, AL
	   
	   ;==================
	   ;OCW3
	   MOV DX, OADDR
	   MOV AL, 0EH
	   OUT DX, AL
	   
	   ;读查询字
	   IN AL, DX
	   MOV BL, AL
	   
	   ;判断是不是有中断   
	   AND AL, 80H
	   JZ EXIT
	   
	   ;判断是不是0或1中断
	   MOV AL, BL
	   AND AL, 1
	   JNZ IR1
	   JMP IR0
IR0:
		LEA DX, D0
		MOV AH, 09H
		INT 21H
		JMP EXIT
IR1:
		LEA DX, D1
		MOV AH, 09H
		INT 21H
		JMP EXIT
EXIT:
		MOV AH, 1
		INT 16H
		JZ HEAD
	   ;==================
	   
	   MOV DX,OFFSET MES          ;显示退出提示
	   MOV AH,09H		
	   INT 21H		

KEY:   MOV AH,1            ;判断是否有按键按下?
       INT 16H
       JZ  KEY
    
	   MOV AX,4C00H
	   INT 21H
CODE  ENDS
	   END START

>>EXER6.ASM


;exer6
IOY0 EQU 9C00H
INTA EQU IOY0+0*4
INTB EQU IOY0+1*4
INTC EQU IOY0+2*4
CTL  EQU IOY0+3*4

STACK1  SEGMENT STACK
         DW 256 DUP(?)
STACK1  ENDS

DDATA	SEGMENT
MES     DB   'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
DDATA	ENDS

CODE	SEGMENT
       ASSUME CS:CODE,DS:DDATA
       
START: MOV AX,DDATA
	   MOV DS,AX
	   
	   MOV DX,OFFSET MES          ;显示退出提示
	   MOV AH,09H		
	   INT 21H		
HEAD:	   
	   ;写控制字
	   MOV AL, 80H
	   MOV DX, CTL
	   OUT DX, AL
	   
	   CALL ALLRED 
	   
	   ;=================================
	   ;点亮1.3路口绿灯
	   MOV AL, 03H
	   MOV DX, INTA
	   OUT DX, AL
	   ;DELAY
	   MOV BX, 16
	   CALL NDELAY
	   
	   ;黄灯闪烁8次
	   MOV DX, INTA
	   MOV CX, 8
LP1:
	   MOV AL, 18H
	   OUT DX, AL
	   ;DELAY
	   CALL DELAY
	   MOV AL, 00H
	   OUT DX, AL
	   CALL DELAY
	   LOOP LP1
	   
	   ;CALL ALLRED
	   CALL ALLRED 
	   
	   ;=================================
	   ;点亮2.4路口绿灯
	   MOV AL, 03H
	   MOV DX, INTB
	   OUT DX, AL
	   ;DELAY
	   MOV BX, 16
	   CALL NDELAY
	   
	   ;黄灯闪烁8次
	   MOV DX, INTB
	   MOV CX, 8
LP4:
	   MOV AL, 18H
	   OUT DX, AL
	   ;DELAY
	   CALL DELAY
	   MOV AL, 00H
	   OUT DX, AL
	   CALL DELAY
	   LOOP LP4
	   
	   ;CALL ALLRED
	   CALL ALLRED 

       MOV AH,1            ;判断是否有按键按下?
       INT 16H
       JZ  HEAD
    
	   MOV AX,4C00H
	   INT 21H
;========================================	   
DELAY PROC NEAR
	PUSH AX
	PUSH BX
	PUSH CX
	PUSH DX
	
	MOV CX, 0FFFFH
	
LP2:
	PUSH CX
	MOV CX, 02FFH
	LP3:
		INC BX
		DEC BX
		LOOP LP3
	
	POP CX
	LOOP LP2
	
	POP DX
	POP CX
	POP BX
	POP AX
	RET
DELAY ENDP

;=========================================
ALLRED PROC NEAR
	PUSH AX
	PUSH DX
	
    ;=================================
    ;写入
    MOV AL, 0C0H
    ;写入pa
    MOV DX, INTA
    OUT DX, AL
    ;写入pb
    MOV DX, INTB
    OUT DX, AL	
    
    POP DX
    POP AX
    
	RET
ALLRED ENDP

;========================================
NDELAY PROC NEAR
	PUSH CX
	
	MOV CX, BX
LP5:
	CALL DELAY
	LOOP LP5
	
	POP  CX
	RET
NDELAY ENDP

CODE  ENDS
	   END START

>>EXER7.ASM


;exer7_1
IOY1 EQU 9C40H
CHN0 EQU IOY1+0*4
CHN1 EQU IOY1+1*4
CHN2 EQU IOY1+2*4
CTL  EQU IOY1+3*4

DDATA	SEGMENT
MES     DB   'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
DDATA	ENDS

CODE	SEGMENT
       ASSUME CS:CODE,DS:DDATA
       
START: MOV AX,DDATA
	   MOV DS,AX
	   
	   MOV DX,OFFSET MES          ;显示退出提示
	   MOV AH,09H		
	   INT 21H		
	   
	   ;设置通道2,工作方式3
	   MOV AL, 0B6H
	   MOV DX, CTL
	   OUT DX, AL
	   
	   ;设置初值64H
	   MOV DX, CHN2
	   MOV AL, 64H
	   OUT DX, AL
	   MOV AL, 00H
	   OUT DX, AL
	   
	   ;设置通道0,工作方式3
	   MOV AL, 036H
	   MOV DX, CTL
	   OUT DX, AL
	   
	   ;设置初值4800H
	   MOV DX, CHN0
	   MOV AL, 00H
	   OUT DX, AL
	   MOV AL, 48H
	   OUT DX, AL
KEY:
       MOV AH,1            ;判断是否有按键按下?
       INT 16H
       JZ KEY
    
	   MOV AX,4C00H
	   INT 21H
CODE  ENDS
	   END START



;exer7_2
IOY0 EQU 9C00H
IOY1 EQU 9C40H

JADDR EQU IOY0+100B
OADDR EQU IOY0+000B

CHN0 EQU IOY1+0*4
CHN1 EQU IOY1+1*4
CHN2 EQU IOY1+2*4
CTL  EQU IOY1+3*4

STACK1  SEGMENT STACK
         DW 256 DUP(?)
STACK1  ENDS

DDATA	SEGMENT
MES     DB   'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
D0	DB '7$'
D1	DB '0$'
DDATA	ENDS

CODE	SEGMENT
       ASSUME CS:CODE,DS:DDATA
       
START: MOV AX,DDATA
	   MOV DS,AX
	   
	   MOV DX,OFFSET MES          ;显示退出提示
	   MOV AH,09H		
	   INT 21H	
	   
	   ;========================================
	   ;设置通道2,工作方式3
	   MOV AL, 0B6H
	   MOV DX, CTL
	   OUT DX, AL
	   
	   ;设置初值64H
	   MOV DX, CHN2
	   MOV AL, 64H
	   OUT DX, AL
	   MOV AL, 00H
	   OUT DX, AL
	   
	   ;设置通道0,工作方式3
	   MOV AL, 036H
	   MOV DX, CTL
	   OUT DX, AL
	   
	   ;设置初值4800H
	   MOV DX, CHN0
	   MOV AL, 00H
	   OUT DX, AL
	   MOV AL, 48H
	   OUT DX, AL
	   ;==============================================
	   
	   
	   ;==================
	   ;ICW1
	   MOV DX, OADDR
	   MOV AL, 13H
	   OUT DX, AL
	   
	   ;ICW2
	   MOV DX, JADDR
	   MOV AL, 80H
	   OUT DX, AL
	   
	   ;ICW3 
	   OUT DX, AL
	   
	   ;ICW4
	   MOV AL, 00H
	   OUT DX, AL
	   
	   ;OCW1
	   MOV AL, 0FCH
	   OUT DX, AL
HEAD:	   
   	;OCW2
   	MOV DX, OADDR
   	MOV AL, 20H
   	OUT DX, AL
   
   	;==================
   	;OCW3
   	MOV DX, OADDR
   	MOV AL, 0EH
   	OUT DX, AL
   
   	;读查询字
   	IN AL, DX
   	MOV BL, AL
   
   	;判断是不是有中断   
   	AND AL, 80H
   	JZ EXIT
   
   	;判断是不是0或1中断
   	MOV AL, BL
   	AND AL, 1
    JNZ IR1
    JMP IR0
IR0:
	LEA DX, D0
	MOV AH, 09H
	INT 21H
	JMP EXIT
IR1:
	LEA DX, D1
	MOV AH, 09H
	INT 21H
	JMP EXIT

EXIT:
	MOV AH, 1
	INT 16H
	JZ 	HEAD
	;==================
	   
	MOV DX,OFFSET MES          ;显示退出提示
	MOV AH,09H		
	INT 21H		

KEY:   
	MOV AH,1            ;判断是否有按键按下?
    INT 16H
    JZ  KEY
    
	MOV AX,4C00H
	INT 21H
CODE  ENDS
	   END START

>>EXER8.ASM


;exer8
IOY0 EQU 9C00H
IOY1 EQU 9C40H

MY8255_A EQU IOY0+00H*4 	;8255的A口地址
MY8255_B EQU IOY0+01H*4 	;8255的B口地址
MY8255_C EQU IOY0+02H*4 	;8255的C口地址
MY8255_MODE EQU IOY0+03H*4 	;8255的控制寄存器

DDATA	SEGMENT
MES     DB   'Press any key to exit!',0AH,0DH,0AH,0DH,'$'
TAB:	DB	3FH, 06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH
		DB	6FH, 77H, 7CH, 39H, 5EH, 79H, 71H, 00H, 0E3H
DAREA	DB 	1, 2, 3, 4, 5, 6	;显示缓冲区
DDATA	ENDS

CODE	SEGMENT
       ASSUME CS:CODE,DS:DDATA
       
START: 
	MOV AX,DDATA
	MOV DS,AX
	   
	MOV DX,OFFSET MES          ;显示退出提示
	MOV AH,09H		
	INT 21H	
	
	;设置8255工作方式
	MOV AL, 89H 		;控制方式89h
	MOV DX, MY8255_MODE
	OUT DX, AL
	
	CALL MY_DISPLAY
	   
KEY:
    MOV AH,1            ;判断是否有按键按下?
    INT 16H
    JZ KEY
    
	MOV AX,4C00H
    INT 21H
    
;=============================================================
;显示子程序
MY_DISPLAY PROC NEAR
	PUSH CX
	PUSH BX
	
	MOV CL, 0DFH
	;GET DAREA TO AL
	LEA BX, DAREA
J3:
	MOV SI, 0	
J2:
	MOV AL, [BX+SI]
J1:
	;转换al为码
	PUSH BX
	LEA BX, TAB
	XLAT		
	POP BX
		
	;要显示的内容
	MOV DX, MY8255_B
	OUT DX, AL
	;要显示的位置
	MOV AL, CL
	MOV DX, MY8255_A
	OUT DX, AL
	
	;右移显示下一位
	ROR CL, 1
	CMP CL, 7FH
	JE J4
	JMP J5
J4:	
	MOV CL, 0DFH ;CL重置
J5:	
	INC SI
	CMP SI, 6
	;为六,则重为0	
	JE J3
	CMP SI, 6
	JNE J2

	RET
MY_DISPLAY ENDP
;=============================================================
CODE  ENDS
	END START
	   


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值