第二部分微机接口实验.docx
《第二部分微机接口实验.docx》由会员分享,可在线阅读,更多相关《第二部分微机接口实验.docx(19页珍藏版)》请在冰豆网上搜索。
第二部分微机接口实验
第二部分微机接口实验
一、说明
1.下面的实验程序是根据我们设计的实验模块电路编写的,供用户参考。
2.所有的实验程序均可以在DVCC32JHP软件集成环境下运行和调试。
3.在实验前必须先仔细阅读随机配备的用户手册,以便对整个系统的硬件结构和设计思想有所了解,特别要仔细阅读软件安装和使用部分,以便了解DVCC32JHP集成软件运行环境和操作方法,为后面顺利进行编程实验做好充分准备。
4.图中虚线框内的电路为我们设计的模块电路。
虚线框外的电路为系统部分。
模块电路和系统电路之间需要用单个导线或排线连接。
通常控制线都是单个的,数据总线D0~D7(JD1~JD4)、地址总线A0~A7(JA1)、A8~A15(JA2)等用排线连接。
若模块内部有连线时,需要学生根据模块电路原理图进行连接。
5.模块上的工作电源(+5V、GND)在实验时从系统板接入(用二芯连线),当用到±12V电源时,还需从系统板接入±12V电源(用四芯连线)。
在下面的实验程序中电路接线部分省略了电源接入这一步。
6.实验中凡是用到A/D或D/A电路,在运行程序前,必须先将其基准电压调到+5V。
7.程序的退出是按PC机的ESC键。
8.实验程序的C语言源文件在安装目录下面的CPP目录下。
二、实验程序目录
3.Ymq.ASMI/O地址译码
5.D244.ASM简单并行接口扩展输入
16.DMA_1.ASMDMA传送实验
(1)
17.DMA_2.ASMDMA传送实验
(2)
三、实验的一般步骤
(1)运行DVCC32JHP软件,选择编辑Edit菜单,根据实验内容的描述编写实验程序或选择Open菜单直接打开程序。
(2)使用“ASM编译”菜单中“编译+连接+运行”选项,对实验程序进行汇编、连接。
汇编、连接无误的话,就直接运行程序。
观察运行结果。
(3)或使用动态调试,进入调试环境,观察调试过程中,指令执行情况,包括各寄存器及数据区内容的变化等。
(4)查看实验结果,考察程序的正确性。
实验一I/O地址译码
一、实验目的
掌握I/O地址译码电路的工作原理。
二、实验原理和内容
实验电路如图1-1所示,图中线路两端有节点的信号线需要用户用实验导线连接起来。
其中74LS74为D触发器,可直接使用实验台上部系统板上的D触发器。
74LS138为地址译码器。
译码输出端Y0~Y7在实验台中间系统板上引出,每个输出端包含8个地址,即:
Y0:
280H~287H;Y4:
2A0H~2A7H;
Y1:
288H~28FH;Y5:
2A8H~2AFH;
Y2:
290H~297H;Y6:
2B0H~2B7H;
Y3:
298H~29FH;Y7:
2B8H~2BFH;
当CPU执行I/O指令且地址在280H~2BFH范围内,译码器选中,必有一根译码线输出负脉冲。
例如:
执行下面两条指令,对应的译码输出脚输出一个负脉冲。
MOVDX,PORT1
OUTDX,AL(或INAL,DX)
执行下面两条指令,对应的译码输出脚输出一个负脉冲。
MOVDX,PORT2
OUTDX,AL(或INAL,DX)
利用这个负脉冲控制发光二极管L0闪烁发光(亮灭循环),时间间隔通过软件延时实现。
注意:
命令中的端口地址PORT1、PORT2是根据DVCC卡的I/O基址再加上偏移量计算出来的,不同的微机DVCC卡的I/O基址可能不同,需要事先查找出来,详细见《用户手册》第五章节5.3中第10~12点介绍的查找方法。
计算公式如下:
PORT1=查找出的DVCC卡的I/O基址+偏移量
其中:
偏移量=Y0~Y7中所选定的任意一个译码地址值-280H。
下面的程序用到Y4,即2A0H。
假设DVCC卡的I/O基地址=0C400H,经计算PORT1=0C420H。
三、编程提示
1.实验电路中D触发器的CLK端输入脉冲时,上升沿使Q端输出高电平,L0发光,CLR端加低电平L0灭。
2.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法见《用户手册》第五章节5.3第10~12点中的介绍。
下面的程序YMQ.ASM(在文件夹“ASM_汇编程序”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置(0C400H);程序YMQ.ASM(在文件夹“ASM_汇编程序_自动”中)是通过程序自动获取DVCC卡资源分配的实验程序。
图1-1
四、参考程序
1.手动替换I/O基址的源程序文件名:
YMQ.ASM(在文件夹“ASM_汇编程序”中)
源程序清单如下:
ioportequ0C400H-0280h
outport1equioport+2a0h
outport2equioport+2a8h
codesegment
assumecs:
code
start:
movdx,outport1
outdx,al
calldelay;调延时子程序
movdx,outport2
outdx,al
calldelay;调延时子程序
movah,1
int16h
jestart
movah,4ch
int21h
delayprocnear;延时子程序
movbx,2000
lll:
movcx,0
ll:
loopll
decbx
jnelll
ret
delayendp
codeends
endstart
实验五可编程并行接口
一、实验目的
掌握8255方式0的工作原理及使用方法。
二、实验内容
1.实验电路如图5-1,8255C口接逻辑电平开关K0~K7,A口接LED显示电路L0~L7。
2.编程从8255C口输入数据,再从A口输出。
3.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解
当前的微机使用那段IO地址并进行设置,获取方法见《用户手册》第五章节5.3第10~12点中的介绍。
下面的程序D8255_1.ASM(在文件夹“ASM_汇编程序”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置(0C400H)。
图5-1
三、编程提示
1.8255控制寄存器端口地址28BH,A口的地址288H,C口的地址28AH。
四、参考流程图如图5-2所示
五、参考程序
源程序文件名D8255_1.ASM(在文件夹“ASM_汇编程序”中)
源程序清单如下:
ioportequ0C400H-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
图5-2
注意:
本实验自动获取DVCC卡资源的源程序在文件夹“ASM_汇编程序_自动”中,文件名为D8255_1.ASM,源文件不在这里列出。
实验十六交通灯控制实验
一、实验目的
通过并行接口8255实现十字路口交通灯的模拟控制,进一步掌握对并行口的使用。
二、实验内容
1.如图16-1,L8、L7、L6作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。
编程使六个灯按交通灯变化规律亮灭。
2.L0对应东西路口绿灯,L1对应东西路口黄灯,L2对应东西路口红灯;L6对应南北路口绿灯,L7对应南北路口黄灯,L8对应南北路口红灯。
图16-1
三、编程提示
1.十字路口交通灯的变化规律要求:
(1)南北路口的绿灯、东西路口的红灯同时亮30秒左右。
(2)南北路口的黄灯闪烁若干次,同时东西路口的红灯继续亮。
(3)南北路口的红灯、东西路口的绿灯同时亮30秒左右。
(4)南北路口的红灯继续亮,同时东西路口的黄灯闪烁若干次。
(5)转
(1)重复。
2.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法见《用户手册》第五章节5.3第10~12点中的介绍。
下面的程序JTD.ASM(在文件夹“ASM_汇编程序”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置。
四、参考流程图
开始
设置8255A口、C口为输出口
南北路口绿灯亮,东西路口红灯亮
长延时
南北路口黄灯闪,东西路口红灯亮
短延时
南北路口红灯亮,东西路口绿灯亮
长延时
南北路口红灯亮,东西路口黄灯闪
短延时
N
Y
返回
图30
五、参考程序
源程序文件名:
JTD.ASM(在文件夹“ASM_汇编程序”中)
源程序清单如下:
datasegment
ioportequ0C400H-0280h
io8255cequioport+28ah
io8255kequioport+28bh
portc1db24h,44h,04h,44h,04h,44h,04h;六个灯可能
db81h,82h,80h,82h,80h,82h,80h;的状态数据
db0ffh;结束标志
dataends
codesegment
assumecs:
code,ds:
data
start:
movcx,3000
delay:
loopdelay
movax,data
movds,ax
movdx,io8255k
moval,80h
Outdx,al;设置8255C口为输出
movdx,io8255c
re_on:
movbx,0
on:
moval,portc1[bx];取状态值
cmpal,0ffh
jzre_on
outdx,al;点亮相应的灯
incbx
movcx,2000h;延时参数赋初值
testal,21h;是否有绿灯亮
jzde1;没有,短延时
movcx,0ffffh;有,长延时
de1:
movdi,0ffffh;di赋初值5000
de0:
decdi;减1计数
jnzde0;di不为0
loopde1
pushdx
movah,06h
movdl,0ffh
int21h
popdx
jzon;没有,转到on
exit:
movah,4ch;返回
int21h
codeends
endstart
注意:
本实验自动获取DVCC卡资源的源程序在文件夹“ASM_汇编程序_自动”中,文件名为JTD.ASM,源文件不在这里列出。
实验十七步进电机控制实验
一、实验目的
1.了解步进电机控制的基本原理。
2.掌握控制步进电机转动的编程方法。
二、实验内容
1.按图17-1连接线路,利用8255输出脉冲序列,开关K0~K6控制步进电机转速,K7控制步进电机转向。
2.编程:
当K0~K6中某一开关为“1”(向上拨)时步进电机启动。
K7向上拨电机正转,向下拨电机反转。
3.由于DVCC卡使用PCI总线,所以分配的IO地址每台微机可能都不同,编程时需要了解当前的微机使用那段IO地址并进行设置,获取方法见《用户手册》第五章节5.3中第10~12点的介绍。
下面的程序BJDJ.ASM(在文件夹“ASM_汇编程序”中)是需要用户自己根据查找到的DVCC卡的I/O基址替换到程序中带下划线的位置。
图17-1
三、实验说明
步进电机驱动原理是通过对每相线圈中的电流的顺序切换来使电机作步进式旋转。
驱动电路由脉冲信号来控制,所以调节脉冲信号的频率便可改变步进电机的转速。
如图17-2所示:
本实验使用的步进电机用直流+5V电压,每相电流为0.16A,电机线圈由四相组成:
即:
φ1(BA);φ2(BB);φ3(BC);φ4(BD),驱动方式为二相激磁方式,各线圈通电顺序如下表。
顺序相
φ1
φ2
φ3
φ4
0
1
1
0
0
1
0
1
1
0
2
0
0
1
1
3
1
0
0
1
表中首先向φ1线圈-φ2线圈输入驱动电流,接着φ2-φ3,φ3-φ4,φ4-φ1,又返回到φ1-φ2,按这种顺序切换,电机轴按顺时针方向旋转。
实验可通过不同长度的延时来得到不同频率的步进电机输入脉冲,从而得到多种步进速度。
图17-2
四、参考流程图
图17-3
五、参考程序
源程序文件名:
BJDJ.ASM(在文件夹“ASM_汇编程序”中)
源程序清单如下:
DATASEGMENT
IoportEQU0C400H-0280h
io8255aEQUioport+288H;8255A口
io8255cEQUioport+28AH;8255C口
io8255kEQUioport+28BH;8255控制口
BUFDB0
MESDB'K0-K6ARESPEEDCONTYOL',0AH,0DH
DB'K6ISTHELOWESTSPEED',0AH,0DH
DB'K0ISTHEHIGHESTSPEED',0AH,0DH
DB'K7ISTHEDIRECTIONCONTROL',0AH,0DH,'$'
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,CS
MOVDS,AX
MOVAX,DATA
MOVDS,AX
MOVDX,OFFSETMES
MOVAH,09
INT21H
MOVDX,io8255k
MOVAL,8BH
OUTDX,AL;设置8255C口输入,A口输出
MOVBUF,33H
OUT1:
MOVAL,BUF
MOVDX,io8255a
OUTDX,AL
MOVAH,06h
movdl,0ffh
INT21H;有键输入吗?
JEIN1;无键转IN1
MOVAH,4CH;有键转返回
INT21H
IN1:
MOVDX,io8255c
INAL,DX;读PC口上开关的状态
TESTAL,01H
JNZK0
TESTAL,02H
JNZK1
TESTAL,04H
JNZK2
TESTAL,08H
JNZK3
TESTAL,10H
JNZK4
TESTAL,20H
JNZK5
TESTAL,40H
JNZK6
STOP:
MOVDX,io8255a;电机停转
MOVAL,0FFH
JMPOUT1
K0:
MOVBX,0100H
SAM:
TESTAL,80H;判正反转
JZYX0
JMPZX0
K1:
MOVBX,0300H
JMPSAM
K2:
MOVBX,050H
JMPSAM
K3:
MOVBX,0700H
JMPSAM
K4:
MOVBX,0900H
JMPSAM
K5:
MOVBX,0B00H
JMPSAM
K6:
MOVBX,4000H
JMPSAM
YX0:
CALLDELAY;正转
MOVAL,BUF
RORAL,1
MOVBUF,AL
JMPOUT1
ZX0:
CALLDELAY;反转
MOVAL,BUF
ROLAL,1
MOVBUF,AL
JMPOUT1
DELAYPROCNEAR;延时子程序
DELAY1:
MOVCX,0FFFFH
DELAY2:
LOOPDELAY2
DECBX
JNZDELAY1
RET
DELAYENDP
CODEENDS
ENDSTART
注意:
本实验自动获取DVCC卡资源的源程序在文件夹“ASM_汇编程序_自动”中,文件名为BJDJ.ASM,源文件不在这里列出。