微机实验报告.docx

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

微机实验报告.docx

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

微机实验报告.docx

微机实验报告

 

 

《微机原理与接口》实验报告

 

姓名:

李泳志学号:

08211091

指导教师:

周永华

时间:

2010/12/19

 

实验一I/O地址译码与交通灯控制实验

一、实验目的

1、掌握并行接口8253的基本原理

2、掌握8253的编程方法,实现十字路口交通灯的模拟控制,进一步掌握对并行接口的使用。

二、实验内容

如图所示,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。

编程使六个灯按交通变化规律燃灭。

 

三、编程分析

1、8255地址分析:

控制寄存器地址:

0C40BH

A口地址:

0C408H

C口地址:

0C40AH

2、十字路口交通灯的变化规律要求

(1)南北路口的绿灯、东西路口的红灯同时亮三秒;

(2)南北路口的黄灯闪烁三次,同时东西路口的红灯继续亮;

(3)南北路口的红灯、东西路口的绿灯同时亮三秒;

(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁三次;

(5)转

(1)重复。

3、C口置数分析

由于发光二极管是共阴极相连,所以若要其发亮应给高电平;黄灯闪烁是让其不断交替亮灭来实现;同时分析可知只要有绿灯亮,灯就会持续亮三秒,黄灯亮就会闪烁三次。

4、程序设计流程图

 

 

编写程序如下:

STACK1SEGMENTSTACK

DW100DUP(?

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK1

START:

MOVDX,0C40BH

MOVAL,10000000B;设置C口输出,工作方式为0

OUTDX,AL

STEP1:

MOVDX,0C40AH

MOVAL,10000001B;送C口值,南北红,东西绿

OUTDX,AL

CALLLONGW;长延时

MOVBX,03H

STEP2:

MOVAL,10000010B;送C口值,南北红,东西黄

OUTDX,AL

CALLSHORTW;短延时,黄灯闪烁

MOVAL,10000000B

OUTDX,AL

CALLSHORTW

DECBX

JNZSTEP2

STEP3:

MOVAL,00100100B;送C口值,南北绿,东西红

OUTDX,AL

CALLLONGW;长延时

MOVBX,03H

STEP4:

MOVAL,01000100B;送C口值,南北黄,东西红

OUTDX,AL

CALLSHORTW;短延时,黄灯闪烁

MOVAL,00000100B

OUTDX,AL

CALLSHORTW

DECBX

JNZSTEP4

LAST:

MOVDL,0FFH;键盘有输入就终止,否则循环

MOVAH,06H

INT21H

JZSTEP1

MOVAH,4CH;返回操作系统

INT21H

LONGWPROC;长延时子程序

PUSHCX

PUSHAX

MOVCX,0FFFFH

OUT1:

MOVAX,0FFFFH

INTER1:

DECAX

JNZINTER1

LOOPOUT1

POPAX

POPCX

RET

LONGWENDP

SHORTWPROC;短延时子程序

PUSHCX

PUSHAX

MOVCX,0FFFH

OUT2:

MOVAX,0FFFFH

INTER2:

DECAX

JNZINTER2

LOOPOUT2

POPAX

POPCX

RET

SHORTWENDP

CODEENDS

ENDSTART

7、实验中遇到的问题,解决方法及心得体会

最开始灯的闪速时间过短,导致我们以为三个灯一直在亮,后来把延时改了,才出来效果。

 

实验二可编程定时器/计数器(8253)

一、实验目的

1、掌握并行接口8253的基本工作原理;

2、掌握8253的编程方法。

二、实验内容

1、按图虚线连接电路,将计数器0设置为工作方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0遍高电平)。

2、按图连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1Hz)。

三、编程分析

1、8253控制寄存器地址:

0C403H

计数器0地址:

0C400H

计数器1地址:

0C401H

CLK0连接时钟:

1MHz。

2、程序参考流程图

四、汇编语言程序

DATASEGMENT

COUNTDB08H;设置计数初值

DATAENDS

STACK1SEGMENTSTACK

DB100DUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVDX,0C403H;控制端口地址C403H

MOVAL,00010000B;设置计数器0的计数方式为0

OUTDX,AL

MOVDX,0C400H;计数器0端口地址C400H

MOVAL,COUNT;送计数初值

OUTDX,AL

JISHU:

MOVDX,0C400H

INAL,DX;读计数器0当前计数值

CMPAL,09H;将二进制数转变为ASCII码

JLEASCII;当前计数值为0-9时加30H变成ASCII码

ADDAL,07H

ASCII:

ADDAL,30H;当前计数值为A-F时加37H变成ASCII码

MOVDL,AL

MOVAH,02H

INT21H;调用02号DOS功能显示计数值

MOVDL,0DH;每显示一个计数值回车刷新一次

MOVAH,02H

INT21H

MOVDL,0FFH

MOVAH,06H

INT21H;调用06号DOS功能判断是否有字符输入即是否按键

JZJISHU;键盘有输入就返回DOS操作系统,否则循环

MOVAH,4CH

INT21H;返回操作系统

CODEENDS

ENDSTART

(2)DATASEGMENT

DATAENDS

STACK1SEGMENTSTACK

DB100DUP(0)

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

MOVDX,0C403H

MOVAL,00111110B;设定计数器0为工作方式3、二进制

OUTDX,AL

MOVDX,0C400H

MOVAX,1000;向计数器0写入计数初值1000

OUTDX,AL;先送低字节

MOVAL,AH

OUTDX,AL;后送高字节

MOVDX,0C403H

MOVAL,01110110B;设定计数器1为工作方式3、二进制

OUTDX,AL

MOVDX,0C401H

MOVAX,1000;向计数器1写入计数初值1000

OUTDX,AL;先送低字节

MOVAL,AH

OUTDX,AL;后送高字节

CODEENDS

ENDSTART

五、实验现象

实验1,用手动逐个输入单脉冲,在屏幕上从计数器初值开始显示,此时逻辑笔显示为低电平,单脉冲每输入一个,计数器值将会减,当计数器值减到0时,逻辑笔显示为高电平,红灯亮。

实验2,红灯绿灯交替变化。

六、实验感想

这次实验调试时间不长,实验过程比较顺利,但是一定要在对计数器赋初值时要准确赋值。

 

实验三中断

一、实验目的

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

2、学会编写中断服务程序

二、实验原理与内容

1、实验原理

PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理,中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。

IBMPC/XT机内有一片8259中断控制器对外可以提供8个中断源,如表6-1所示:

表6-1中断源

中断源

中断类型号

中断功能

IRQ0

08H

时钟

IRQ1

09H

键盘

IRQ2

0AH

保留

IRQ3

0BH

串行口2

IRQ4

0CH

串行口1

IRQ5

0DH

硬盘

IRQ6

0EH

软盘

IRQ7

0FH

并行打印机

8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为边沿触发、普通结束方式,对于IBMPC/AT及80286以上微机,系统又扩展了一片8259中断控制器,主片的IRQ2用于两片8259之间级连,对外可以提供16个中断源,如表6-2所示。

表6-2中断源

中断源

中断类型号

中断功能

IRQ8

070H

实时时钟

IRQ9

071H

用户中断

IRQ10

072H

保留

IRQ11

073H

保留

IRQ12

074H

保留

IRQ13

075H

协处理器

IRQ14

076H

硬盘

IRQ15

077H

保留

PCI总线中的中断线只有四根:

INTA#,INTB#,INTC#,INTD#。

它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。

如图6-1所示,虚线为实验中需要连的线。

图6-1实验电路图

2、实验内容

实验电路如图6-1所示直接用手动产生单脉冲作为中断请求信号,只需连接一根导线,要求每按一次开关产生一次中断,在屏幕上显示一次“TPCpcicardInterrupt”,中断10次后程序退出。

三、编程分析

1、由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。

2、由于TPC卡使用PCI总线,所以分配的中断号在每台微机可能都不同,编程时需要了解当前的微机使用哪个中断号并进行设置。

获取方法是在纯DOS环境中,运行一个读PCI配置空间的程序“PORTR.EXE”,该程序能够获得本机TPC板卡或所有PCI板卡的硬件资源,如IO、内存、中断占用情况。

然后根据获得的中断请求号码来修改程序中的中断向量、中断掩码的参数,并重新编译链接后即可。

图6-2PCI卡的结构

3、由于TPC卡使用9054芯片连接微机,如图6-2所示,9054通过中断控制/状态寄存器(INTCSR)激活/禁用中断源,所以在编程时,使用微机中断前需要使用9054的中断功能,所以要先对中断控制/状态寄存器(INTCSR)设置,代码如下:

movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,使能中断

inax,dx

orax,0900h

outdx,ax

其中ioport_cent是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看汇编程序使用方法的介绍。

中断使能寄存器(INTCSR)的偏移地址是+68H,设置含义如表6-3所示:

表6-3

BITS

功能

8

1:

使能产生PCI中断

0:

禁止产生PCI中断

11

1:

使能LOCAL端输入的中断送到PCI端

0:

禁止LOCAL端输入的中断送到PCI端

其它位为零即可,更多内容参考9054芯片数据手册

程序退出前还要关闭9054的中断,代码如下:

movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,关闭中断

inax,dx

andax,0f7ffh

outdx,ax

4、PC机中断控制器8259的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令:

MOVAL,20H

OUT20H,AL

中断结束返回DOS时应将IMR对应位置1,以关闭中断。

 

四、参考流程图

 

四、程序清单

程序一

DATASEGMENT

STR1DB'PRESSDMCTOINTERRUPT10TIMESANDEXIT!

$'

STR2DB0DH,0AH,'TPCPCICARDINTERRUPT!

$'

IOPORT_CENTEQU0C000H

INT_VECEQU0BH

INT_CODEQU11110111B

DATAENDS

STACK1SEGMENTSTACK

DB64DUP(?

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,SS:

STACK1,DS:

DATA

START:

MOVAX,DATA

MOVDS,AX

CLI;关中断

MOVDX,IOPORT_CENT+68H;开TPC使能

INAX,DX

ORAX,0900H

OUTDX,AX

MOVAL,INT_VEC;保护原中断

MOVAH,35H

INT21H

PUSHBX

PUSHES

PUSHDS

MOVDX,OFFSETINT_1;设置新中断

MOVAX,SEGINT_1

MOVDS,AX

MOVAL,INT_VEC

MOVAH,25H

INT21H

POPDS

INAL,21H;设置掩码

PUSHAX

ANDAL,INT_COD

OUT21H,AL

MOVDX,OFFSETSTR1;显示提示信息

MOVAH,09H

INT21H

MOVCX,10;设置计数器

STI;开中断

FLAG1:

CMPCX,0;计数中断

HLT

JNZFLAG1

FLAG2:

POPAX;恢复原中断向量

OUT21H,AL

POPDS

POPDX

MOVAL,INT_VEC

MOVAH,25H

INT21H

MOVDX,IOPORT_CENT+68H;关TPC使能

INAX,DX

ANDAX,0F7FFH

OUTDX,AX

MOVAH,4CH

INT21H

INT_1PROCFAR;中断程序

PUSHDX

PUSHAX

CLI

DECCX

MOVDX,OFFSETSTR2

MOVAH,09H

INT21H

MOVAL,00100000B

OUT20H,AL

POPAX

POPDX

STI

IRET

INT_1ENDP

CODEENDS

ENDSTART

程序二

;接1根线,单脉冲--IRQ,输入一个脉冲中断一次,输入10次结束.

DATASEGMENT

INT_VECTEQU0BH;中断0-7的向量为08h-0fh,0BH是IRQ3的中断类型号

IOPORT_CENTEQU0C000H;tpc卡中9054芯片的io地址

CSREGDW?

IPREGDW?

;旧中断向量保存空间

COUNTDB0AH;中断计数10次

MESS1DB'PressDMCtointerrupt10timesandexit!

',0DH,0AH,'$'

MESS2DB'TPCpcicardInterrupt!

',0DH,0AH,'$'

DATAENDS

STACK1SEGMENTSTACK

DB100DUP(?

STACK1ENDS

CODESEGMENT

ASSUMECS:

CODE,DS:

DATA,SS:

STACK1

START:

MOVAX,DATA

MOVDS,AX

CLI;关中断

MOVDX,IOPORT_CENT+68H;设置tpc卡中9054芯片io口,使能中断

INAX,DX

ORAX,0900H

OUTDX,AX

MOVAL,INT_VECT;调用35H功能号获取中断向量

MOVAH,35H

INT21H

MOVAX,ES;保存原中断向量

MOVCSREG,AX

MOVIPREG,BX

MOVAX,SEGINT_PROC;设置新中断向量

MOVDS,AX;中断服务程序入口段基址送DS

MOVDX,OFFSETINT_PROC;中断服务程序入口偏移地址送DX

MOVAL,INT_VECT;IRQ3的中断类型号0BH送AL

MOVAH,25H;25H功能调用设置中断向量

INT21H

;设置中断掩码

INAL,21H;读IMR

ANDAL,11110111B;允许IRQ3请求中断

OUT21H,AL;写中断屏蔽字OCW1

MOVAX,SEGMESS1

MOVDS,AX

MOVDX,OFFSETMESS1;显示输入提示信息

MOVAH,09H

INT21H

WAIT1:

STI;开中断

MOVDL,0FFH

MOVAH,06H

INT21H;调用06号DOS功能判断是否有字符输入即是否按键

JNZEXIT;键盘有输入就返回DOS操作系统

CMPCOUNT,0;判断10次中断是否结束

JNZWAIT1;未结束,等待

MOVDX,IPREG;恢复原中断向量

MOVAX,CSREG

MOVDS,AX

MOVAL,INT_VECT

MOVAH,25H

INT21H

MOVDX,IOPORT_CENT+68H;设置tpc卡中9054芯片io口,关闭中断

INAX,DX

ANDAX,0F7FFH

OUTDX,AX

EXIT:

MOVAH,4CH;返回DOS

INT21H

;中断服务程序

INT_PROCPROCNEAR

PUSHDS;保护现场

PUSHAX

PUSHDX

STI;开中断,允许中断嵌套

MOVAX,SEGMESS2

MOVDS,AX

MOVDX,OFFSETMESS2;显示'TPCpcicardInterrupt!

'

MOVAH,09H

INT21H

DECCOUNT;计数值减一,控制10次循环

JNZNEXT

INAL,21H;读IMR

ORAL,00001000B;写OCW1,屏蔽IRQ3的请求

OUT21H,AL

NEXT:

CLI;关中断

MOVAL,20H;写OCW2,送中断结束命令,普通EOI方式

OUT20H,AL

POPDX;恢复现场

POPAX

POPDS

IRET

INT_PROCENDP

CODEENDS

ENDSTART

五、实验现象

运行程序后,显示输入提示信息:

PressDMCtointerrupt10timesandexit!

然后每按一次脉冲,显示一次:

TPCpcicardInterrupt!

按10次后返回DOS。

中途按下任意键也可以结束程序,返回DOS

六、实验体会和感想

本次实验是在先在DOS环境下查出实验板子的端口地址,再用于实际的程序中,由于在DOS环境下操作不是很熟练某索要·所以浪费了比较多的时间。

 

实验四模/数转换实验(0809)

一、实验目的

了解模/数转换的基本原理,掌握ADC0809的使用方法。

二、实验原理及内容

1、实验电路原理图如下。

通过实验台左下角电位器RW1输出0~5V直流电压送入ADC0809通道0(IN0),利用debug的输出命令启动A/D转换器,输入命令读取转换结果,验证输入电压与转换后数字的关系。

实验电路图如下:

 

2、编程采集IN0输入的电压,在屏幕上显示出转换后的数据(用16进制数)。

三、实验提示

1、0809地址:

(原地址(ISA)动态分配地址)

IN0口:

298H0C418H

IN1口:

299H0C419H

2、利用debug的输出命令启动A/D转换器,输入命令读取转换结果。

Debug

-OC4180;启动IN0开始转换

-IC418;读转换结果

-D8;转换后的数字量

3、IN0单极性输入电压与转换后数字的关系为:

N=Ui/(Uref/256)

其中Ui为输入电压,Uref为参考电压,这里参考电压为PC机的+5V电压。

四、汇编语言程序

CODESEGMENT

ASSUMECS:

CODE

START:

MOVAL,0

MOVDX,0C418H

OUTDX,AL;启动

MOVDX,0FFFH

MOVCX,0

DELATE:

LOOPDELATE

DECDX

JNZDELATE;延时

WP:

MOVDX,0C418H

INAL,DX;读IN0口

MOVDL,AL

MOVCL,4

SHRDL,CL;右移4位

CMPDL,9

JGBIG

ADDDL,30H;ASCII显示0~9,并显示

MOVAH,06H

INT21H

JMPNEXT

BIG:

ADDDL,37H;ASCII码A~F,并显示

MOVAH,06H

INT21H

JMPNEXT

NEXT:

MOVDX,0C418H;读IN0口

INAL,DX

MOVDL,AL

ANDDL,00001111B;屏蔽高4位

CMPDL,9

JGBIGS

ADDDL,30H;ASCII显示0~9,并显示

MOVAH,06H

INT21H

JMPJUDGE

BIGS:

ADDDL,37H;ASCII码A~F,并显示

MOVAH,06H

INT21H

JMPJUDGE

JUDGE:

MOVDL,0DH

INT21H

MOVDL,0FFH

MOVAH,06H

INT21H

JZSTART;有键按下返回DOS

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

五、实验现象

转动电位器RW1,计算机屏幕上显示连续的两位十六进制码,从00H~FFH变化。

六、感想体会

此次实验比较简单,帮助我们了解A/D、D/A转换的程序过程,程序中要将延时设置

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

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

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

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