微机原理与接口实验报告.docx
《微机原理与接口实验报告.docx》由会员分享,可在线阅读,更多相关《微机原理与接口实验报告.docx(47页珍藏版)》请在冰豆网上搜索。
微机原理与接口实验报告
微
机
原
理
与
接
口
实验报告
专业班级:
学号:
姓名:
指导老师:
陆勤
实验一8255A应用—数码管动态显示
一、实验目的
1、掌握8255A的工作方式、编程原理和微机接口方法。
2、了解LED数码管动态显示的工作原理及编程方法。
二、实验内容
编制程序,使数码管显示“DICE88”字样。
三、实验程序框图
图6-1实验程序流程图
四、实验步骤
联机模式:
(1)在PC机和实验系统联机状态下,运行实验系统dj8086k.exe(双击桌面OTA图标或通过开始-程序-dj8086k-DJ8086k微机原理与接口技术),新建文件并在编辑窗口输入汇编源程序,再单击工具栏中编译装载,即可完成源文件自动编译、装载目标代码功能,再单击“调试”中“连续运行”或工具图标运行,即开始运行程序。
(2)数码管显示“DICE88”字样。
脱机模式:
(1)在P.态下,通过单板机小键盘,从2DF0地址开始输入机器码(参见附录三),完成后返回监控,输入起始地址2DF0,再按EX键执行。
(2)数码管显示“DICE88”字样。
五、实验程序清单
CODESEGMENT;display"DICE88"
ASSUMECS:
CODE
ORG2DF0H
START:
JMPSTART0
PAEQU0FF20H;字位口
PBEQU0FF21H;字形口
PCEQU0FF22H;键入口
BUFDB?
?
?
?
?
?
data1:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h
db86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH,0F0H,89h,0c1h,87h
;修改89h、0c1h、87h各自对应:
H、U、t
START0:
CALLBUF1
CON1:
CALLDISP
JMPCON1
DISP:
MOVAL,0FFH;00H
MOVDX,PA
OUTDX,AL
MOVCL,0DFH;显示子程序,5ms
MOVBX,OFFSETBUF
DIS1:
MOVAL,[BX]
MOVAH,00H
PUSHBX
MOVBX,OFFSETDATA1
ADDBX,AX
MOVAL,[BX]
POPBX
MOVDX,PB
OUTDX,AL
MOVAL,CL
MOVDX,PA
OUTDX,AL
PUSHCX
DIS2:
MOVCX,00A0H
LOOP$
POPCX
CMPCL,0FEH;01H
JZLX1
MOVAL,0FFH;00H
MOVDX,PA
OUTDX,AL
INCBX
RORCL,1;SHRCL,1
JMPDIS1
LX1:
MOVAL,0FFH
MOVDX,PB
OUTDX,AL
RET
BUF1:
MOVBUF,0DH;实验修改movBUF,0Ah
MOVBUF+1,01H;实验修改movBUF+1,16h
MOVBUF+2,0CH;实验修改movBUF+2,17h
MOVBUF+3,0EH;实验修改movBUF+3,18h
MOVBUF+4,08H;实验修改movBUF+4,00h
MOVBUF+5,08H;实验修改movBUF+5,09h
RET
CODEENDS
ENDSTART
六、思考题:
修改程序使之可以显示其他字符,如“AHUt09”。
见上面程序修改部分
七、实验遇到的难点:
刚开始对发光二极管的控制不到位,总是与想要显示的不相符,后来理解了编码方式后,能够对二极管有一个很好的控制,之后我还自己编写并显示了“ILOVEU”,觉得挺有趣的
实验二8259单级中断控制器实验
一、实验目的
1.掌握8259中断控制器的接口方法。
2.掌握8259中断控制器的应用编程。
二、实验内容
利用8259实现对外部中断的响应和处理,要求程序对每次中断进行计数,并将计数结果送数码显示。
三、实验接线图
图6-2实验二接线图
四、编程指南
⑴ 8259芯片介绍
中断控制器8259A是专为控制优先级中断而设计的芯片。
它将中断源优先级排队、辨别中断源以及提供中断矢量的电路集于一片中。
因此无需附加任何电路,只需对8259A进行编程,就可以管理8级中断,并选择优先模式和中断请求方式。
即中断结构可以由用户编程来设定。
同时,在不需要增加其它电路的情况下,通过多片8259A的级联,能构成多达64级的矢量中断系统。
⑵ 本实验中使用3号中断源IR3,“
”插孔和IR3相连,中断方式为边沿触发方式,每拨1次AN开关产生一次中断,满5次中断,显示“good”。
如果中断源电平信号不符合规定要求,则自动转到7号中断,显示“Err”。
五、实验程序框图
图6-3主程序流程图6-4IR3中断服务程序流程
IR3中断服务程序:
IR7中断服务程序:
图6-5IR7中断服务流程
六、实验步骤
1、按图6-2连好实验线路图。
⑴8259的INT连8088的INTR;⑵8259的INTA连8088的INTA;⑶“
”插孔和8259的3号中断IR3插孔相连,“
”端初始为低电平;⑷8259的CS端接FF80H孔。
2、输入并运行实验程序,系统显示8259-1。
3、按动AN开关按钮,按满5次显示good。
七、实验程序清单
CODESEGMENT;
ASSUMECS:
CODE
INTPORT1EQU0FF80H
INTPORT2EQU0FF81H
INTQ3EQUINTREEUP3
INTQ7EQUINTREEUP7
PAEQU0FF20H;字位口
PBEQU0FF21H;字形口
PCEQU0FF22H;键入口
ORG12D0H
START:
JMPSTART0
BUFDB?
?
?
?
?
?
intcntdb?
data1:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h,0a1h
db86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH
START0:
CLD
CALLBUF1
CALLWRINTVER;WRITEINTRRUPT
MOVAL,13H
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H
MOVDX,INTPORT2
OUTDX,AL
MOVAL,09H
OUTDX,AL
MOVAL,0F7H
OUTDX,AL
MOVintcnt,01H;TIME=1
STI
WATING:
CALLDISP;DISP8259-1
JMPWATING
WRINTVER:
MOVAX,0H
MOVES,AX
MOVDI,002CH
LEAAX,INTQ3
STOSW
MOVAX,0000h
STOSW
MOVDI,003CH
LEAAX,INTQ7
STOSW
MOVAX,0000h
STOSW
RET
INTREEUP3:
CLI
pushax
pushbx
pushcx
pushdx
MOVAL,INTCNT
CALLCONVERS
MOVBX,OFFSETBUF;077BH
MOVAL,10H
MOVCX,05H
INTRE0:
MOV[BX],AL
INCBX
LOOPINTRE0
MOVAL,20H
MOVDX,INTPORT1
OUTDX,AL
ADDINTCNT,01H
CMPINTCNT,06H
JNAINTRE2
CALLBUF2;DISP:
good
INTRE1:
CALLDISP
JMPINTRE1
CONVERS:
ANDAL,0FH
MOVBX,offsetbuf;077AH
MOV[BX+5],AL
RET
INTRE2:
MOVAL,20H
MOVDX,INTPORT1
OUTDX,AL
popdx
popcx
popbx
popax
STI
IRET
INTREEUP7:
CLI
MOVAL,20H
MOVDX,INTPORT1
OUTDX,AL
callbuf3;disp:
err
INTRE3:
CALLDISP
JMPINTRE3
DISP:
MOVAL,0FFH;00H
MOVDX,PA
OUTDX,AL
MOVCL,0DFH;20H;显示子程序,5ms
MOVBX,OFFSETBUF
DIS1:
MOVAL,[BX]
MOVAH,00H
PUSHBX
MOVBX,OFFSETDATA1
ADDBX,AX
MOVAL,[BX]
POPBX
MOVDX,PB
OUTDX,AL
MOVAL,CL
MOVDX,PA
OUTDX,AL
PUSHCX
DIS2:
MOVCX,00A0H
LOOP$
POPCX
CMPCL,0FEH;01H
JZLX1
INCBX
RORCL,1;SHRCL,1
JMPDIS1
LX1:
MOVAL,0FFH
MOVDX,PB
OUTDX,AL
RET
BUF1:
MOVBUF,08H
MOVBUF+1,02H
MOVBUF+2,05H
MOVBUF+3,09H
MOVBUF+4,17H
MOVBUF+5,01H
RET
BUF2:
MOVBUF,09H
MOVBUF+1,00H
MOVBUF+2,00H
MOVBUF+3,0dH
MOVBUF+4,10H
MOVBUF+5,10H
RET
BUF3:
MOVBUF,0eH
MOVBUF+1,18H
MOVBUF+2,18H
MOVBUF+3,10H
MOVBUF+4,10H
MOVBUF+5,10H
RET
CODEENDS
ENDSTART
八、思考题:
若用IR5产生中断,要求修改硬件和软件并调试,修改位置
硬件修改:
将连接到8259的IR3线连接到IR5
软件修改:
在IR5所对应的中断向量的字段中写入中断程序的入口地址,并修改8259A的OCW1命令字指定IR5开放中断。
(1)START0中修改为:
MOVDX,INTPORT2
OUTDX,AL
MOVAL,09H
OUTDX,AL
MOVAL,0DFH
OUTDX,AL
MOVintcnt,01
......
(2)WRINTVER中修改为:
WRINTVER:
.....
MOVDI,0034H
LEAAX,INTQ3
......
实验八8250串口实验
一、实验目的
(1)系统扩展以8250为核心的可编程串行异步通讯接口芯片。
(2)对扩展的串行通讯接口实现自发自收。
二、实验内容
将寄存器AH的内容从10H开始通过8250发送、接收,每次收发后AH的内
容自动增1直到FFH为止,同时将每次接收到的数据,依次写到内存4000H~
40EFH单元中,实现自发自收。
三、编程指南
1、通讯协议
1个起始位,8位数据位,1个停止位,波特率:
4800。
2、8250的内部寄存器的端口地址
*通讯线控制寄存器第7位(DLAB)=0,**DLAB=1
3、8250的内部寄存器格式(见课本)
4、波特率除数锁存器的值与波特率的对应关系(16进制数)
5、8250的初始化编程
(1)设置波特率
(2)设置通讯数据格式
(3)设置操作方式
(4)设置中断允许寄存器
四、实验接线图
五、实验步骤
1.连FF80H孔到CS7,连TXD到RXD(8250实验区)。
2.编辑、调试、运行程序。
3.当系统显示“8250——good”表示自发自收结束,按RST键,系统返回
P态,用内存读写命令检查4000H~40EFH内容是否为10H~FFH,验证其正确性。
六、参考程序
CODESEGMENT;H8250.ASM
ASSUMECS:
CODE;H8250.ASM
DATAEQU0ff80H;BTS-LSB
MSBEQU0ff81H
LINEEQU0ff83H
LSTATEQU0ff85H
PAEQU0FF20H;字位口
PBEQU0FF21H;字形口
PCEQU0FF22H;键入口
ORG29A0H;源地址
START:
JMPSTART0;跳转到START0
BUFDB?
?
?
?
?
?
;定义6字节缓冲区
data1:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0
c6h,0a1h;定义七段码
db86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH
START0:
MOVAL,80H;DLAB=1
MOVDX,LINE
OUTDX,AL
MOVAL,18H;BTS=4800;置波特率因子低8位
MOVDX,DATA;ff80H
OUTDX,AL
MOVDX,MSB;置波特率因子高8位
MOVAL,00
OUTDX,AL
MOVAL,03H;8-BIT,1-STOP
MOVDX,LINE
OUTDX,AL
MOVAL,00;NO-INT
MOVDX,MSB;8001H
OUTDX,AL
MOVAH,10H;AH中的内容
MOVBX,4000H
MAIN:
CALLTXD;调用TXD
CALLRCV;调用RCV
MOV[BX],AL
INCBX;BX自加
INCAH;AH自加
CMPAH,00H;AH与00H作比较
JNZMAIN;不相等,跳转到MAIN
CALLBUF1;调用BUF1
MOVCX,00FFH;将00FFH初始给CX,循环次数
S3:
PUSHCX;CX入栈
CALLDISP;显示
POPCX;CX出栈
LOOPS3;循环
CALLBUF3
S1:
CALLDISP;显示
JMPS1;跳转到S1
TXD:
MOVDX,LSTAT;
WAIT1:
INAL,DX;读取LSTAT中的值(读取线路状态寄存器)
TESTAL,20H;检验D5位是否为1,即检查发送保持器是否为空,不为空则等待
JZWAIT1;不为空等待
MOVAL,AH;从AH中取出发送数据
MOVDX,DATA
OUTDX,AL
RET;中断返回
RCV:
MOVDX,LSTAT
WAIT2:
INAL,DX;读线路状态寄存器
TESTAL,01H;查接收缓冲器是否为满,不满则继续等待
JZWAIT2
TESTAL,0EH
JNZERR;不相等,显示err
MOVDX,DATA
INAL,DX;读取DATA端口值
RET;中断返回
ERR:
CALLBUF2;调用BUF2程序
S2:
CALLDISP;调用显示程序
JMPS2;循环显示
DISP:
MOVAL,0FFH;00H
MOVDX,PA
OUTDX,AL
MOVCL,0DFH;20H;显示子程序,5ms
MOVBX,OFFSETBUF;将BUF的偏移值送BX
DIS1:
MOVAL,[BX];将[AL]中的内容读到Al中
MOVAH,00H
PUSHBX;BX入栈
MOVBX,OFFSETDATA1;将DATA1的偏移地址给BX
ADDBX,AX
MOVAL,[BX];读取对应的七段码
POPBX
MOVDX,PB;输出到PB端口
OUTDX,Al
MOVAL,CL;显示
MOVDX,PA
OUTDX,AL
PUSHCX
DIS2:
MOVCX,00A0H;循环,延时
DELAY:
LOOPDELAY
POPCX
CMPCL,0FEH;01H
JZLX1;相等跳转到LX1
INCBX;BX自加,地址后移一位
RORCL,1;SHRCL,1
JMPDIS1;跳转到DIS1,循环显示
LX1:
MOVAL,0FFH;PB端口清零
MOVDX,PB
OUTDX,AL
RET;中断返回
BUF1:
MOVBUF,08H;显示8250——
MOVBUF+1,02H
MOVBUF+2,05H
MOVBUF+3,00H
MOVBUF+4,17H
MOVBUF+5,17H
RET
BUF2:
MOVBUF,08H;显示err
MOVBUF+1,02H
MOVBUF+2,05H
MOVBUF+3,00H
MOVBUF+4,0EH
MOVBUF+5,18H
RET
BUF3:
MOVBUF,09H;显示good--
MOVBUF+1,00H
MOVBUF+2,00H
MOVBUF+3,0DH
MOVBUF+4,10H
MOVBUF+5,10H
RET
CODEENDS
ENDSTART
思考题
如果使用通讯协议:
1个起始位,7位数据位,2个停止位,波特率:
9600。
系统将如何实现。
解决方案:
将以下部分
MOVAL,18H
MOVDX,DATA
OUTDX,AL
MOVDX,MSB
MOVAL,00
OUTDX,AL
MOVAL,03H
MOVDX,LINE
OUTDX,AL
改为:
MOVAL,0CH
MOVDX,DATA;ff80H
OUTDX,AL
MOVDX,MSB
MOVAL,00
OUTDX,AL
MOVAL,06H
MOVDX,LINE
OUTDX,AL
实验五A/D转换实验
一、实验目的
了解模/数转换基本原理,掌握ADC0809的使用方法;
掌握定时数据采集程序的编制方法。
二、实验内容
1、A/D转换实验
利用实验系统上电位器提供的可调电压作为0809模拟信号的输入,编制程序,将模拟量转换为数字量,通过数码管显示出来。
(1)实验接线图
ADC0809接线见图6-9
图6-9ADC0809接线图
(2)编程指南
ADC0809的START端为A/D转换启动信号,ALE端为通道选择地址的锁存信号,实验电路中将其相连,以便同时锁存通道地址并开始A/D采样转换,其输入控制信号为CS和WR,故启动A/D转换只须如下两条指令:
MOVDX,ADPORT ; ADC0809端口地址
OUTDX,AL ;发CS和WR信号并送通道地址
用延时方式等待A/D转换结果,使用下述指令读取A/D转换结果。
MOVDX,ADPORT; ADC0809端口地址
IN AL,DX
循环不断采样A/D转换的结果,边采样边显示A/D转换后的数字量。
(3)实验程序框图
A/D转换流程见图6-10
图6-10A/D转换流程
(4)实验步骤
①将0809CS4插孔连到译码输出FF80H插孔。
②将通道0模拟量输入端IN0连电位器W1的中心插头AOUT1(0-5V)插孔,8MHZ→T。
③运行实验程序,系统上显示“0809XX”。
“XX”表示输入模拟量转换后的数字量。
④调节电位器Wl,显示器上会不断显示新的转换结果。
模拟量和数字量对应关系的典型值为:
0V→00H+2.5V→80H+5V→FFH
⑤按RST键退出。
(5)实验程序清单
CODESEGMENT;
ASSUMECS:
CODE
ADPORTEQU0FF80h;8259A偶地址入口
PAEQU0FF20H;字位口
PBEQU0FF21H;字形口
PCEQU0FF22H;键入口
ORG1000H;源地址
START:
JMPSTART0;跳转到START0
BUFDB?
?
?
?
?
?
;定义6字节缓冲区
data1:
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,
0c6h,0a1h;定义七段码
db86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH
START0:
CALLBUF1;调用BUF1子程序
ADCON:
MOVAX,00
MOVDX,ADPORT; ADC0809端口地址
OUTDX,AL;发CS和WR信号并送通道地址
MOVCX,0500H;置循环数
;DELAY:
LOOPDELAY;空循环,延时
MOVDX,ADPORT; ADC0809端口地址
INAL,DX
CALLCONVERS;调用子程序CONVERS
CALLDISP;调用显示子程序DISP
JMPADCON;跳转到ADCON
CONVERS:
MOVAH,AL;将ax中的低字节赋给高字节
ANDAL,0FH;保留al中的低四位
MOVBX,OFFSETBUF;buf的偏移地址
MOV[BX+5],AL;将al中的值给[Bx+5]
MOVAL,AH;取al中的高四位
ANDAL,0F0H
MOVCL,04H;值移位数
SHRAL,CL;右移四位
MOV[BX+4],Al;将Al中的值给[BX+4]
RET;返回
DISP:
MOVAL,0FFH;PA端口全置1,使