微机实验报告.docx
- 文档编号:17770830
- 上传时间:2023-08-03
- 格式:DOCX
- 页数:44
- 大小:596.53KB
微机实验报告.docx
《微机实验报告.docx》由会员分享,可在线阅读,更多相关《微机实验报告.docx(44页珍藏版)》请在冰点文库上搜索。
微机实验报告
微机原理与接口技术
实验报告
班级:
通信
姓名:
学号:
1
授课教师:
老师
实验一交通灯控制实验
1.实验目的
通过应用接口技术设计十字路口、复杂路口交通灯控制系统,学会应用“微机原理与接口技术”课程所学的X86汇编语言和接口技术掌握可编程并行接口芯片的硬件设计、软件编程,实现十字路口交通灯的模拟控制并思考计算机如何应用在各种控制系统中。
(1)掌握利用X86汇编语言技巧
(2)掌握X86微处理器与可编程并行接口芯片8255A硬件电路设计
(3)熟悉模拟交通灯控制的实现方法并思考如何应用在实际中。
2.实验内容
2.1基本功能
设计一个交通控制系统,该控制系统工作后,交通灯按照如下规律变化:
(1)南北路口的绿灯、东西路口的红灯同时亮3秒左右。
(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3)南北路口的红、东西路口的绿灯同时亮3秒。
(4)南北路口的红灯继续亮、同时东西路口的黄灯亮闪烁若干次。
(5)返回
(1)依次循环。
2.2扩展功能
(1)如遇到特殊情况,可拨动应急开关,使各项均为红灯,特殊车辆不受红灯
限制,使其顺利通过后拨动另一个开关,系统返回继续运行
(2)用LED应倒计时方式显示各路口灯亮时间
(3)对于多路口联网应该如何设计。
3.实验电路图
如下图,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律燃灭。
8255动态分配地址:
控制寄存器:
0EC0BH
A口地址:
0EC08H
C口地址:
0EC0AH
4.程序流程图
5.源程序
CODESEGMENT
ASSUMECS:
CODE
;**********************************工作状态控制字设置
START:
MOVDX,0EC0BH;写控制端口,地址0EC0BH
MOVAL,10010000B;C口方式0输出
OUTDX,AL
;**********************************南北路口绿灯亮,东西路口红灯亮
FIRST:
MOVDX,0EC0AH;写PC口,地址0EC0AH
MOVAL,00100100B;南北绿,东西红,PC口写00100100
OUTDX,AL
;------------------------------两层嵌套实现长延时
MOVCX,0;外层循环送入初值65536
MOVAX,2000H;内层循环送入初值2000H
DELAY1:
DECAX
JNZDELAY1
LOOPDELAY1
;**********************************南北路口黄灯闪烁,东西路口红灯亮
MOVBL,5;BL控制黄灯亮的次数5次
SECOND:
MOVDX,0EC0AH
MOVAL,01000100B
OUTDX,AL;南北黄,东西红
MOVCX,3000H
MOVAX,0100H
LI1:
DECAX
JNZLI1
LOOPLI1
MOVDX,0EC0AH;短延时
MOVAL,00000100B;南北路口黄灯先灭
OUTDX,AL
MOVCX,3000H
MOVAX,0100H
WEN1:
DECAX
JNZWEN1;短延时
LOOPWEN1
DECBL
JNZSECOND;南北路口黄灯再亮
;**********************************南北路口红灯亮,东西路口绿灯亮
THIRD:
MOVDX,0EC0AH;写入C口
MOVAL,10000001B
OUTDX,AL;南北红,东西绿
MOVCX,0;长延时
MOVAX,2000H
DELAY2:
DECAX
JNZDELAY2
LOOPDELAY2
MOVBL,4;控制黄灯亮的次数
FORTH:
MOVDX,0EC0AH;写入C口
MOVAL,10000010B
OUTDX,AL;南北红,东西黄
MOVCX,3000H
MOVAX,0100H
LI2:
DECAX
JNZLI2;短延时
LOOPLI2
;**********************************南北路口红灯亮,东西路口黄灯闪烁
MOVDX,0EC0AH
MOVAL,10000000B
OUTDX,AL;东西路口黄灯先灭
MOVCX,3000H
MOVAX,0100H
WEN2:
DECAX
JNZWEN2
LOOPWEN2
DECBL
JNZFORTH;东西路口黄灯再亮
MOVDL,0FFH
;**********************************检测是否有键按下,调用6号功能
MOVAH,06H
INT21H;执行键盘输入操作
JZFIRST
MOVAH,4CH
INT21H;返回操作系统
CODEENDS
ENDSTART
6.实验总结
这是我们第一次微机实验,对实验箱以及TPC-2003集成开发环境都比较陌生,幸好我们实验之前仔细研读了实验指导书上的要求,查阅资料,编写好程序。
实验过程还算比较顺利。
这个实验主要是用8255的定时功能来定时,然后使用JZ、JNZ来实现闪烁和红绿灯转换等功能,运用循环进行延时,实验中还使用了6号功能来实现显示的功能。
通过这次实验使我对8255的工作原理、定时功能有了进一步的了解,同时也对汇编的程序结构和调试方法更加熟悉。
也深深感谢老师和助教在实验过程中给予的指导,验收时助教提问也帮我们更深的认识到知识的重点难点所在,对我们微机理论知识的学习有很大的帮助。
实验二可编程定时器/计数器
1.实验目的
通过实验了解可编程定时器/计数器的本质是计数,学会再设计应用系统中如何用接口芯片实现计数和定时功能,通过实验思考并比较标准TTL集成电路实现计数和可编程定时器/计数器有什么不同,各有哪些特点?
思考计数器可以用哪些场合。
(1)掌握8253A与X86微机处理硬件连接原理。
(2)掌握8253A计数定时应用编程。
(3)熟悉掌握8253A在PC机系统中典型应用方法并思考如何应用在其他系统中。
2.实验内容
(1)利用单脉冲发生器作为8253A可编程计数定时器时钟信号,实现N个脉冲后产生输出高电平信号。
(2)利用8253A可编程计数定时器实现产生1S钟定时输出程序设计,输入1MHZ。
3.实验电路
1.按图2.1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
2.按图2.2连接电路图,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率为1MHz)。
4.实验原理
8253具有3个独立的计数通道,采用减1计数方式。
在门控信号有效时,每输入1个计数脉冲,通道作1次计数操作。
当计数脉冲是已知周期的时钟信号时,计数就成为定时。
作计数器时,要求计数的次数可直接作为计数器的初值预置到减“1”计数器中。
8253中各通道可有6种可供选择的工作方式,以完成定时、计数或脉冲发生器等多种功能。
本实验用到的是方式0—计数结束中断。
在写入计数值N之后的第一个CLK的下降沿将N装入计数执行单元,待下一个CLK的下降沿到来且门控信号GATE为高电平时,通道开始启动计数。
在计数过程中,OUT一直保持低电平,直到计数达“0”时,OUT输出由低电平变为高电平,并且保持高电平。
8253动态分配地址:
控制寄存器:
0EC03H
计数器0地址:
0EC00H
计数器1地址:
0EC01H
5.程序流程图
6.源程序
6.1程序一
DATASEGMENT
NEQU0BH;定义计数器初值N,初值N在0到F之内,便于字符显示简单
STRINGDB0AH,0DH,'$';定义STRING用来换行,0DH回车,0AH换行,$是字符串的结尾标志
DATAENDS
STACK1SEGMENTSTACK
DW100DUP(0)
STACK1ENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA,SS:
STACK1
START:
MOVAX,DATA
MOVDS,AX
;*************************************************8253的初始化
MOVDX,0EC03H;控制寄存器地址0EC03H
MOVAL,10H;计数器0:
00,只读/写计数器的低字节:
01,方式0:
000,
;二进制计数:
0,所以控制字写00010000B
OUTDX,AL;写入控制字
MOVDX,0EC00H;计数器0地址0EC00H
MOVAL,N
OUTDX,AL;写入计数初值为N,即0BH,11
MOVCL,N;用CL控制计数N次
L00P:
MOVDX,0EC00H
INAL,DX;读取当前数值
CMPAL,CL
JNEL00P;若AL不等于CL,则继续到L00P循环
DECCL;更改CL值
;*****************************************************单字符输出程序,先转换成ASIIC
MOVDL,AL
CMPDL,09H;转换为ASIIC,0~9内的数字加30,A到F加37
JLEADD30
ADDDL,07H;A~F先加7,下一步再加30
ADD30:
ADDDL,30H
MOVAH,02H;02号功能是单字符输出显示,显示计数器当前值
INT21H
;******************************************************
MOVDX,OFFSETSTRING;换行
MOVAH,09H;
INT21H
CMPCL,0
JNLL00P;循环至CL等于0,即N次
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
6.2程序二
CODESEGMENT;
ASSUMECS:
CODE;
START:
MOVDX,0EC03H;把控制寄存器地址放在DX寄存器中
MOVAL,36H;设置控制字00110110计数器0,方式3
OUTDX,AL;
MOVAX,1000;
MOVDX,0EC00H;把计数器0地址放在DX寄存器中
OUTDX,AL;
MOVAL,AH;
OUTDX,AL
MOVDX,0EC03H;把端口地址放在DX寄存器中
MOVAL,76H;设置控制字01110110(计数器1,方式3)
OUTDX,AL;
MOVAX,1000
MOVDX,0EC01H;把端口地址放在DX寄存器中
OUTDX,AL
MOVAL,AH
OUTDX,AL
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
7.实验总结
这次实验是针对可编程定时时钟/计数器(8253),8253有六种工作方式,我在实验中主要用到了8253的工作方式0和工作方式3,此外调用了02号功能单字符输出显示,以及09号功能输出显示字符串。
一开始我们尝试用的两个试验箱都是坏掉的,第一个电路连接好程序运行时直接输出高电平,红灯亮。
第二个也未出现闪烁的实验结果。
我们反复检查电路都未找到原因,后来换到新的实验箱,实验进行得很顺利,很快就得出正确的实验结果。
要注意的是:
执行02号功能必须进行ASSIC码转换,执行09号功能必须在字符串结尾写一个符号'$',表示字符串结束。
此外,在实验老师的指导下,我进一步熟悉了软件使用掌握了调试的方法,之前只会F8单步调试,但是在遇到很长的循环程序时,就不能单步调试的了,通过这次实验我学会了如何使用F4让程序进行到任意指定位置,就可以跳过循环继续执行代码。
实验三可编程中断控制器
1.实验目的
通过实验了解中断是计算机系统最重要的工作方式之一,理解中断能实现系统协调工作,了解中断在操作系统,工业控制中的应用。
通过实验可学会可编程中断控制器8259的结构、中断申请、中断响应、中断处理、中断返回等中断原理,掌握中断系统的编程与应用。
(1)掌握PC机8259A可编程中断控制器中断基本原理。
(2)掌握中断源、中断处理过程、中断向量表的建立、DOS的使用。
(3)熟悉主程序、中断服务程序编写,了解中断相应过程。
2.实验内容
(1)学习PC机系统中断原理
(2)利用手动产单脉冲作为中断请求信号,要求每按一次开关产生一次中断在屏幕上显示一次“TPCpcicardInterrupt”中断10次后程序退出。
3.实验原理
1.由于9054的驱动程序影响直写9054芯片的控制寄存器,中断实验需要在纯DOS的环境中才能正常运行。
这里指的纯DOS环境是指微机启动时按F8键进入的DOS环境。
WINDOWS重启进入MSDOS方式由于系统资源被重新规划过,所以也不能正常实验。
2.由于TPC卡使用PCI总线,所以分配的中断号每台微机可能都不同,编程时需要了解当前的微机使用那个中断号并进行设置,获取方法请参看汇编程序使用方法的介绍。
(也可使用自动获取资源分配的程序取得中断号)
3.在纯DOS环境下,有些微机的BIOS设置中有将资源保留给ISA总线使用的选项,致使在纯DOS环境(WINDOWS环境下不会出现此问题)下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为使用即插即用。
4.在纯DOS环境下,有些微机的BIOS设置中有使用即插即用操作系统的选项,如果在使用即插即用操作系统状态下,BIOS将不会给TPC卡分配系统资源,致使在纯DOS环境(WINDOWS环境下不会出现此问题)下PCI总线无法获得系统资源,也就无法做实验,这时需要将此选项修改为不使用即插即用操作系统。
5.由于TPC卡使用9054芯片连接微机,所以在编程使用微机中断前需要使能9054的中断功能,代码如下:
movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,使能中断
inax,dx
orax,0900h
outdx,ax
其中IOPORT_CENT是9054芯片寄存器组的I/O起始地址,每台微机可能都不同,编程时需要了解当前的微机使用哪段并进行设置,获取方法请参看本书结尾部分的介绍。
(也可使用自动获取资源分配的程序取得),+68H的偏移是关于中断使能的寄存器地址,设置含义如下:
程序退出前还要关闭9054的中断,代码如下:
movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,关闭中断
inax,dx
andax,0f7ffh
outdx,ax
6.PC机中断控制器8259的地址为20H、21H,编程时要根据中断类型号设置中断矢量,8259中断屏蔽寄存器IMR对应位要清零(允许中断),中断服务结束返回前要使用中断结束命令:
MOVAL,20H
OUT20H,AL
中断结束返回DOS时应将IMR对应位置1,以关闭中断。
4.实验电路图
实验电路如图,直接用手动产单脉冲作为中断请求信号,只需连接一根导线。
5.程序流程图
6.源程序
;386以上微机适用
;纯dos下才能使用
;tasm4.1或以上编译
;*********************;
;*中断*;
;*********************;
datasegment
ipregdw?
;旧中断向量保存空间
csregdw?
int_vectEQU073H;中断0-7的向量为:
08h-0fh,中断8-15的向量为:
70h-77h
irq_mask_2_7equ11111011b;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零
irq_mask_9_15equ11110111b;中断0-7时全一,中断8-15时从低至高相应位为零
ioport_centequ0E800h;tpc卡中9054芯片的io地址
irq_timesdw00h;中断计数
msg1db0dh,0ah,'TPCpcicardInterrupt',0dh,0ah,'$'
msg2db0dh,0ah,'Pressanykeytoexit!
',0dh,0ah,'$'
msg3db0dh,0ah,'PressDMCtointerrupt10timesandexit!
',0dh,0ah,'$'
dataends
stacksegmentstack
db100dup(?
)
stackends
codesegment
assumecs:
code,ds:
data,ss:
stack,es:
data
start:
;EnableLocalInterruptInput
.386
cli
movax,data
movds,ax
moves,ax
movax,stack
movss,ax
movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,使能中断
inax,dx
orax,0900h
outdx,ax
moval,int_vect;调用35号功能,保存原中断向量int_vect
movah,35h
int21h
movax,es
movcsreg,ax
movipreg,bx;ipregcsreg是旧中断向量保存空间
movax,segint_proc;调用25号功能设置新中断向量
movds,ax;中断服务程序的的段基址送DX
movdx,offsetint_proc;中断服务程序的的偏移地址送DX
moval,int_vect
movah,25h
int21h
inal,21h;设置中断掩码
andal,irq_mask_2_7;主片端口地址21H,D2允许中断11111011b
out21h,al
inal,0a1h
andal,irq_mask_9_15;从片端口地址A1H,D3允许中断11110111b
out0a1h,al
movax,data
movds,ax
movdx,offsetmsg2
movah,09h;09号功能显示'Pressanykeytoexit!
'
int21h
movdx,offsetmsg3;显示'PressDMCtointerrupt10timesandexit!
'
movah,09h
int21h
movirq_times,0ah
sti;允许可屏蔽中断请求进入
loop1:
cmpirq_times,0;等待中断并判断中断10次后退出
jzexit
movah,1;BIOS功能调用int16hah=01H检测字符是否准备好
int16h;ZF=0,表示无字符可接收,ZF=1,表示有字符可接收
jnzexit;按任意键退出IF=1
jmploop1
exit:
cli
movbl,irq_mask_2_7;恢复中断掩码
notbl
inal,21h
oral,bl
out21h,al
movbl,irq_mask_9_15
notbl
inal,0a1h
oral,bl
out0a1h,al
movdx,ipreg;恢复原中断向量int_vect
movax,csreg
movds,ax
movah,25h
moval,int_vect
int21h
movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,关闭中断
inax,dx
andax,0f7ffh
outdx,ax
movax,4c00h;返回操作系统
int21h
int_procprocfar
pushax
pushdx
pushds
decirq_times
movax,data;Interrupttodo
movds,ax
movdx,offsetmsg1
movah,09h
int21h
moval,20h;SendEOI
out0a0h,al
out20h,al
popds
popdx
popax
sti;开中断
iret
int_procendp
codeends
endstart
7.实验总结
我认为这次实验重点是要理解中断的概念和熟悉中断中8352主片和从片的如何级联工作,具体包括:
知道如何查找中断源、确定中断类型,设置TPC卡中断使能、调用35号功能保护原中断向量、调用25号功能设置新的中断向量,设置中断屏蔽字等诸多内容。
虽然老师已经给了我们程序,但是要在短时间内彻底地读懂全部程序还是比较困难的,尤其是使用微机中断前使能9054的中断功能这一部分的程序令人费解。
通过此次试验。
我对整个中断服务流程的理解更加清晰,对8352主片和从片的级联工作用以拓展中断源的工作方式有了进一步的认识。
感谢老师和主教的指导和帮助。
实验四模/数转换器ADC0809
1.实验目的
通过实验了解计算机能直接处理的通常是数字信号,学会利用A/D器件把模拟信号转换成数字信号,学会A/D芯片如何与计算机连接,掌握有哪些主要参数影响采集的速度和精度,掌握软件编程实现模拟信号采集,思考如何解决实际多通道数据采集处理问题,思考数据采集后如何处理等问题,了解模/数转换的基本原理,掌握ADC0809的使用方法。
(1)掌握单通道模拟信号采集到数据处理的方法。
(2)掌握采集电路和计算机连接的硬件电路。
(3)熟悉多通道模拟信号采集到数据处理的方法。
2.实验内容
1.基本功能
利用ADC08
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 微机 实验 报告