彙編實驗

 

實驗七:

;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

 

 

發佈了16 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章