中南大学微机原理实验代码硬件部分.docx

上传人:b****5 文档编号:7430446 上传时间:2023-01-23 格式:DOCX 页数:40 大小:21.49KB
下载 相关 举报
中南大学微机原理实验代码硬件部分.docx_第1页
第1页 / 共40页
中南大学微机原理实验代码硬件部分.docx_第2页
第2页 / 共40页
中南大学微机原理实验代码硬件部分.docx_第3页
第3页 / 共40页
中南大学微机原理实验代码硬件部分.docx_第4页
第4页 / 共40页
中南大学微机原理实验代码硬件部分.docx_第5页
第5页 / 共40页
点击查看更多>>
下载资源
资源描述

中南大学微机原理实验代码硬件部分.docx

《中南大学微机原理实验代码硬件部分.docx》由会员分享,可在线阅读,更多相关《中南大学微机原理实验代码硬件部分.docx(40页珍藏版)》请在冰豆网上搜索。

中南大学微机原理实验代码硬件部分.docx

中南大学微机原理实验代码硬件部分

;Tio.asm

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

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

IOY0EQU0C400H;片选IOY0对应的端口始地址

IOY1EQU0C400H;片选IOY1对应的端口始地址

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

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

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

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,MYIO_A;读写基本I/O单元A组的端口

INAL,DX

OUTDX,AL

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

INAL,DX

OUTDX,AL

MOVAH,1;判断是否有按键按下

INT16H

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

QUIT:

MOVAX,4C00H;返回到DOS

INT21H

CODEENDS

ENDSTART

 

;T138.asm

;地址译码电路设计实验

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

IOY0EQU0C400H;片选IOY0对应的端口始地址

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

Y0EQUIOY0+00H;译码电路输出Y6对应的端口地址

Y1EQUIOY0+20H;译码电路输出Y7对应的端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE

START:

MOVDX,Y0;读写片选接Y6的端口

INAL,DX

OUTDX,AL

MOVDX,Y1;读写片选接Y7的端口

INAL,DX

OUTDX,AL

MOVAH,1;判断是否有按键按下

INT16H

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

QUIT:

MOVAX,4C00H;返回到DOS

INT21H

CODEENDS

ENDSTART

 

;T8255-1.asm

;8255流水灯显示实验

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

IOY0EQU0C400H;片选IOY0对应的端口始地址

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

MY8255_AEQUIOY0+00H*4;8255的A口地址

MY8255_BEQUIOY0+01H*4;8255的B口地址

MY8255_CEQUIOY0+02H*4;8255的C口地址

MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

LADB?

;定义数据变量

;LBDB?

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,MY8255_MODE;定义8255工作方式

MOVAL,82H;工作方式0,A口为输出,B口为输入

OUTDX,AL

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

MOVAL,80H

OUTDX,AL

MOVLA,AL

 

PAN:

MOVDX,MY8255_B

INAL,DX

CMPAL,01H

JEZUO

CMPAL,02H

JEYOU

CMPAL,03H

JESHAN

CMPAL,04H

JEQUIT

JMPPAN

ZUO:

CALLDALLY

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

ROLAL,1

MOVLA,AL

MOVDX,MY8255_A

OUTDX,AL

MOVDX,MY8255_B

INAL,DX

CMPAL,01H

JEZUO

CMPAL,02H

JEYOU

CMPAL,03H

JESHAN

CMPAL,04H

JEQUIT

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

YOU:

CALLDALLY

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

RORAL,1

MOVLA,AL

MOVDX,MY8255_A

OUTDX,AL

MOVDX,MY8255_B

INAL,DX

CMPAL,01H

JEZUO

CMPAL,02H

JEYOU

CMPAL,03H

JESHAN

CMPAL,04H

JEQUIT

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

SHAN:

CALLDALLY

MOVAL,00H

MOVDX,MY8255_A

OUTDX,AL

CALLDALLY

MOVAL,0FFH

MOVDX,MY8255_A

OUTDX,AL

MOVDX,MY8255_B

INAL,DX

CMPAL,01H

JEZUO

CMPAL,02H

JEYOU

CMPAL,03H

JESHAN

CMPAL,04H

JEQUIT

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

QUIT:

MOVAX,4C00H;结束程序退出

INT21H

DALLYPROCNEAR;软件延时子程序

PUSHCX

PUSHAX

MOVCX,3FFH

D1:

MOVAX,0FFFFH

D2:

DECAX

JNZD2

LOOPD1

POPAX

POPCX

RET

DALLYENDP

CODEENDS

ENDSTART

 

;T8255-2.asm

;8255流水灯显示实验

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

IOY0EQU0C400H;片选IOY0对应的端口始地址

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

MY8255_AEQUIOY0+00H*4;8255的A口地址

MY8255_BEQUIOY0+01H*4;8255的B口地址

MY8255_CEQUIOY0+02H*4;8255的C口地址

MY8255_MODEEQUIOY0+03H*4;8255的控制寄存器地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

LADB?

;定义数据变量

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,MY8255_MODE;定义8255工作方式

MOVAL,82H;工作方式0,A口为输出,B口为输入

OUTDX,AL

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

MOVAL,80H

OUTDX,AL

MOVLA,AL

 

PAN:

MOVAH,1;判断是否有按键按下

INT16H

CMPAL,31H

JEZUO

CMPAL,32H

JEYOU

CMPAL,33H

JESHAN

CMPAL,34H

JEQUIT

JMPPAN

ZUO:

CALLDALLY

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

ROLAL,1

MOVLA,AL

MOVDX,MY8255_A

OUTDX,AL

MOVAH,1;判断是否有按键按下

INT16H

CMPAL,31H

JEZUO

CMPAL,32H

JEYOU

CMPAL,33H

JESHAN

CMPAL,34H

JEQUIT

JMPZUO

YOU:

CALLDALLY

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

RORAL,1

MOVLA,AL

MOVDX,MY8255_A

OUTDX,AL

MOVAH,1;判断是否有按键按下

INT16H

CMPAL,31H

JEZUO

CMPAL,32H

JEYOU

CMPAL,33H

JESHAN

CMPAL,34H

JEQUIT

JMPYOU

SHAN:

CALLDALLY

MOVAL,00H

MOVDX,MY8255_A

OUTDX,AL

CALLDALLY

MOVAL,0FFH

MOVDX,MY8255_A

OUTDX,AL

MOVAH,1;判断是否有按键按下

INT16H

CMPAL,31H

JEZUO

CMPAL,32H

JEYOU

CMPAL,33H

JESHAN

CMPAL,34H

JEQUIT

JMPSHAN

QUIT:

MOVAX,4C00H;结束程序退出

INT21H

DALLYPROCNEAR;软件延时子程序

PUSHCX

PUSHAX

MOVCX,3FFH

D1:

MOVAX,0FFFFH

D2:

DECAX

JNZD2

LOOPD1

POPAX

POPCX

RET

DALLYENDP

CODEENDS

ENDSTART

;Sound.asm

;电子发声设计实验

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

IOY0EQU9C00H

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

MY8254_COUNT0EQUIOY0+00H*4;8254计数器0端口地址

MY8254_COUNT1EQUIOY0+01H*4;8254计数器1端口地址

MY8254_COUNT2EQUIOY0+02H*4;8254计数器2端口地址

MY8254_MODEEQUIOY0+03H*4;8254控制寄存器端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

FREQ_LISTDW371,495,495,495,624,556,495,556,624;频率表

DW495,495,624,742,833,833,833,742,624

DW624,495,556,495,556,624,495,416,416,371

DW495,833,742,624,624,495,556,495,556,833

DW742,624,624,742,833,990,742,624,624,495

DW556,495,556,624,495,416,416,371,495,0

TIME_LISTDB4,6,2,4,4,6,2,4,4;时间表

DB6,2,4,4,12,1,3,6,2

DB4,4,6,2,4,4,6,2,4,4

DB12,4,6,2,4,4,6,2,4,4

DB6,2,4,4,12,4,6,2,4,4

DB6,2,4,4,6,2,4,4,12

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,36H;定时器0、方式3

OUTDX,AL

BEGIN:

MOVSI,OFFSETFREQ_LIST;装入频率表起始地址

MOVDI,OFFSETTIME_LIST;装入时间表起始地址

PLAY:

MOVDX,0FH;输入时钟为1.0416667MHz,1.0416667M=0FE502H

MOVAX,0E502H

DIVWORDPTR[SI];取出频率值计算计数初值,0F4240H/输出频率

MOVDX,MY8254_COUNT0

OUTDX,AL;装入计数初值

MOVAL,AH

OUTDX,AL

MOVDL,[DI];取出演奏相对时间,调用延时子程序

CALLDALLY

ADDSI,2

INCDI

CMPWORDPTR[SI],0;判断是否到曲末?

JEBEGIN

MOVAH,1;判断是否有按键按下?

INT16H

JZPLAY

QUIT:

MOVDX,MY8254_MODE;退出时设置8254为方式2,OUT0置0

MOVAL,10H

OUTDX,AL

MOVAX,4C00H;结束程序退出

INT21H

DALLYPROC;延时子程序

D0:

MOVCX,200H

D1:

MOVAX,0FFFFH

D2:

DECAX

JNZD2

LOOPD1

DECDL

JNZD0

RET

DALLYENDP

CODEENDS

ENDSTART

;T8254-1.asm

;8254计数应用实验

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

INTR_IVADDEQU01CCH;INTR对应的中断矢量地址

INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址

INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址

INTR_IMEQU0F7H;INTR对应的中断屏蔽字

PCI_INTCSREQU9438H;PCI卡中断控制寄存器地址

IOY0EQU9C00H

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

MY8254_COUNT0EQUIOY0+00H*4;8254计数器0端口地址

MY8254_COUNT1EQUIOY0+01H*4;8254计数器1端口地址

MY8254_COUNT2EQUIOY0+02H*4;8254计数器2端口地址

MY8254_MODEEQUIOY0+03H*4;8254控制寄存器端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

CS_BAKDW?

;保存INTR原中断处理程序入口段地址的变量

IP_BAKDW?

;保存INTR原中断处理程序入口偏移地址的变量

IM_BAKDB?

;保存INTR原中断屏蔽字的变量

STR1DB'COUNT:

$';显示的字符串

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

CLI

MOVDX,PCI_INTCSR

SUBDX,19H

INAL,DX

MOVDX,PCI_INTCSR;初始化PCI卡中断控制寄存器

MOVAX,1F00H;向PCI_INTCSR中写入003F1F00H

OUTDX,AX

ADDDX,2

MOVAX,003FH

OUTDX,AX

MOVAX,0000H;替换INTR的中断矢量

MOVES,AX

MOVDI,INTR_IVADD

MOVAX,ES:

[DI]

MOVIP_BAK,AX;保存INTR原中断处理程序入口偏移地址

MOVAX,OFFSETMYISR

MOVES:

[DI],AX;设置当前中断处理程序入口偏移地址

ADDDI,2

MOVAX,ES:

[DI]

MOVCS_BAK,AX;保存INTR原中断处理程序入口段地址

MOVAX,SEGMYISR

MOVES:

[DI],AX;设置当前中断处理程序入口段地址

MOVDX,INTR_OCW1;设置中断屏蔽寄存器,打开INTR的屏蔽位

INAL,DX

MOVIM_BAK,AL;保存INTR原中断屏蔽字

ANDAL,INTR_IM

OUTDX,AL

STI

MOVDX,OFFSETSTR1;显示字符串

MOVAH,9

INT21H

MOVDX,MY8254_MODE;初始化8254工作方式

MOVAL,10H;计数器0,方式0

OUTDX,AL

MOVDX,MY8254_COUNT0;装入计数初值

MOVAL,4

OUTDX,AL

WAIT1:

MOVAH,1;判断是否有按键按下

INT16H

JZWAIT1;无按键则跳回继续等待,有则退出

QUIT:

CLI

MOVDX,PCI_INTCSR;恢复PCI卡中断控制寄存器

MOVAX,0000H

OUTDX,AX

MOVAX,0000H;恢复INTR原中断矢量

MOVES,AX

MOVDI,INTR_IVADD

MOVAX,IP_BAK;恢复INTR原中断处理程序入口偏移地址

MOVES:

[DI],AX

ADDDI,2

MOVAX,CS_BAK;恢复INTR原中断处理程序入口段地址

MOVES:

[DI],AX

MOVDX,INTR_OCW1;恢复INTR原中断屏蔽寄存器的屏蔽字

MOVAL,IM_BAK

OUTDX,AL

STI

MOVAX,4C00H;返回到DOS

INT21H

MYISRPROCNEAR;中断处理程序MYISR

MOVAL,35H

MOVAH,0EH

INT10H

MOVAL,20H

INT10H

MOVDX,MY8254_COUNT0;重装计数初值

MOVAL,4

OUTDX,AL

OVER:

MOVDX,PCI_INTCSR;清PCI卡中断控制寄存器标志位

SUBDX,19H

INAL,DX

MOVDX,PCI_INTCSR

ADDDX,2

MOVAX,003FH

OUTDX,AX

MOVDX,INTR_OCW2;向PC机内部8259发送中断结束命令

MOVAL,20H

OUTDX,AL

MOVAL,20H

OUT20H,AL

IRET

MYISRENDP

CODEENDS

ENDSTART

;T8254-2.asm

;8254定时应用实验

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

INTR_IVADDEQU01CCH;INTR对应的中断矢量地址

INTR_OCW1EQU0A1H;INTR对应PC机内部8259的OCW1地址

INTR_OCW2EQU0A0H;INTR对应PC机内部8259的OCW2地址

INTR_IMEQU0F7H;INTR对应的中断屏蔽字

PCI_INTCSREQU9438H;PCI卡中断控制寄存器地址

IOY0EQU9C00H

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

MY8254_COUNT0EQUIOY0+00H*4;8254计数器0端口地址

MY8254_COUNT1EQUIOY0+01H*4;8254计数器1端口地址

MY8254_COUNT2EQUIOY0+02H*4;8254计数器2端口地址

MY8254_MODEEQUIOY0+03H*4;8254控制寄存器端口地址

STACK1SEGMENTSTACK

DW256DUP(?

STACK1ENDS

DATASEGMENT

CS_BAKDW?

;保存INTR原中断处理程序入口段地址的变量

IP_BAKDW?

;保存INTR原中断处理程序入口偏移地址的变量

IM_BAKDB?

;保存INTR原中断屏蔽字的变量

SECDW0;秒计时变量

COUNTDB0

DATAENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

CLI

MOVDX,PCI_INTCSR

SUBDX,19H

INAL,DX

MOVDX,PCI_INTCSR;初始化PCI卡中断控制寄存器

MOVAX,1F00H;向PCI_INTCSR中写入003F1F00H

OUTDX,AX

ADDDX,2

MOVAX,003FH

OUTDX,AX

MOVAX,0000H;替换INTR的中断矢量

MOVES,AX

MOVDI,INTR_IVADD

MOVAX,ES:

[DI]

MOVIP_BAK,AX;保存INTR原中断处

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1