微机实验报告.docx

上传人:b****6 文档编号:8665786 上传时间:2023-02-01 格式:DOCX 页数:16 大小:56.60KB
下载 相关 举报
微机实验报告.docx_第1页
第1页 / 共16页
微机实验报告.docx_第2页
第2页 / 共16页
微机实验报告.docx_第3页
第3页 / 共16页
微机实验报告.docx_第4页
第4页 / 共16页
微机实验报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

微机实验报告.docx

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

微机实验报告.docx

微机实验报告

微机实验报告

04123104刘伟

实验一8259中断实验

一、实验目的

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

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

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

二、实验原理

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

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

三、实验内容

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

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

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

”。

采用查询方式完成。

图1-1扩展中断电路

四、实验步骤

1、连接线路

在实验板上将8259的D0~D7跟PC/XT的D0~D7连接,将8259CS信号线与Y1连接,RD、WR分别与IOR、IOW连接,中断源SP1、SP2与8259的IR1、IR3连接,同时将IR0~IR7接到LED灯的L0~L7上面。

2、编写程序

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

;*实验台上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端口地址

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:

;EnableLocalInterruptInput

movax,data

movds,ax

moves,ax

movax,stacks

movss,ax

movax,data

movds,ax

movdx,offsetmsg1

movah,09h

int21h

movdx,offsetmsg2

movah,09h

int21h

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;若为IR1请求,跳到IR1处理程序

JMPEOI

IR1ISR:

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

movah,09h

int21h

JMPEOI

IR3ISR:

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

movah,09h

int21h

EOI:

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

MOVAL,20H

OUTDX,AL

jmpstart

codeends

endstart

3、汇编、编译、连接及运行

五、实验程序

六、实验结果

当SP1脉冲中断源给一个脉冲时,屏幕上显示字符串'IR1okandexit';当SP2脉冲中断源给一个脉冲时,屏幕上显示字符串'IR1okandexit'。

这样每当给不同的中断信号,就会有不同的输出结果。

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

当发现某个中断源坏了或者不能用的时候,及时调整到另外一个上面进行尝试,得出是器件原因而并非程序原因。

实验二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、连接线路

8255的D0~D7跟PC/XT的D0~D7连接,同时8255的D0~D7跟PC/XT的D0~D7连接,RD、WR分别与IOR、IOW连接,中断源SP1、SP2与8259的IR1、IR3连接,8255的CS片选信号与PC/XT的Y1相连。

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

2、编写程序

3、汇编、编译、连接及运行

五、实验程序

1、B口逻辑开关输入入,C口输出到LED灯显示效果

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

;*实验台上8259中断*;

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

datasegment

ioportequ0ff00h-0280h

io8255aequioport+288h

io8255bequioport+289h

io8255cequioport+28ah

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端口地址

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:

;EnableLocalInterruptInput

movax,data

movds,ax

moves,ax

movax,stacks

movss,ax

movax,data

movds,ax

movdx,offsetmsg1

movah,09h

int21h

movdx,offsetmsg2

movah,09h

int21h

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;若为IR1请求,跳到IR1处理程序

JMPEOI

IR1ISR:

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

movah,09h

int21h

JMPEOI

IR3ISR:

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

movah,09h

int21h

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

moval,82h

outdx,al

inout:

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

inal,dx

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

outdx,al;所输入的数据

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

movah,06h

int21h

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

movah,4ch;否则返回

int21h

EOI:

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

MOVAL,20H

OUTDX,AL

jmpstart

codeends

endstart

2、8255与8259的结合程序

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

;*实验台上8259中断*;

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

datasegment

ioportequ0ff00h-0280h

io8255aequioport+288h

io8255bequioport+289h

io8255cequioport+28ah

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端口地址

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:

;EnableLocalInterruptInput

movax,data

movds,ax

moves,ax

movax,stacks

movss,ax

movax,data

movds,ax

movdx,offsetmsg1

movah,09h

int21h

movdx,offsetmsg2

movah,09h

int21h

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

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

moval,8bh

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;若为IR1请求,跳到IR1处理程序

JMPEOI

IR1ISR:

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

movah,09h

int21h

JMPEOI

IR3ISR:

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

movah,09h

int21h

moval,0f0h

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

outdx,al;所输入的数据

EOI:

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

MOVAL,20H

OUTDX,AL

jmpstart

codeends

endstart

6、实验结果

1)当程序运行时,可以通过控制逻辑开关控制LED灯的变化,因为逻辑开关是C口输入,所以当改变逻辑开关的选通或者截止的时候,LED灯显示亮或者灭。

完成程序要求。

2)理应实现:

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

因为自己做实验的IR1中断源有问题,所以这里程序只实现了当响应IR1中断时候,发光二极管的高四位灭(或亮),同时屏幕显示“IR1okandexit”。

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

实验三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

三、实验步骤

1、连接线路

图3-1连接:

在实验板上将8253的D0~D7跟PC/XT的D0~D7连接,将8253CS信号线与Y0连接,RD、WR分别与IOR、IOW连接,中断源SP1与8253的CLK0连接,同时将OUT0接到LED灯的L0上面。

图3-2:

在实验板上将8253的D0~D7跟PC/XT的D0~D7连接,将8253CS信号线与Y0连接,RD、WR分别与IOR、IOW连接,8253的CLK0接1MHZ的中断源,采用级联方式,将OUT0与CLK1连接,同时将OUT1输出接到LED灯的L0上面。

2、编写程序

3、汇编、编译、连接及运行

四、参考程序

1、

ioportequ0ff00H-0280h

io8253kequioport+283h

io8253aequioport+280h

codesegment

assumecs:

code

start:

moval,10h;设置8253通道0为工作方式0,二进制计数

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、

ioportequ0C400H-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工作方式3

outdx,al

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

movdx,io8253b

outdx,al;先写低字节

moval,ah

outdx,al;后写高字节

movah,4ch;程序退出

int21h

codeends

endstart

5、实验结果

图3-1结果:

手动逐个输入单脉冲,计数值在屏幕上显示,同时用L0或逻辑笔观察OUT0电平变化,初始时OUT0为高电平,当输入4个脉冲时,OUT0变为低电平,当输入5个脉冲后OUT0变高电平,如此循环。

图3-2结果:

采用级联方式,计数初值设为1000*1000,用电平指示灯L0或逻辑笔观察OUT1输出电平的变化,实验结果是每过一秒,LED灯的显示由亮到灭,由灭到亮,然后反复循环亮灭交替变化。

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

 

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

当前位置:首页 > 人文社科 > 视频讲堂

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

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