微机原理可能的四次实验讲义.docx
《微机原理可能的四次实验讲义.docx》由会员分享,可在线阅读,更多相关《微机原理可能的四次实验讲义.docx(21页珍藏版)》请在冰豆网上搜索。
![微机原理可能的四次实验讲义.docx](https://file1.bdocx.com/fileroot1/2022-11/30/de2850e1-12b8-444c-9c30-304bd370def6/de2850e1-12b8-444c-9c30-304bd370def61.gif)
微机原理可能的四次实验讲义
1、概述
八十年代以来,国内大中专院校很多专业都相继开设了“微机原理及应用”方面的课程,讲授内容主要是8位机(Z80),实验设备多采用TP801单板机。
随着计算机技术的发展,讲授内容开始逐步转向16位或32位的PC系列微机,实验设备亦需更新,“TPC-2005通用32位微机接口(PCI)实验系统”是我公司继“TPC-2003通用32位微机接口实验系统”的基础上,综合了各学校讲课及实验老师的意见之后推出的微机硬件实验教学设备的新产品。
该仪器增加了实验系统的开放能力和灵活性。
它不仅使一些典型的微机接口实验方便,而且对一些计算机硬件要求较高的专业提供了锻炼学生动手能力,发挥创造才能的平台。
该系统主要有以下特点:
★实验电路连接采用了国家专利、获奖产品“自锁紧”插座及导线,消除了连线
接触不良的现象。
★电路设计中增加了多项保护措施,可有效的避免由于学生实验时错接、错编程损
坏主机或接口集成电路的现象。
★接口实验增加了实用性、趣味性的项目,使用C语言进行实验的程序。
★实验台上增加了逻辑笔、通用IC插座等电路。
可作为数字电路实验仪器使用,也
可以用于学生毕业设计、实验数据的采集及科研开发。
仪器硬件包括接口卡、实验台(箱)两部分组成,两者之间通过50线扁平电缆相
连。
接口卡可以插入PC系列微机中任意一个PCI扩展插槽,它的主要功能是将与实验有关的总线信号加以驱动后引到实验台上,同时引出信号还有与“中断”和“DMA”实验操作有关的信号及+5V、+12V、-12V电源。
实验台上设有I/O地址译码电路、总线插孔、接口实验常用集成电路、外围电路及通用IC插座等部分组成。
外围电路包括逻辑电平开关电路、LED显示电路、时钟电路、单脉冲电路、逻辑笔、复位电路、七段数码管显示电路、基本门电路、继电器及步进电机、小直流电机的驱动电路。
使用说明书中介绍了四十多个微机接口实验。
覆盖了大中专院校微机接口实验教学大纲中的内容。
教师可以根据课时计划安排选作,也可以在此基础上重新设计新的实验项目。
实验三可编程定时器/计数器(8253)
1、实验目的
掌握8253的基本工作原理和编程方法。
二、实验内容
1.按图1虚线连接电路,将计数器0设置为方式0,计数器初值为N(N≤0FH),用手动逐个输入单脉冲,编程使计数值在屏幕上显示,并同时用逻辑笔观察OUT0电平变化(当输入N+1个脉冲后OUT0变高电平)。
图1
2.按图2连接电路,将计数器0、计数器1分别设置为方式3,计数初值设为1000,用逻辑笔观察OUT1输出电平的变化(频率1HZ)。
图2
3、编程提示
1、8253控制寄存器地址283H
计数器0地址280H
计数器1地址281H
CLK0连接时钟1MHZ
2、参考流程图(见图3、4):
图3图4
3、参考程序1:
(程序名:
E8253_1.ASM)
ioportequ0d400h-0280h
io8253aequioport+283h
io8253bequioport+280h
codesegment
assumecs:
code
start:
moval,14h;设置8253通道0为工作方式2,二进制计数
movdx,io8253a
outdx,al
movdx,io8253b;送计数初值为0FH
moval,0fh
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
4、参考程序2:
(程序名:
E8253_2.ASM)
Ioportequ0d400h-0280h
io8253aequioport+280h
io8253bequioport+281h
io8253cequioport+283h
codesegment
assumecs:
code
start:
movdx,io8253c;向8253写控制字
moval,36h;使0通道为工作方式3
outdx,almovax,1000;写入循环计数初值1000
movdx,io8253aoutdx,al;先写入低字节
moval,ahoutdx,al;后写入高字节
movdx,io8253c
moval,76h;设8253通道1工作方式2
outdx,al
movax,1000;写入循环计数初值1000
movdx,io8253b
outdx,al;先写低字节
moval,ahoutdx,al;后写高字节
movah,4ch;程序退出
int21h
codeends
endstart
实验四可编程并行接口
(一)(8255方式0)
1、实验目的
掌握8255方式0的工作原理及使用方法。
2、实验内容
1.实验电路如图5,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2.编程从8255C口输入数据,再从A口输出
图5图6
3、编程提示
1、8255控制寄存器端口地址28BH
A口的地址288H
C口的地址28AH
2、参考流程图(见图6):
3、参考程序:
E8255.ASM
ioportequ0d400h-0280h
io8255aequioport+288h
io8255bequioport+28bh
io8255cequioport+28ah
codesegment
assumecs:
code
start:
movdx,io8255b;设8255为C口输入,A口输出
moval,8bh
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
实验九中断
1、实验目的
1、掌握PC机中断处理系统的基本原理。
2、学会编写中断服务程序。
二、实验原理与内容
1、实验原理
PC机用户可使用的硬件中断只有可屏蔽中断,由8259中断控制器管理。
中断控制器用于接收外部的中断请求信号,经过优先级判别等处理后向CPU发出可屏蔽中断请求。
IBMPC、PC/XT机内有一片8259中断控制器对外可以提供8个中断源:
中断源中断类型号中断功能
IRQ008H时钟
IRQ109H键盘
IRQ20AH保留
IRQ30BH串行口2
IRQ40CH串行口1
IRQ50DH硬盘
IRQ60EH软盘
IRQ70FH并行打印机
8个中断源的中断请求信号线IRQ0~IRQ7在主机的62线ISA总线插座中可以引出,系统已设定中断请求信号为“边沿触发”,普通结束方式。
对于PC/AT及286以上微机内又扩展了一片8259中断控制,IRQ2用于两片8259之间级连,对外可以提供16个中断源:
中断源中断类型号中断功能
IRQ8070H实时时钟
IRQ9071H用户中断
IRQ10072H保留
IRQ11073H保留
IRQ12074H保留
IRQ13075H协处理器
IRQ14076H硬盘
IRQ15077H保留
PCI总线中的中断线只有四根,INTA#、INTB#、INTC#、INTD#,它们需要通过P&P的设置来和某一根中断相连接才能进行中断申请。
图7中断电路
2、实验内容
实验电路如图7,直接用手动产单脉冲作为中断请求信号(只需连接一根导线)。
要求每按一次开关产生一次中断,在屏幕上显示一次“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的偏移是关于中断使能的寄存器地址,设置含义如下:
设置INTCSR(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,以关闭中断。
四、参考流程图
图8中断
五、参考程序
程序名:
INT.AS
;386以上微机适用
;纯dos下才能使用
;tasm4.1或以上编译
datasegment
int_vectEQU071H;中断0-7的向量为:
08h-0fh,中断8-15的向量为:
70h-77h
irq_mask_2_7equ011111011b;中断掩码,中断0-7时从低至高相应位为零,中断8-15时第2位为零
irq_mask_9_15equ011111101b;中断0-7时全一,中断8-15时从低至高相应位为零
ioport_centequ0d800h;tpc卡中9054芯片的io地址
Csregdw?
ipregdw?
;旧中断向量保存空间
irq_timesdw00h;中断计数
msg1db0dh,0ah,'TPCpcicardInterrupt',0dh,0ah,'$'
msg2db0dh,0ah,'Pressanykeytoexit!
',0dh,0ah,'$'
msg3db0dh,0ah,'PressDMCtointerrupt10timesandexit!
',0dh,0ah,'$'
dataends
stackssegment
db100dup(?
)
stacksends
codesegment
assumecs:
code,ds:
data,ss:
stacks,es:
data
start:
;EnableLocalInterruptInput
.386
cli
movax,data
movds,ax
moves,ax
movax,stacks
movss,ax
movdx,ioport_cent+68h;设置tpc卡中9054芯片io口,使能中断
inax,dx
orax,0900h
outdx,ax
moval,int_vect;保存原中断向量
movah,35h
int21h
movax,es
movcsreg,ax
movipreg,bx
movax,cs;设置新中断向量
movds,ax
movdx,offsetint_proc
moval,int_vect
movah,25h
int21h
inal,21h;设置中断掩码
andal,irq_mask_2_7
out21h,al
inal,0a1h
andal,irq_mask_9_15
out0a1h,al
movax,data
movds,ax
movdx,offsetmsg2
movah,09h
int21h
movdx,offsetmsg3
movah,09h
int21h
movirq_times,0ah
Sti
loop1:
cmpirq_times,0;等待中断并判断中断10次后退出
jzexit
movah,1
int16h
jnzexit;按任意键退出
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;恢复原中断向量
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;中断处理程序
cli
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
endstar
实验十四串行通讯
1、实验目的
1、了解串行通讯的基本原理。
2、掌握串行接口芯片8251的工作原理和编程方法。
二、实验内容
1、按图9连接好电路,(8251插通用插座)其中8253计数器用于产生8251的发送和接收时钟.TXD和RXD连在一起。
2、编程:
从键盘输入一个字符,将其ASCII码加1后发送出去,再接收回来在屏幕上显示。
实现自发自收。
图9串行通讯电路
3、实验提示
1、图示电路8251的控制口地址为2B9H,数据口地址为2B8H。
2、8253计数器的计数初值=时钟频率/(波特率×波特率因子),这里的时钟频率接1MHz,波特率若选1200,波特率因子若选16,则计数器初值为52。
3、收发采用查询方式。
四、参考流程图(见图10)
图10
5、参考程序:
E8251.ASM
datasegment
ioportequ0d400h-0280h
io8253aequioport+280h
io8253bequioport+283h
io8251aequioport+2b8h
io8251bequioport+2b9h
mes1db'youcanplayakeyonthekeybord!
',0dh,0ah,24h
mes2ddmes1
dataends
codesegment
assumecs:
code,ds:
data
start:
movax,data
movds,ax
movdx,io8253b;设置8253计数器0工作方式
moval,16h
outdx,al
movdx,io8253a
moval,52;给8253计数器0送初值
outdx,al
movdx,io8251b;初始化8251
xoral,al
movcx,03;向8251控制端口送3个0
delay:
callout1
loopdelay
moval,40h;向8251控制端口送40H,使其复位
callout1
moval,4eh;设置为1个停止位,8个数据位,波特率因子为16
callout1
moval,27h;向8251送控制字允许其发送和接收
callout1
ldsdx,mes2;显示提示信息
movah,09
int21h
waiti:
movdx,io8251b
inal,dx
testal,01;发送是否准备好
jzwaiti
movah,01;是,从键盘上读一字符
int21h
cmpal,27;若为ESC,结束
jzexit
movdx,io8251a
incal
outdx,al;发送
movcx,0F00h
s51:
loops51;延时
next:
movdx,io8251b
inal,dx
testal,02;检查接收是否准备好
jznext;没有,等待
movdx,io8251a
inal,dx;准备好,接收
movdl,al
movah,02;将接收到的字符显示在屏幕上
int21h
jmpwaiti
exit:
movah,4ch;退出
int21h
out1procnear;向外发送一字节的子程序
outdx,al
pushcx
movcx,0F00h
gg:
loopgg;延时
popcx
ret
out1endp
codeends
endstart