西电微机原理实验报告.docx

上传人:b****8 文档编号:10584054 上传时间:2023-02-21 格式:DOCX 页数:22 大小:208.69KB
下载 相关 举报
西电微机原理实验报告.docx_第1页
第1页 / 共22页
西电微机原理实验报告.docx_第2页
第2页 / 共22页
西电微机原理实验报告.docx_第3页
第3页 / 共22页
西电微机原理实验报告.docx_第4页
第4页 / 共22页
西电微机原理实验报告.docx_第5页
第5页 / 共22页
点击查看更多>>
下载资源
资源描述

西电微机原理实验报告.docx

《西电微机原理实验报告.docx》由会员分享,可在线阅读,更多相关《西电微机原理实验报告.docx(22页珍藏版)》请在冰豆网上搜索。

西电微机原理实验报告.docx

西电微机原理实验报告

实验一8259中断实验

一、实验目的

1.掌握PC机中断处理系统的基本原理。

2.掌握外部扩展中断源的设计方法。

3.学会编写中断服务程序。

二、实验原理

PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。

中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。

三、实验内容

实验要求实现8259控制器的IR1、IR3两路中断都可以通过IRQ向PC机发起中断请求,用SP1、SP2单次脉冲模拟两个中断源。

IR1中断时,在它的中断服务程序中编程显示“IR1OKANDEXIT!

”;IR3中断时,在它的中断服务程序中编程显示“IR3OKANDEXIT!

”。

采用查询方式完成。

图1-1扩展中断电路

四、参考流程图

 

五、实验程序

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

;*实验台上8259中断*;

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

datasegment

ioportequ0ff00h-0280h

MY8259_ICW1EQUioport+280H;实验系统中8259的ICW1端口地址

MY8259_ICW2EQUioport+281H;实验系统中8259的ICW2端口地址

MY8259_ICW3EQUioport+281H;实验系统中8259的ICW3端口地址

MY8259_ICW4EQUioport+281H;实验系统中8259的ICW4端口地址

MY8259_OCW1EQUioport+281H;实验系统中8259的OCW1端口地址

MY8259_OCW2EQUioport+280H;实验系统中8259的OCW2端口地址

MY8259_OCW3EQUioport+280H;实验系统中8259的OCW3端口地址

io8255aequioport+288h

io8255bequioport+289h

io8255cequioport+28ah

io8255equioport+28bh

msg3db0dh,0ah,'IR1okandexit!

',0dh,0ah,'$'

msg4db0dh,0ah,'IR3okandexit!

',0dh,0ah,'$'

dataends

stackssegment

db100dup(?

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks,es:

data

start:

movax,data

movds,ax

moves,ax

movax,stacks

movss,ax

MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1

MOVAL,13H;边沿触发、单片8259、需要ICW4

OUTDX,AL

MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2

MOVAL,08H

OUTDX,AL

MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4

MOVAL,01H;非自动结束EOI

OUTDX,AL

MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1

MOVAL,0F5H;打开IR1和IR3的屏蔽位

OUTDX,AL

QUERY:

MOVDX,MY8259_OCW3;向8259的OCW3发送查询命令

MOVAL,0CH

OUTDX,AL

NOP

NOP

NOP

MOVDX,MY8259_OCW3

INAL,DX;读出查询字

TESTAL,80H;判断中断是否已响应

JZQUERY;没有响应则继续查询

ANDAL,07H

CMPAL,01H

JEIR1ISR;若为IR1请求,跳到IR1处理程序

CMPAL,03H

JEIR3ISR;若为IR3请求,跳到IR1处理程序

JMPEOI

IR1ISR:

movdx,offsetmsg3;IR1处理,显示字符串'IR1okandexit'

movah,09h

int21h

movdx,io8255;设8255为B口输入,C口输出

moval,93h

outdx,al

inout:

movdx,io8255b;从B口输入一数据

inal,dx

movdx,io8255c;从C口输出刚才自B口

outdx,al;所输入的数据

movdx,io8255b

xordx,dx

inal,dx

movdx,io8255c;从C口输出刚才自B口

outdx,al

movdl,0ffh;判断是否有按键

movah,06h

int21h

jzinout;若无,则继续自C口输入,A口输出

movah,4ch;否则返回

int21h

JMPQUERY

JMPEOI

 

IR3ISR:

movdx,offsetmsg4;IR1处理,显示字符串'IR3okandexit'

movah,09h

int21h

movdx,io8255;设8255为C口输入,A口输出

moval,93h

outdx,al

inout1:

movdx,io8255b;从C口输入一数据

inal,dx

movdx,io8255c;从A口输出刚才自C口

outdx,al;所输入的数据

movdx,io8255b

xordx,dx

inal,dx

movdx,io8255c;从C口输出刚才自B口

outdx,al

movdl,0ffh;判断是否有按键

movah,06h

int21h

jzinout1;若无,则继续自C口输入,A口输出

movah,4ch;否则返回

int21h

JMPQUERY

JMPEOI

EOI:

MOVDX,MY8259_OCW2;向实验系统中8259发送中断结束命令

MOVAL,20H

OUTDX,AL

codeends

endstart

六、实验结果

运行程序之后,通过对IR1,IR3的按钮的交替控制,使得屏幕上显示固定的语句,表示已经试验成功。

7、实验中遇到的问题及解决方法

遇到的问题:

1、程序调整好了之后,按下中断按钮之后没有出现想要的结果,屏幕上没有出现该出现的语句。

2、程序不能打开,不能运行。

解决的方法:

检查线路之后,发现有接线接错,通过对程序中的小的修改,最终成功的解决问题。

实验二8255及综合

一、实验目的

掌握8255方式0的工作原理及使用方法。

二、实验原理

实验电路如图,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。

图2-1

三、实验内容

1.1)编程从8255C口输入数据,再从A口输出;

2)编程从8255A口输入数据,再从B口输出;

3)编程从8255B口输入数据,再从A口输出。

2.将8255与8259结合起来。

当程序响应IR1中断时候,发光二极管的高四位灭(或亮),同时屏幕显示“IR1okandexit”,当程序响应IR3中断时候,发光二极管的低四位灭(或亮),同时屏幕显示“IR13okandexit”。

四、实验流程图

五、实验程序

1、

1)C口入,A口出

ioportequ0C400H-0280h

io8255aequioport+288h

io8255bequioport+28bh

io8255cequioport+28ah

codesegment

assumecs:

code

start:

movdx,io8255b;设8255为C口输入,A口输出

moval,89h

outdx,al

inout:

movdx,io8255c;从C口输入一数据

inal,dx

movdx,io8255a;从A口输出刚才自C口

outdx,al;所输入的数据

movdl,0ffh;判断是否有按键

movah,06h

int21h

jzinout;若无,则继续自C口输入,A口输出

movah,4ch;否则返回DOS

int21h

codeends

endstart

2)A口入,B口出

ioportequ0C400H-0280h

io8255aequioport+288h

io8255bequioport+28bh

io8255cequioport+28ah

codesegment

assumecs:

code

start:

movdx,io8255b;设8255为C口输入,A口输出

moval,99h

outdx,al

inout:

movdx,io8255a;从C口输入一数据

inal,dx

movdx,io8255b;从A口输出刚才自C口

outdx,al;所输入的数据

movdl,0ffh;判断是否有按键

movah,06h

int21h

jzinout;若无,则继续自C口输入,A口输出

movah,4ch;否则返回DOS

int21h

codeends

endstart

3)B入,C出

ioportequ0C400H-0280h

io8255aequioport+288h

io8255bequioport+28bh

io8255cequioport+28ah

codesegment

assumecs:

code

start:

movdx,io8255b;设8255为C口输入,A口输出

moval,82h

outdx,al

inout:

movdx,io8255b;从C口输入一数据

inal,dx

movdx,io8255c;从A口输出刚才自C口

outdx,al;所输入的数据

movdl,0ffh;判断是否有按键

movah,06h

int21h

jzinout;若无,则继续自C口输入,A口输出

movah,4ch;否则返回DOS

int21h

codeends

endstart

2、8255与8259的结合程序

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

;*实验台上8259中断*;

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

datasegment

ioportequ0ff00h-0280h

io8255aequioport+288h;A口口地址

io8255bequioport+289h;B口

io8255cequioport+28ah;C口

io8255equioport+28bh;控制寄存器口地址

MY8259_ICW1EQUioport+280H;实验系统中8259的ICW1端口地址

MY8259_ICW2EQUioport+281H;实验系统中8259的ICW2端口地址

MY8259_ICW3EQUioport+281H;实验系统中8259的ICW3端口地址

MY8259_ICW4EQUioport+281H;实验系统中8259的ICW4端口地址

MY8259_OCW1EQUioport+281H;实验系统中8259的OCW1端口地址

MY8259_OCW2EQUioport+280H;实验系统中8259的OCW2端口地址

MY8259_OCW3EQUioport+280H;实验系统中8259的OCW3端口地址

csregdw?

ipregdw?

;旧中断向量保存空间

irq_timesdw00h;中断计数

msg1db0dh,0ah,'DVCCpcicardInterrupt',0dh,0ah,'$'

msg2db0dh,0ah,'Pressanykeytoexit!

',0dh,0ah,'$'

msg3db0dh,0ah,'IR1okandexit!

',0dh,0ah,'$'

msg4db0dh,0ah,'IR3okandexit!

',0dh,0ah,'$'

dataends

stackssegment

db100dup(?

stacksends

codesegment

assumecs:

code,ds:

data,ss:

stacks,es:

data

start:

movax,data

movds,ax

moves,ax

movax,stacks

movss,ax

movdx,io8255;设8255为A口输入,C口输出

moval,80h

outdx,al

movdx,io8255c

moval,00h;从C口输出刚才自A口

outdx,al

MOVDX,MY8259_ICW1;初始化实验系统中8259的ICW1

MOVAL,13H;边沿触发、单片8259、需要ICW4

OUTDX,AL

MOVDX,MY8259_ICW2;初始化实验系统中8259的ICW2

MOVAL,08H

OUTDX,AL

MOVDX,MY8259_ICW4;初始化实验系统中8259的ICW4

MOVAL,01H;非自动结束EOI

OUTDX,AL

MOVDX,MY8259_OCW1;初始化实验系统中8259的OCW1

MOVAL,0F5H;打开IR1和IR3的屏蔽位

OUTDX,AL

QUERY:

MOVDX,MY8259_OCW3;向8259的OCW3发送查询命令

MOVAL,0CH

OUTDX,AL

NOP

NOP

NOP

MOVDX,MY8259_OCW3

INAL,DX;读出查询字

TESTAL,80H;判断中断是否已响应

JZQUERY;没有响应则继续查询

ANDAL,07H

CMPAL,01H

JEIR1ISR;若为IR1请求,跳到IR1处理程序

CMPAL,03H

JEIR3ISR;若为IR3请求,跳到IR3处理程序

JMPEOI

IR1ISR:

movdx,offsetmsg3;IR1处理,显示字符串'IR1okandexit'

movah,09h

int21h

movdx,io8255c;从C口输出刚才自A口

moval,0f0h

outdx,al

JMPEOI

 

IR3ISR:

movdx,offsetmsg4;IR3处理,显示字符串'IR3okandexit'

movah,09h

int21h

movdx,io8255c

moval,0fh;从C口输出刚才自A口

outdx,al

JMPEOI

EOI:

MOVDX,MY8259_OCW2;向实验系统中8259发送中断结束命令

MOVAL,20H

OUTDX,AL

JMPQUERY

codeends

endstart

6、实验结果

1、正确接线之后,通过设置初始值进行初始化,最后能实现用开关来控制小灯的亮灭,不同的初始参数和接线方法能够出现不同的结果。

2、8255与8259的结合程序

程序运行完成之后,小灯能够在中断的控制下四个一组交替亮灭,通过按下IR1,IR3按钮来进行控制。

七、实验中遇到的问题及解决方法

遇到的问题:

1、程序调整好了之后,有若干的小灯不能被开关控制,只有一部分小灯能够被控制。

2、程序不能打开,不能运行。

解决的方法:

检查线路之后,发现有接线接错,通过纠正和对程序中的小的修改(对入口参数的修改),最终成功的解决问题。

 

实验三8253

一、实验目的

掌握8253的基本工作原理和编程方法。

二、实验原理及内容

1.图3-1是本实验程序的接线图,将计数器0设置为方式0,计数器初值为N(N≤0FH,本程序中为0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用L0或逻辑笔观察OUT0电平变化,初始时OUT0为高电平,当输入N个脉冲时,OUT0变为低电平,当输入N+1个脉冲后OUT0变高电平)。

2.按图3-2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用电平指示灯L0或逻辑笔观察OUT1输出电平的变化,要求输出频率1HZ的分频信号。

图3-1

图3-2

三、参考流程图

实验内容一的框图如图3-3所示,实验内容二2的框图如图3-4所示。

 

 

图3-3图3-4

四、参考程序

1、

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

;*8253方式0计数器实验*;

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

ioportequ0ff00h-0280h

io8253kequioport+283h

io8253aequioport+280h

codesegment

assumecs:

code

start:

moval,00010000B;设置8253通道0为工作方式2,二进制计数

movdx,io8253k

outdx,al

movdx,io8253a;送计数初值为08H

moval,08h

outdx,al

lll:

inal,dx;读计数初值

calldisp;调显示子程序

pushdx

movah,06h

movdl,0ffh

int21h

popdx

jzlll

movah,4ch;退出

int21h

dispprocnear;显示子程序

pushdx

andal,0fh;首先取低四位

movdl,al

cmpdl,9;判断是否<=9

jlenum;若是则为'0'-'9',ASCII码加30H

adddl,7;否则为'A'-'F',ASCII码加37H

num:

adddl,30h

movah,02h;显示

int21h

movdl,0dh;加回车符

int21h

movdl,0ah;加换行符

int21h

popdx

ret;子程序返回

dispendp

codeends

endstart

2、

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

;*8253分频*

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

ioportequ0ff00h-0280h

io8253aequioport+280h

io8253bequioport+281h

io8253kequioport+283h

codesegment

assumecs:

code

start:

movdx,io8253k;向8253写控制字

moval,36h;使0通道为工作方式3

outdx,al

movax,1000;写入循环计数初值1000

movdx,io8253a

outdx,al;先写入低字节

moval,ah

outdx,al;后写入高字节

movdx,io8253k

moval,76h;设8253通道1工作方式2

outdx,al

movax,1000;写入循环计数初值1000

movdx,io8253b

outdx,al;先写低字节

moval,ah

outdx,al;后写高字节

movah,4ch;程序退出

int21h

codeends

endstart

5、实验结果

实验一:

设置好初始值N之后,按下控制按钮N+1次之后,发现小灯由暗变亮。

实验二:

设置好初始值,运行程序之后,小灯按照事先设置好的频率闪烁

6、实验中遇到的问题及解决方法

实验中的问题:

实验一中,运行程序之后,按下控制按钮之后没有出现由暗变亮的结果,在设置不同的初始值之后,有一些能够成功的出现结果,另有一些不能出现结果;实验二中,没有出现闪烁的情况。

解决办法:

对实验一中的程序进行了小的修改,但是最终还是有这样的问题,最后老实说怀疑是病毒导致的结果,没有搞得很清楚。

实验二中对设置的频率进行了调整,最后实现了实验的现象

 

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

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

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

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