完整word版微机原理习题 1Word文件下载.docx
《完整word版微机原理习题 1Word文件下载.docx》由会员分享,可在线阅读,更多相关《完整word版微机原理习题 1Word文件下载.docx(15页珍藏版)》请在冰豆网上搜索。
MOVAX,SEGINTR;
形成中断矢量表
MOVDS,AX
MOVDX,OFFSETINTR
MOVAL,N
MOVAH,25H
INT21H
MOVAL,10010000B;
8255初始化
OUT83H,AL
MOVAL,00110101B;
通道0方式2,BCD计数
OUT87H,AL
MOVAL,00H;
置初值1000
OUT84H,AL
MOVAL,10H
MOVAL,01110001B;
通道1方式0,BCD计数
OUT87H,AL
MOVAL,99H;
置初值999
OUT85H,AL
MOVAL,09H
STI
AGAIN:
HLT
JMPAGAIN
中断服务程序:
INTR:
PUSHAX
STI
INAL,80H;
检测开关,合上为0
NOTAL;
取反
OUT81H,AL;
点亮相应LED(合上)
MOVAL,09H
CLI
MOVAL,20H;
普通EOI命令
OUT20H,AL
POPAX
IRET
2)8255A:
B口输出
通道0工作于方式2,取N0=2000
通道1工作于方式3,取N1=1000,即得OUT1频率为1Hz(周期为1秒)的方波,
接到8259A的IRi,边沿触发中断请求。
主程序如下:
MOVAX,SEGINTR;
MOVDS,AX
MOVDX,OFFSETINTR
MOVAL,N
MOVAL,10000000B;
MOVAL,00110101B;
置初值2000
MOVAL,20H
MOVAL,01110111B;
通道1方式3,BCD计数
MOVAL,0FEH;
熄灭LED0
OUT81H,AL
GOON:
JMP
中断服务程序如下:
ROLAL,1;
AL左循环移位1位
点亮下一位LED
OUT20H,AL;
普通EOI结束命令
硬件连接图如下:
4.设8255A的口地址为300H~303H,A口接4个开关K3~K0,B口接一个七段LED显示器,用来显示4个开关所拨通的16进制数字0~F,开关都合上时,显示0,都断开时显示F,每隔2秒钟检测一次,试画出硬件连线图,并编写实现这种功能的程序。
与上题思路相同
8255A:
A口方式0输入,B口方式0输出,端口地址300H~303H
8253:
用于2秒定时,端口地址为304H~307H
2MHz/0.5Hz=4000000
通道0工作于方式2,取N0=4000
通道1工作于方式0,取N1=999,即得OUT1每2秒中断一次。
本题用8253定时中断,中断处理时检测开关状态,并点亮相应的LED。
假设8259A已初始化,主程序如下:
TABLEDB3FH,06H,5BH,4FH,66H,6DH,7DH,07H;
七段码表格
DB7FH,6FH,77H,7CH,39H,5EH,79H,71H
MOVDX,OFFSETINTR
MOVDX,303H
OUTDX,AL
MOVAL,00110101B;
8253初始化,通道0方式2,BCD计数
MOVDX,307H
OUTDX,AL
置初值4000H
MOVDX,304H
OUTDX,AL
MOVAL,40H
通道1方式0,BCD计数
MOVDX,305H
MOVDX,300H
INAL,DX;
ANDAL,0FH;
只保留低4位PA3~PA0
MOVBX,OFFSETTABLE
XLATTABLE
MOVDX,301H
OUTDX,AL;
点亮LED,显示数字
MOVDX,305H
OUTDX,AL
5.利用8255A和ADC0809等芯片设计PC机上的A/D转换卡,设8255A的口地址为3C0H~
3C3H,要求对8个通道各采集1个数据,存放到数据段中以D_BUF为始址的缓冲器中,
试完成以下工作:
(1)画出硬件连接图。
(2)编写完成上述功能的程序。
(2)AD_SUBPROCNEAR
MOVCX,8;
CX作数据计数器
MOVBL,00H;
模拟通道号存在BL中
LEADI,D_BUF;
缓冲区
NEXT_IN:
MOVDX,3C2H;
8255A端口C地址
MOVAL,BL
OUTDX,AL;
输出通道号
MOVDX,3C3H;
指向控制口
MOVAL,00000111B;
PC3置1
送出开始启动信号
NOP;
延时
NOP
MOVAL,00000110B;
PC3复位
送出结束启动信号
C口
NO_CONV:
INAL,DX;
读入C口内容
TESTAL,80H;
PC7,EOC信号
JNZNO_CONV;
PC7=1,未开始转换,等待
NO_EOC:
INAL,DX;
PC7=0,已启动转换
再查PC7
JZNO_EOC;
PC7=0,转换未结束,等待
MOVDX,3C0H;
PC7=1,转换结束,DX指向A口
读入数据
MOV[DI],AL;
存入缓冲区
INCDI
INCBL;
指向下个通道
LOOPNEXT_IN
RET
AD_SUBENDP
6.试利用ADC0809,8253和8259A等芯片设计8通道A/D转换电路。
系统中用8253作定时器,采用中断方式控制采样率,采样率为500Hz。
设8253的通道0输入时钟脉冲为2MHz,输出端OUT0接8259A的IR2,8253的口地址为300H~303H,8259A的口地址为304H和305H,ADC0809的8个输入通道的口地址为308H~30FH,查询EOC信号和状态口地址为306H,ADC0809的输入时钟频率为640KHz,A/D转换的结果依次存入数据段中以BUFFER为始址的内存中,从通道0开始先存入各通道的第一个数据,再存放第二个数据,采集10秒钟后停止工作。
要求:
(1)画出硬件连线图,可以不画具体的译码电路。
(2)编写8253,8259A(只需写入中断屏蔽字)的初始化程序及采集8路模拟信号的中断服务程序。
(1)
(2)因为8253的时钟输入频率为2MHz,而要求的采样频率f=500Hz,即用8253定时,每隔2ms中断一次,因此8253的分频次数(时间常数)N=2MHz/500Hz=4000。
采集10秒钟,共采集10s/2ms=5000次,即8253中断次数为5000次。
DATASEGMENT
BUFFERDB8*5000DUP(?
)
DATAENDS
;
数据采集子程序
8253初始化编程,通道0,方式2,先写低字节,后高字节,BCD计数,时间常数4000
MOVDX,303H
MOVAL,00110101B
MOVDX,300H;
通道0
MOVAX,4000H;
时间常数
MOVAL,AH
8259A设置屏蔽字,仅允许8259A的IR2和键盘中断,其余禁止
MOVAL,11111001B;
屏蔽字
向屏蔽寄存器输出屏蔽字
设置数据缓冲区始址到SI中,计数初值到BX中,等待中断,每通道采完5000次后结束
中断
MOVSI,OFFSETBUFFER;
SI指向数据缓冲区
MOVBX,5000
STI;
开中断
AGAIN:
CMPBX,0
JNZAGAIN
MOVAL,11111101B;
采集完,禁止IR2中断
MOVAH,4CH;
退出中断
中断服务程序,对每个通道均采集一个数据,存入BUFFER
ADINTPROCNEAR
MOVCX,0008H;
设置通道计数器初值
MOVDX,308H;
DX指向ADC通道0
NEXT:
OUTDX,AL;
启动一次转换
PUSHDX;
保存通道号
MOVDX,306H;
DX指向状态口
POLL:
INAL,DX;
读入EOC状态
TESTAL,80H;
EOC(D7)=0?
即开始转换了
JNZPOLL;
非0,循环等待
NO_END:
EOC=0,开始转换
再查EOC是否为1
JZNO_END;
EOC=0,等待转换结束
POPDX;
EOC=1,恢复通道地址
读取结果
MOV[SI],AL;
存储到缓冲区
INCDX;
DX指向下一个通道
INCSI;
地址指针指向下一个缓冲单元
LOOPNEXT;
通道计数器减1,结果非0则循环
DECBX;
为0,缓冲数据计数器减1
MOVAL,20H
MOVDX,304H
开中断
IRET
ADINTENDP
7.利用8255A和AD574A设计数据采集系统,输入模拟电压为0~+10V,若每秒采集100
个数据,转换后的数据字存放在W_BUF开始的缓冲器中,低字节在前,高字节在后,采满
16K字节的数据后停止工作,要求:
(1)画出硬件连线图。
(2)编写启动AD574A工作和读取转换结果的子程序。
(2)16K字节的数据共需要8K=8192次采集
8255A的端口地址
PORT_AEQU0F0H;
A口地址
PORT_BEQU0F1H;
B口地址
PORT_CEQU0F2H;
C口地址
PORT_CTLEQU0F3H;
控制口地址
8255A控制字:
A口和B口工作于方式0,A口、B口和C口的上半部分为输入,C
口的下半部分为输出
LEADI,W_BUF
MOVCX,8192
AD_CONT:
MOVAL,10011010B;
方式字
OUTPORT_CTL,AL;
输出方式字
启动A/D转换
MOVAL,00H
OUTPORT_C,AL;
使CS,CE,R/C均为低
NOP;
NOP
MOVAL,04H
使CE=1,启动A/D转换
MOVAL,03H
使CE=0,CS=R/C=1,结束启动状态
READ_STS:
INAL,PORT_C;
读STS状态
转换(STS=0)完了吗?
JNZREAD_STS;
否,则循环等待
;
转换完成,启动读操作
MOVAL,01H
OUTPORT_C,AL;
使CS=0,CE=0,R/C=1
MOVAL,05H;
使CE=1,CS=0,R/C=1
OUTPORT_C,AL
读取数据,存入BX中
INAL,PORT_A;
读入高4位数据
ANDAL,0FH
MOVBH,AL;
存入BH
INAL,PORT_B;
读入低8位
MOVBL,AL;
存入BL
MOV[DI],BX;
INCDI
结束读操作
MOVAL,03H;
使CE=0,CS=1
CALLDELAY_10MS;
延时10个毫秒
LOOPAD_CONT