汇编实验

 

实验七:

;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

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值