安徽工业大学微机原理与接口技术实验报告下Word下载.docx
《安徽工业大学微机原理与接口技术实验报告下Word下载.docx》由会员分享,可在线阅读,更多相关《安徽工业大学微机原理与接口技术实验报告下Word下载.docx(25页珍藏版)》请在冰豆网上搜索。
START0:
CLD;
置方向位
CALLBUF1;
调用子程序BUF1
CALLWRINTVER;
WRITEINTRRUPT
MOVAL,13H;
写ICW1,边沿触发,单片,需要ICW4
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H;
ICW2,中断类型号高5位
MOVDX,INTPORT2
MOVAL,09H;
写ICW4,BUF位在缓冲方式下工作,8086/8088系统
MOVAL,0F7H
MOVintcnt,01H;
TIME=1
MOVDX,TCONTR0;
指向控制口
MOVAL,51H;
8253控制字,通道1,方式0,只读/写低字节,BCD码计数
OUTDX,AL;
送控制字
MOVDX,TCON1;
MOVAL,03;
计数值低字节
MOVDX,0FF23H;
指向8255A控制口
MOVAL,80;
A口方式0,输出,C口上半部输出,B口方式0,输出,C口下半部输出
STI;
开中断
WATING:
CALLDISP;
DISP825359
JMPWATING
WRINTVER:
MOVAX,0H
MOVES,AX
MOVDI,002CH;
目的地址
LEAAX,INTQ3;
INTQ3的偏移地址
STOSW;
存字
MOVAX,0000h;
清零
STOSW
RET;
中断返回
INTREEUP3:
pushax;
入栈
pushbx
pushcx
pushdx
MOVDX,TCON1;
MOVAL,INTCNT
CALLCONVERS
MOVBX,OFFSETBUF
MOVAL,10H
MOVCX,05H;
置循环数
INTRE0:
MOV[BX],AL;
将Al中的值存在[BX]中
INCBX;
BX加1
LOOPINTRE0;
循环
ADDINTCNT,01H;
循环数是五次
CMPINTCNT,06H
JNAINTRE2
CALLBUF2;
DISP:
good
INTRE1:
CALLDISP
JMPINTRE1
CONVERS:
ANDAL,0FH;
显示次数
MOVBX,offsetbuf
MOV[BX+5],AL
RET
INTRE2:
MOVAL,20H
popdx
popcx
popbx
popax
IRET;
软中断返回
MOVAL,0FFH;
00H
MOVDX,PA;
MOVCL,0DFH;
20H
MOVBX,OFFSETBUF
DIS1:
MOVDX,PC
OUTDX,AL
MOVAL,[BX]
MOVAH,00H
PUSHBX
MOVBX,OFFSETDATA1
ADDBX,AX
POPBX
MOVDX,PB
MOVAL,CL
MOVDX,PA
PUSHCX
DIS2:
MOVCX,00A0H
LOOP$
POPCX
CMPCL,0FEH;
01H
JZLX1
INCBX
RORCL,1;
SHRCL,1
JMPDIS1
LX1:
MOVAL,0FFH
BUF1:
MOVBUF,08H
MOVBUF+1,02H
MOVBUF+2,05H
MOVBUF+3,03H
MOVBUF+4,05H
MOVBUF+5,09H
RET
BUF2:
MOVBUF,09H
MOVBUF+1,00H
MOVBUF+2,00H
MOVBUF+3,0dH
MOVBUF+4,10H
MOVBUF+5,10H
CODEENDS
ENDSTART
思考:
如果计数器0方式0计数,计满5个数产生中断,中断3次后结束。
硬件软件如何修改?
硬件修改:
将连接在CLK1,GATE1,OUT1的连线改接到CLK0,GATE0,OUT0上。
程序修改:
将程序对应部分做如下修改
1、TCON1EQU0041H改为TCON1EQU0040H
2、将8253控制字由MOVAL,51H改为MOVAL,11H
3、计数值低字节将MOVAL,02改为MOVAL,04
4、将CMPINTCNT,06H改为CMPINTCNT,04H;
2、8253定时器实验
用8253定时器1通道定时,每隔1秒使PA口的指示灯的状态右移一位。
主程序反复游走显示8253-A。
8253定时器实验线路见图6-7:
图6-78253计数器实验电路图
CODESEGMENT;
ASSUMECS:
CODE
INTPORT1EQU0FF80H;
INTPORT2EQU0FF81H;
8259A的奇地址入口
INTQ3EQUINTREEUP3
TCONTR0EQU0043H;
TCON1EQU0041H;
IOCONPTEQU0FF2BH;
8255A
的端口地址
IOBPTEQU0FF29H;
IOAPTEQU0FF28H;
ORG12D0H;
JMPSTART0
;
6字节缓冲区
1字节缓冲区
WEIKONGDB?
db0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH
CALLBUF1
MOVAL,13H;
MOVDX,INTPORT2
MOVAL,09H;
MOVintcnt,50;
软件计数50(1秒=20ms*50)
MOVDX,TCONTR0
MOVAL,74H;
通道1,先读/写低字节,再读/写高字节,方式2,二进制数
MOVDX,TCON1;
计数器1定时20ms
MOVAX,40000
MOVAL,AH;
读入计数值的高字节
OUTDX,AL
MOVDX,0FF2BH
MOVAL,82H;
A口方式0,输出,C口上半部输出,B口方式0,输入,C口下半部输出
MOVWEIKONG,0FEH;
初始PA0对应位亮
MOVAL,WEIKONG
MOVDX,0FF29H
STI;
开中断
CALLDISP;
DISP8253-A
MOVAX,0000h
DECINTCNT;
INTCNT减1
JNZINTRE2
MOVINTCNT,50
ROLWEIKONG,1
MOVDX,IOAPT
MOVAL,WEIKONG
OUTDX,AL
IRET;
MOVAL,0FFH;
MOVCX,0000H
JZLX1;
相等转LX1
循环右移一位,指示灯又移变亮
MOVAL,0FFH;
指示灯全灭
MOVBUF+4,17H
MOVBUF+5,0AH
CODEENDS
ENDSTART
接在PB口的线与接在PA口的线互换。
软件修改:
按照下面对相应部分修改
2、将MOVAL,74H改为MOVAL,34H;
3、将MOVAL,82H改为MOVAL,90H
4、将MOVWEIKONG,0FEH改为MOVWEIKONG,07FH
5、将MOVINTCNT,50改为MOVINTCNT,100
6、将MOVAL,WEIKONG改为MOVAL,WEIKONG
7、将ROLWEIKONG,1改为RORWEIKONG,1
8、将RORCL,1改为ROLCL,1
9、将MOVBUF+5,0AH改为MOVBUF+5,0BH
五、本次实验总结
实验过程中把学过的计算机编译原理以及操作系统的知识强化,能够把课堂上学的知识通过自己设计的程序表示出来,加深了对理论知识的理解。
实验五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:
ADPORTEQU0FF80h;
8259A偶地址入口
PAEQU0FF20H;
PBEQU0FF21H;
PCEQU0FF22H;
ORG1000H;
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
CALLBUF1;
调用BUF1子程序
ADCON:
MOVAX,00
MOVDX,ADPORT;
ADC0809端口地址
OUTDX,AL;
MOVCX,0500H;
;
DELAY:
LOOPDELAY;
空循环,延时
MOVDX,ADPORT;
ADC0809端口地址
INAL,DX
CALLCONVERS;
调用子程序CONVERS
CALLDISP;
调用显示子程序DISP
JMPADCON;
跳转到ADCON
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;
返回
MOVAL,0FFH;
PA端口全置1,使其灯无显示MOVDX,PA
MOVCL,0DFH;
将0DFH给CL
MOVBX,OFFSETBUF;
取BUF的偏移地址给BX
MOVAL,[BX];
将[BX]中的内容取出给Al
MOVAH,00H
PUSHBX;
BX入栈
MOVBX,OFFSETDATA1;
取DATA1的偏移地址给BX
ADDBX,AX;
BX与Ax相加
MOVAL,[BPBX];
将[BX]的内容取到AL中
POPBX;
BX出栈
MOVDX,PB;
Al中得内容在PB端口输出
MOVAL,CL;
显示
MOVDX,PA
PUSHCX;
CX入栈
MOVCX,00A0H;
循环00A0H次,延时
LOOP$
POPCX;
CX出栈
CMPCL,0FEH;
Cl与0FEH比较
JZLX1;
Cl与00A0H相等,则程序跳转到LX1
INCBX ;
BX自加1
RORCL,1;
Cl循环左移1位
JMPDIS1;
循环显示
PB端口清零
MOVDX,PB
RET;
MOVBUF,00H
MOVBUF+1,08H
MOVBUF+3,09H
MOVBUF+4,00H
MOVBUF+5,00H
ENDSTART
2、数据采集实验
要求:
用8253定时器1通道定时,每隔半秒使从ADC0809的0通道IN0采集一个数据,若模拟电压在0-2V范围内(0-102),则使LED显示器L7-L4亮;
若模拟电压大于2V,小于3V,则使L5-L2亮;
若模拟电压大于等于3V,则使LED显示器L3-L0亮。
(主程序重复所采集的数据)
(1)实验接线图
数据采集实验系统接线图见图6-11
图6-11数据采集系统接线图
(2)程序流程图
主程序流程见图6-12
图6-12主程序流程图
中断服务程序流程见图6-13
图6-13中断服务程序流程
(3)实验程序清单
INTPORT1EQU0FF80H;
INTPORT2EQU0FF81H;
8259A奇地址入口
INTQ3EQUINTREEUP3;
中断源IR3地址
TCONTR0EQU0043H;
TCON1EQU0041H;
IOCONPTEQU0FF2BH
IOBPTEQU0FF29H
IOAPTEQU0FF28H
PAEQU0FF20H;
PBEQU0FF21H;
PCEQU0FF22H;
ADPORTEQU0FE00H;
ADC0809端口地址
ORG12D0H;
源地址
JMPSTART0;
定义6字节的缓冲区
RESDB?
data1db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h
CLD;
CALLBUF1;
调用BUF1
CALLWRINTVER;
调用WRINTVER
MOVAL,13H;
初始化ICW1,单片,边沿触发,设置ICW4
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H;
写ICW2,允许IR3中断
MOVDX,INTPORT2
MOVAL,09H;
写ICW4,8259A在缓冲方式下工作,8086/8088系统
MOVAL,0F7H;
写OCW1,允许中断源IR3,其余均被屏蔽
MOVintcnt,25
MOVDX,TCONTR0
MOVAL,74H;
8253工作通道1,先读(写)低字节,再读(写)高字节,方式4,二进制计数
MOVDX,TCON1
MOVAX,40000;
8253初始值40000
MOVAL,AH;
写初值的高字节
OUTDX,AL
MOVDX,0FF2BH;
8255初始化,PA口方式0,输出
MOVAL,82H
STI;
CALLDISP;
调用显示程序
JMPWATING;
循环,延时
MOVAX,0H
MOVES,AX;
ES指向AX
MOVDI,002CH;
置DI初值为002CH
LEAAX,INTQ3;
取INTQ3的初值
MOVAX,0000h