微机原理与接口技术习题集4Word格式文档下载.docx
《微机原理与接口技术习题集4Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《微机原理与接口技术习题集4Word格式文档下载.docx(37页珍藏版)》请在冰豆网上搜索。
程序中,先使用一条输出指令把X坐标数据送到X向转换器的输入寄存器。
然后又用另一条输出指令把Y坐标数据送到Y向转换器的输入寄存器。
最后用一输出指令将前面两次写入输入寄存器的数据,同时打入两个转换器的DAC寄存器,进行数据转换,即可实现X和Y两个方向坐标量的同步输出。
X向坐标数据和Y向坐标数据存于AX中。
绘图仪的驱动程序段为:
HTYPROC
PUSHCX
PUSHDX
MOVDX,380H
OUTDX,AL;
输出X
MOVDX,384H
XCHGH,AL
OUTDX,AL;
输出Y
MOVDX,388H;
X、Y送DAC寄存器
LOOP$;
等待转换
POPDX
POPCX
RET
HTYENDP
618.编写DAC0832实现一次D/A转换的程序
设定要转换的数据放在1000H单元中
程序如下:
MOVBX,1000H
MOVAL,[BX];
取转换数据
MOVDX,PORTA;
PORTA为D/A转换器端口地址
OUTDX,AL
在实际应用中,经常需要用到一个线性增长的电压去控制某一个检测过程,或者作为扫描电压去控制一个电子束的移动。
执行下面的程序段,利用D/A转换器产生一个锯齿波电压,实现此类控制作用。
MOVDX,PORTA;
MOVAL,0FFH;
置初值
ROTAT:
INCAL
OUTDX,AL;
往D/A转换器输出数据
CALLDELAY;
调用延迟子程序
JMPROTAT
DELAY:
MOVCX,DATA;
置延迟常数DATA
DELAY1:
LOOPDELAY1
RET
实际上,程序段执行结果得到的输出电压会有256个小台阶,不过从宏观上看,仍为连续上升的锯齿波。
对于锯齿波的周期,则利用延迟进行调整。
延迟的时间如果比较短,可以用几条NOP指令来实现;
如果时间较长,则可以用延迟子程序来实现。
该程序段就是利用延迟自程序来控制锯齿波周期的。
如果需要一个浮想的锯齿波,只要指令INCAL改成DECAL就可以了。
619.简述DAC0832芯片中8位输入寄存器和8位DAC寄存器的工作过程
DAC0832采用二级缓冲输入数据方式,在DAC0832进行D/A转换时可用两种方法:
(1)8位输入寄存器工作于锁存状态,8位DAC寄存器工作于缓冲状态,即使
为低电平,ILE为高电平,
为低电平,当
有一个负脉冲,完成一次转换。
(2)8位输入寄存器工作于缓冲状态,8位DAC寄存器工作于锁存状态;
即使
和
输入一个负脉冲,完成一次转换。
620.编写ADC0809与CPU直接连接的程序
由于ADC0809具有三态输出缓冲器,所以它能同CPU直接相连(但需要加译码电路),如图201所示。
CPU的数据线D7~D0直接与ADC0809的数据线D7~D0相连。
ADC0809的通道地址选择信号ADDA、ADDB和ADDC同数据总线D0、D1、D2相连。
设ADC0809的转换时间为100微秒,采用软件延时来等待转换结束。
CPU的CLK经8分频后接至0809的CLOCK。
地址译码器的输出端
(地址为84~87H)与CPU的
经或非门#2控制启动信号START和通道地址锁存允许信号ALE;
与CPU的
经过或非门#1使0809的输出允许信号OE有效。
则从输入通道
读入一个模拟量经DAC0809转换后进入CPU的程序为:
MOVAL,01H;
送输入通道号1
OUT84H,AL;
并发出启动信号
CALLDELAY100;
等待转换结束,延时100微秒
INAL,84H;
转换结束,读入数据
HLT
若改用中断方式,则可将转换结束信号EOC作为中断请求信号,在中断服务程序中读入转换后的数据。
621.编写ADC0809通过并行接口与CPU的连接的程序
(P308例254)
ADC0809通过并行接口芯片8255A与CPU相连的接口如图202所示。
0809数字量输出D0~D7同系统总线D0~D7直接相连,CPU的CLK经8分频后接到0809的CLOCK端。
地址译码器的输出
(地址为80H~83H),接到8255A的
(地址为84H~87H)用来选通ADC0809.0809的START与ALE同8255A的
相连,EOC与
相连。
0809的ADDA、ADDB和ADDC同
从输入通道读入一个模拟量经ADC0809转换后送入CPU的程序为:
MOVAL,88H;
8255A初始化,工作方式0
OUT83H,AL;
PB口输出,PC口高4位输入
MOVAL,00H;
取通道0,且产生
为∏信号
OUT81H,AL;
启动ADC0809转换
ADDAL,10H
OUT81H,AL
SUBAL,10H
LOP:
INAL,82H;
检查EOC
TESTAL,80H
JZLOP;
EOC=0,继续查询
INAL,84H;
EOC=0,使0809的OE有效,允许输出
HLT;
读入数字量
622.在ADC0809电路中,若改为中断方式读取转换后的数字量,则电路应做哪些改动?
程序如何编写?
(P310例255)
PC机的系统总线中
为保留引脚,是为了应用系统中采用中断方式工作时接受中断请求信号所用。
因此在采用中断方式工作时,可以把EOC通过一个单稳电路产生具有一定宽度的郑脉冲,送到总线的
端即可。
控制程序分为:
主程序和服务中断程序。
主程序:
MOVAL,80H
OUT83H,AL
MOVAL,00H
OUT81H,AL
ADDAL,10H
OUT81H,AL
SUBAL,10H
STI
……
中断程序:
PROCADCPROCFAR
PUSHAX
INAL,84H
POPAX
IRET
PROCADCENDP
623.设计D/A转换器的接口电路,并编写转换程序
(P311例257)
设8255A的端口A以工作在方式1时作D/A转换器的输出接口,利用下降沿启动D/A转换,转换结束的回答信号为“0”脉冲,8255A的端口地址为3F0H~3F3H。
要求:
(1)D/A转换器的接口电路包括:
D/A转换器与8255A连接,8255A的主要信号线D0~D7,
,如图所示。
(2)采用条件传送方式,将存储器BUFER缓冲区中的3000个波形数送D/A转换器转换。
转换程序如下:
MOVDX,3F3H
MOVAL,10100000B;
8255A方式字
OUTDX,AL
MOVAL,00001101B;
复位
LEASI,BUFFER;
偏移首地址
MOVDX,3000
LOP:
MOVDX,3F0H
MOVAL,[SI];
从缓冲区取出一个数据送PA
INCSI
MOVDX,3F2H
LOP1:
INAL,DX
ANDAL,08H;
检查
、
=0时,继续查
JZLOP1
LOOPLOP
INCDX
MOVAL,00001100B;
已输出3000个数据,将
HLT
624.编写中断方式进行数据传送的A/D转换的程序
(P312例258)
设用8253定时器产生定时启动,8253使用及联的方式,产生任意所需的A/D转换时间间隔,电路连接如图所示。
8253的通道0工作在方式2,其速率输出负脉冲反向后启动A/D转换器转换。
通道1工作在方式1,这是一种可重复触发的单稳输出,通道1的单稳输出
可控制通道0的
,该门控信号
的上升沿或高电平使通道0技术。
反之,则停止计数。
因此,
信号可控制A/D转换的持续时间,而
能提供两次A/D转换所需的时间。
各通道的工作状况见下表。
通道号
计数值
时钟输入
工作方式
输出
作用
N0
F
2
F/N0
启动A/D转换
1
N1
F/N2
F/N2*N1
N1个持续时间
N2
3
产生级联时间
若时钟F为1MHz,数据采集要求0.1s内采集100个数据,计算一下8253各个通道的计数常数值:
1)0.1s采集100个数,则采样速率为1ms。
由F/N0=1ms得N0=1MHz/1ms=1000
2)共要采集1000个数,则采样持续时间为1s,则N1=1000
3)由于持续时间为1s,即F/N1*N2=1s;
故N2=F/N1=1000
在程序编写中,一般先建立中断矢量表;
后初始化可编程接口芯片。
此时,应将8253定时器的初始化程序放在其他初始化程序之后,因为8253一旦初始化,定时就开始。
最后才写主程序和中断服务程序。
8253-0EQU40H
8253-1EQU42H
8253-2EQU44H
8253-CEQU46H
8255-AEQU80H
8255-BEQU82H
8255-CEQU84H
8255-SEQU86H
8259-
EQU60H
EQU62H
DATASEGMENT
:
DW,
:
DW,
ADBUFDW,1000DUP(?
DATAENDS
CODESEGMENT
ASSUMECS:
CODE,DS:
DATA
START:
PUSHDS
MOVAX,DATA
MOVDS,AX
MOVAX,0;
建立中断矢量表
MOVES,AX
MOVDI,48H×
4;
中断类型号为48H
MOVAX,OFFSETADINT;
ADINT为中断服务程序名
CLD
STOSW
MOVAX,CS
CLI;
关中断
MOVAL,0B0H;
8255A初始化
OUT8255-S,AL
MOVAL,09;
8255A
OUT8255-S,AL;
允许8255A口中断
MOVAL,1BH;
8259A初始化
OUT8259-
AL
MOVAL,48H;
,AL
MOVAL,03;
MOVAL,14H;
8253通道0控制字
OUT8253-C,AL
MOVAX,
;
8253通道0计数值
OUT8253-0,AL
MOVAL,AH
OUT8253-0,AL
MOVAL,73H;
8253通道1控制字
OUT8253-C,AL
MOVAX,
8253通道1计数值
OUT8253-1,AL
MOVAL,96H;
8253通道2控制字
8253通道2计数值
OUT8253-2,AL
MOVBX,OFFSETADBUF;
A/D采集缓冲区首址
MOVCX,ADCONT;
采集数据个数
STI;
开中断
HLT;
等待中断
INCBX;
中断返回准备下一个
LOOPLOP1;
数据地址
POPDS;
采集结束
MOVAX,4C00H
INT21H
ADINTPROCNEAR;
中断服务
INAL,8255-A;
取A/D转换数据
MOV[BX],AL;
数据放缓冲区
ADINTENDP
CODEENDS
ENDSTART
625.设计一块炉温控制接口卡,并编写驱动程序
(P315例259)
利用A/D转换器将反映炉温的模拟信号转换为数字信息Xhou,通过8255A的A口读入,进行f(x)运算后,经8255AB口输出,再经D/A转换为模拟信号输出去调节炉温,控制接口卡的逻辑原理图如图所示。
接口卡的核心是一块8255A芯片,假设其端口地址为300H~303H。
A口设为方式1输入与A/D转换器相连。
A/D转换器的特性如下:
当输入控制端CI出现下跳沿时,就启动A/D转换,转换完一个数据时,在A/D的输出控制端CO会出现负脉冲。
所以将8255A的
接A/D的CI,将
接A/D的CO。
将
接8259A的
只要执行一次读A口的输入指令,CI就会出现负跳变,而启动A/D转换,当一次A/D转换完成后,从CO出现负脉冲。
通过
向
发出中断请求信号。
进入中断服务程序后,读A口,进行A/D输入,调用f(x)运算自程序,然后将结果从B口经D/A输出。
驱动程序如下:
STACKSEGMENTPARASTACK'
STACK'
DB256DUP(?
STACKENDS
CODESEGMENTPARAPUBLIC'
CODE'
STARTPROCFAR
ASSUNECS:
CODE,SS:
STACK
XORAX,AX
PUSHAX;
保存PSP首地址,以便执行完回DOS
CLI;
为装入中断矢量而关中断
MOVES,AX;
0装入ES
MOVDI,28H;
矢量号0AH×
4=28H
MOVAV,offsetADINT;
中断服务程序偏移量送AX
CLD;
0送DF
STOSW;
将AX填入0:
28H,0:
29H
MOVAX,SEGADINT;
中断服务程序段基址送AX
2AH,0:
2BH
;
以上7条指令完成将A/D中断服务程序入口地址装入中断矢量号为0AH的中断矢量表中
INAL,21H;
读入8259AIMR
ANDAL,11111011B
OUT21H,AL;
开放
中断
MOVDX,303H;
指向8255控制口
MOVAL,10110000B;
设8255AA组方式1输入,B组方式0输出
MOVAL,00001001B
OUTDX,AL;
开放8255AA组中断
MOVDX,300H;
指向825A口数据
INAL,DX;
虚读使
负跳变启动A/D转换
STI;
初始化完毕开中断
……;
执行其他可能存在的主程序
……
RET;
返回DOS
STARTENDP
中断服务程序:
ADINTPROCFAR
SIT;
为中断嵌套而开中断
PUSHES
PUSHAX
PUSHBX
PUSHCX
PUSHDX
PUSHSI
PUSHDI
PUSHBP;
保存本服务程序用到的现场
MOVDX,300H
INAL,DX;
A/D输入
CALLIN;
调用控制算法子程序
MOVDX,301H
OUTDX,AL;
从D/A输出
MOVAL,20H
OUT20H.AL;
向8259A送EOI命令
POPBP
POPDI
POPSI
POPDX
POPCX
POPBX
POPAX
POPDS
POPES;
恢复现场
IRET;
中断返回
ADINTENDP
INPROCNEAR
……;
控制算法子程序
INENDP
ENDSTARS
626.ADC0809与8088CPU的计入口硬件连接图及软件设计
(P318例260)
(1)连接图如图所示。
(2)软件设计
下面示出采用程序查询法和中断法的汇编源程序
1)用程序查询法将通道1的模拟量转换成数字量,结果放于DATA单元。
汇编源程序段:
MOVDX,01H;
模拟通道1端口地址
TESTO:
MOVDX,09H;
模拟通道1状态口地址
INAL,DX;
读入EOC状态
ANDAL,80H;
测试EOC状态
JZTESTO;
EOC为0,转换未完成,继续测试
MOVDX,01H;
EOC为0,转换完毕
读取结果
MOVDATA,AL;
存入指定单元
也可以将ADDA、ADDB、ADDC接到数据总线的D0、D1、D2上,则各个模拟通道共用相同数据端口地址和状态贷款地址,而用数据线上低3位的不同状态去选通模拟通道。
2)采用中断法,将通道1的模拟量转换成数字量,结果放于DATA单元。
当使用中断法时,应将ADC0809的EOC连接到系统中断请求输入端INTR上,转换结束时,EOC变为高电平,向CPU提出中断请求。
在中断服务程序中,CPU读取转换结果,并送结果单元保存。
主程序段:
MOVDX,01H;
OUTDX,AL;
WA:
STI;
……
JMPWA;
等待A/D转换结束
中断服务程序段:
MOVDX,01H
INAL,DX;
读入转换结果数据
MOVDATA,AL;
HLT
627.分析一个典型的实时控制系统
(P324例263)
图中是一个典型的对恒温装置进行实时控制的系统模型,图中,A/D采用ADC0809,D/A用DAC0832。
恒温装置由电热丝加热,恒温装置的温度通过传感器经电路处理后加到A/D上,由微机将当前的温度值读入,设对应温度0~
C,经A/D转换后的值为0~250。
装置的加热量由D/A的输出来控制,D/A输出的值越大,加热产生的热量就越多,相应的温度就越高。
当加热产生的热量与装置在所处的环境中散发的热量相等时,该装置的温度就能够保持稳定。
因此,为保持恒温装置的温度恒定,可根据A/D检测到的温度值来控制D/A的输出。
可建立一个简单的控制模型来实现该恒温控制。
在这个模型中,设恒温装置的温度要求控制在
左右,为使得该装置的温度保持稳定,假定可采用如下的控制方法来达到要求:
D/A的输出值为250减去A/D测得的温度值。
那么,只要根据A/D测得的温度值,经微机运算后,由D/A输出相应的控制值,最终能够使温度达到平衡,从而达到保持该装置恒温的目的。
实现该模型的控制程序如下:
L1:
OUT90H,AL;
选择ADC0809的输入通道0(90H),并启动转换
CALLDELAY;
延时约150微秒,等待转换结束
IN90H,AL;
将A/D转换的结果独到AL中
MOVBL,AL
MOVAL,0FAH
SUBAL,BL;
求差值
OUT80H,AL;
控制值送到D/A
JMPL1
628.编写采用无条件传送方式轮流采集的模拟信号的程序
(P325例264)
如图示,轮流从
~
采集8路模拟信号,并把采集到的数字量存入0100H开始的8个单元内的程序。
程序如下:
MOVDI,0100H;
设置存放数据的首址
MOVBL,08H;
采集8次计数器
MOVAH,00H;
选0通道
AA1:
MOVAL,AH
MOVDX,ADPORT;
设置ADC0809芯片地址
OUTDX,AL;
使ALE、START有效,选择模拟通道
MOVCX,0050H
WAIT:
LOOPWAIT;
延时,等待A/D转换
INAL,DX;
使OUTPUTENABLE有效,输入数据,见上图
MOV[DI],AL;
保存数据
INCAH;
换下一个模拟通道
INCDI;
修改数据区指针
DECBL
JNZAA1
629.利用8255A连接ADC0809与8086CPU,试编写程序
(P334例270)
如图示:
采用查询方式,连续转换8个通道的模拟量的程序,如下:
DATA为存放8个通道转换后的结果。
MOVCL,8
MOVBL,80H
MOVSI,0
MOVD