汇编实验

 

实验七:

;Tio.asm

;基本I/O接口电路设计实验

 

;***************根据CHECK配置信息修改下列符号值*******************

IOY0         EQU   0A000H          ;片选IOY0对应的端口始地址

IOY1         EQU   0A040H          ;片选IOY1对应的端口始地址

;*****************************************************************

MYIO_A       EQU   IOY0+00H*4     ;基本输入输出单元A组端口地址

MYIO_B       EQU   IOY1+00H*4     ;基本输入输出单元B组端口地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

CODE SEGMENT

        ASSUME CS:CODE

 

START: MOV  DX,MYIO_A              ;读写基本I/O单元A组的端口

       IN   AL,DX

       OUT  DX,AL

 

       MOV  DX,MYIO_B              ;读写基本I/O单元B组的端口

       IN   AL,DX

       OUT  DX,AL

 

       MOV  AH,1                   ;判断是否有按键按下

       INT  16H

       JZ   START                  ;无按键则跳回继续循环,有则退出

 

QUIT:  MOV  AX,4C00H               ;返回到DOS

       INT  21H

 

CODE ENDS

     END START

实验八:

;T138.asm

;地址译码电路设计实验

 

;***************根据CHECK配置信息修改下列符号值*******************

IOY0       EQU   9C00H            ;片选IOY0对应的端口始地址

;*****************************************************************      

Y6         EQU   IOY0+0C0H        ;译码电路输出Y6对应的端口地址

Y7         EQU   IOY0+0E0H        ;译码电路输出Y7对应的端口地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

CODE SEGMENT

        ASSUME CS:CODE

 

START: MOV DX,Y6                  ;读写片选接Y6的端口

       IN  AL,DX                 

       OUT DX,AL                 

 

       MOV DX,Y7                  ;读写片选接Y7的端口

       IN  AL,DX                 

       OUT DX,AL                  

 

       MOV AH,1                   ;判断是否有按键按下

       INT 16H

       JZ  START                  ;无按键则跳回继续循环,有则退出

 

QUIT:  MOV AX,4C00H               ;返回到DOS

       INT 21H

 

CODE ENDS

     END START

 

实验九:

;Led.asm

;LED显示实验

 

;***************根据CHECK配置信息修改下列符号值*******************

IOY0         EQU   0A000H          ;片选IOY0对应的端口始地址

IOY1         EQU   0A040H          ;片选IOY1对应的端口始地址

;*****************************************************************

MYIO_A       EQU   IOY0+00H*4     ;基本输入输出单元A组端口地址

MYIO_B       EQU   IOY1+00H*4     ;基本输入输出单元B组端口地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

CODE SEGMENT

        ASSUME CS:CODE

 

START: MOV DX,MYIO_B

       MOV AL,00H

       OUT DX,AL

 

       MOV DX,MYIO_A              ;操作LED行显示

       MOV BL,01H

       MOV CX,8

LOOP1: MOV AL,BL

       OUT DX,AL

       ROL BL,1

       CALL DALLY

       LOOP LOOP1

 

       MOV DX,MYIO_A

       MOV AL,0FFH

       OUT DX,AL

 

       MOV DX,MYIO_B              ;操作LED列显示

       MOV BL,0FEH

       MOV CX,8

LOOP2: MOV AL,BL

       OUT DX,AL

       ROL BL,1

       CALL DALLY

       LOOP LOOP2

           

       MOV AH,1                   ;判断是否有按键按下

       INT 16H

       JZ  START                  ;无按键则跳回继续循环,有则退出

 

       MOV DX,MYIO_A

       MOV AL,00H

       OUT DX,AL

 

QUIT:  MOV AX,4C00H               ;返回到DOS

       INT 21H

 

DALLY PROC NEAR                   ;软件延时子程序

       PUSH CX

       PUSH AX

       MOV CX,3FFH

D1:    MOV AX,0FFFFH

D2:    DEC AX

       JNZ D2

       LOOP D1

       POP AX

       POP CX

       RET

DALLY ENDP

 

CODE ENDS

     END START

实验十一:

;T8255-1.asm

;8255基本输入输出实验

 

;****************根据查看端口资源修改下列符号值*******************

IOY0         EQU   0A000H          ;片选IOY0对应的端口始地址

;*****************************************************************

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的控制寄存器地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

CODE SEGMENT

        ASSUME CS:CODE

 

START: MOV DX,MY8255_MODE         ;初始化8255工作方式

       MOV AL,82H                 ;工作方式0,A口输出,B口输入

       OUT DX,AL

 

LOOP1: MOV DX,MY8255_B            ;读B口

       IN  AL,DX

       MOV DX,MY8255_A            ;写A口

       OUT DX,AL

 

       MOV AH,1                   ;判断是否有按键按下

       INT 16H

       JZ  LOOP1                  ;无按键则跳回继续循环,有则退出

 

QUIT:  MOV AX,4C00H               ;结束程序退出

       INT 21H

 

CODE ENDS

     END START

 

 

;T8255-2.asm

;8255流水灯显示实验

 

;****************根据查看端口资源修改下列符号值*******************

IOY0         EQU   0A000H          ;片选IOY0对应的端口始地址

;*****************************************************************

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的控制寄存器地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

DATA SEGMENT

LA      DB  ?                     ;定义数据变量

LB      DB  ?

DATA ENDS

 

CODE SEGMENT

        ASSUME CS:CODE,DS:DATA

 

START: MOV AX,DATA

       MOV DS,AX

 

       MOV DX,MY8255_MODE         ;定义8255工作方式           

       MOV AL,80H                 ;工作方式0,A口和B口为输出

       OUT DX,AL

 

       MOV DX,MY8255_A            ;写A口发出的起始数据

       MOV AL,80H

       OUT DX,AL

       MOV LA,AL

 

       MOV DX,MY8255_B            ;写B口发出的起始数据

       MOV AL,01H

       OUT DX,AL

       MOV LB,AL

 

LOOP1: CALL DALLY

       MOV AL,LA                  ;将A口起始数据右移再写入A口

       ROR AL,1       

       MOV LA,AL

       MOV DX,MY8255_A

       OUT DX,AL

 

       MOV AL,LB                  ;将B口起始数据左移再写入B口

       ROL AL,1

       MOV LB,AL

       MOV DX,MY8255_B

       OUT DX,AL

 

       MOV AH,1                   ;判断是否有按键按下

       INT 16H

       JZ  LOOP1                  ;无按键则跳回继续循环,有则退出

 

QUIT:  MOV AX,4C00H               ;结束程序退出

       INT 21H

 

DALLY PROC NEAR                   ;软件延时子程序

       PUSH CX

       PUSH AX

       MOV  CX,3FFH

D1:    MOV  AX,0FFFFH

D2:    DEC  AX

       JNZ  D2

       LOOP D1

       POP  AX

       POP  CX

       RET

DALLY ENDP

 

CODE ENDS

     END START

 

实验十二

;T0809.asm

;A/D转换实验

 

;****************根据查看端口资源修改下列符号值*******************

IOY0         EQU   0A000H          ;片选IOY0对应的端口始地址

;*****************************************************************

AD0809       EQU   IOY0+00H       ;AD0809的端口地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

DATA SEGMENT

STR1   DB  'AD0809:IN0  $'        ;定义显示的字符串

DATA ENDS

 

CODE SEGMENT

         ASSUME CS:CODE,DS:DATA

 

START: MOV AX,DATA

            MOV DS,AX

 

LOOP1: MOV DX,AD0809             ;启动A/D转换

            OUT DX,AL

           

            CALL DALLY

 

            MOV DX,OFFSET STR1        ;显示字符串AD0809:IN0

            MOV AH,9

            INT 21H

 

       MOV DX,AD0809             ;读出转换结果

       IN AL,DX

 

       MOV CH,AL                 ;分析结果进行显示

       AND AL,0F0H

            MOV CL,04H

            SHR AL,CL                 ;取出数据的十位

            CMP AL,09H

            JG A1

 

            ADD AL,30H               

            JMP A2

A1:     ADD AL,37H                ;对A~F的处理

A2:    MOV DL,AL                 ;对0~9的处理

       MOV AH,02H

            INT 21H

 

       MOV AL,CH              

            AND AL,0FH                ;取出数据的个位

            CMP AL,09H

            JG A3

 

            ADD AL,30H

            JMP A4

A3:     ADD AL,37H                ;对A~F的处理

A4:     MOV DL,AL                 ;对0~9的处理

       MOV AH,02H

            INT 21H

 

       MOV DL,0DH                ;回车,置光标到行首

       MOV AH,02H

            INT 21H

 

       MOV AH,1                  ;判断是否有按键按下

       INT 16H

       JZ  LOOP1                 ;无按键则跳回继续循环,有则退出

 

QUIT:  MOV AX,4C00H              ;结束程序退出

       INT 21H

 

DALLY PROC NEAR                           ;软件延时子程序

       PUSH CX

            PUSH AX

            MOV CX,4000H

D1:    MOV AX,0600H

D2:     DEC AX

            JNZ D2

            LOOP D1

            POP AX

            POP CX

            RET

DALLY ENDP

 

CODE ENDS

     END START

实验十三

;T0832-1.asm

;D/A转换实验,产生方波

 

;****************根据查看端口资源修改下列符号值*******************

IOY0         EQU   0A000H          ;片选IOY0对应的端口始地址

;*****************************************************************

DA0832       EQU   IOY0+00H*4     ;DA0832的端口地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

DATA SEGMENT

STR1   DB  'DA0832: Square Wave $'        ;定义显示的字符串

DATA ENDS

 

CODE SEGMENT

         ASSUME CS:CODE,DS:DATA

 

START: MOV AX,DATA

        MOV DS,AX

       

        MOV DX,OFFSET STR1        ;显示字符串 

        MOV AH,9

        INT 21H

 

LOOP1:  MOV DX,DA0832             ;写00H,输出低电平

        MOV AL,00H

             OUT DX,AL

        CALL DALLY

 

        MOV DX,DA0832             ;写7FH,输出高电平

        MOV AL,7FH

        OUT DX,AL

        CALL DALLY

 

        MOV AH,1                  ;判断是否有按键按下

        INT 16H

        JZ  LOOP1                 ;无按键则跳回继续循环,有则退出

 

QUIT:   MOV AX,4C00H              ;结束程序退出

        INT 21H

 

DALLY PROC NEAR                            ;软件延时子程序

        PUSH CX

             PUSH AX

        MOV CX,0050H

D1:     MOV AX,5000H

D2:      DEC AX

             JNZ D2

             LOOP D1

             POP AX

             POP CX

           RET

DALLY ENDP

 

CODE ENDS

     END START

 

;T0832-2.asm

;D/A转换实验,产生锯齿波

 

;****************根据查看端口资源修改下列符号值*******************

IOY0         EQU   0A000H         ;片选IOY0对应的端口始地址

;*****************************************************************

DA0832       EQU   IOY0+00H*4    ;DA0832的端口地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

DATA SEGMENT

STR1   DB  'DA0832: JUCHI Wave $'        ;定义显示的字符串

DATA ENDS

 

CODE SEGMENT

         ASSUME CS:CODE,DS:DATA

 

START:  MOV AX,DATA

        MOV DS,AX

       

        MOV DX,OFFSET STR1        ;显示字符串 

        MOV AH,9

        INT 21H

 

LOOP1:  MOV AL,00H                ;D/A转换起始值

UP:     MOV DX,DA0832             ;启动D/A转换

        OUT DX,AL

        CALL DALLY

 

             INC AL                   

             CMP AL,7FH

                   JNE UP

      

        MOV AH,1                  ;判断是否有按键按下

        INT 16H

        JZ  LOOP1                 ;无按键则跳回继续循环,有则退出

 

QUIT:   MOV AX,4C00H              ;结束程序退出

        INT 21H

 

DALLY PROC NEAR                            ;软件延时子程序

        PUSH CX

             PUSH AX

        MOV CX,0010H

D1:     MOV AX,0100H

D2:      DEC AX

             JNZ D2

             LOOP D1

             POP AX

             POP CX

           RET

DALLY ENDP

 

CODE ENDS

     END START

 

;T0832-2.asm

;D/A转换实验,产生三角波

 

;****************根据查看端口资源修改下列符号值*******************

IOY0         EQU   0A000H         ;片选IOY0对应的端口始地址

;*****************************************************************

DA0832       EQU   IOY0+00H*4    ;DA0832的端口地址

 

STACK1 SEGMENT STACK

        DW 256 DUP(?)

STACK1 ENDS

 

DATA SEGMENT

STR1   DB  'DA0832: Triangle Wave $'        ;定义显示的字符串

DATA ENDS

 

CODE SEGMENT

         ASSUME CS:CODE,DS:DATA

 

START:  MOV AX,DATA

        MOV DS,AX

       

        MOV DX,OFFSET STR1        ;显示字符串 

        MOV AH,9

        INT 21H

 

LOOP1:  MOV AL,00H                ;D/A转换起始值

UP:     MOV DX,DA0832             ;启动D/A转换

        OUT DX,AL

        CALL DALLY

 

             INC AL                   

             CMP AL,7FH

        JNE UP

 

DOWN:   MOV DX,DA0832

        OUT DX,AL

        CALL DALLY

 

        DEC AL

        CMP AL,00H

        JNE DOWN

 

        MOV AH,1                  ;判断是否有按键按下

        INT 16H

        JZ  LOOP1                 ;无按键则跳回继续循环,有则退出

 

QUIT:   MOV AX,4C00H              ;结束程序退出

        INT 21H

 

DALLY PROC NEAR                            ;软件延时子程序

        PUSH CX

             PUSH AX

        MOV CX,0010H

D1:     MOV AX,0100H

D2:      DEC AX

             JNZ D2

             LOOP D1

             POP AX

             POP CX

           RET

DALLY ENDP

 

CODE ENDS

     END START

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值