微机实验报告.docx
《微机实验报告.docx》由会员分享,可在线阅读,更多相关《微机实验报告.docx(38页珍藏版)》请在冰豆网上搜索。
微机实验报告
《微机原理与接口》实验报告
姓名:
李泳志学号:
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转换的程序过程,程序中要将延时设置