安徽工业大学微机原理与接口技术实验报告下.docx
《安徽工业大学微机原理与接口技术实验报告下.docx》由会员分享,可在线阅读,更多相关《安徽工业大学微机原理与接口技术实验报告下.docx(25页珍藏版)》请在冰豆网上搜索。
安徽工业大学微机原理与接口技术实验报告下
《微机原理与接口技术实验报告下》
指导教师:
陆勤
姓名:
程少锋
学号:
139074366
班级:
物联网131班
实验三8253、8255、8259综合实验
1.8253计数器实验
要求:
计数器1方式0计数,计满3个数产生中断,中断5次后结束。
实验线路见图6-6:
图6-68253计数器实验电路图
实验程序:
INTPORT1EQU0FF80H;8259A的偶地址入口
INTPORT2EQU0FF81H;8259A的偶地址入口
INTQ3EQUINTREEUP3;INTREEUP3地址
TCONTR0EQU0043H;8253端口地址
TCON1EQU0041H;8253端口地址
PAEQU0FF20H;字位口
PBEQU0FF21H;字形口
PCEQU0FF22H;键入口
codesegment
assumecs:
code
ORG12D0H;源地址
START:
JMPSTART0;跳转到START0
BUFDB?
?
?
?
?
?
;六字节缓冲区
intcntdb?
;一字节的缓冲区
data1
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h
db0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH;七段码定义
START0:
CLD;置方向位
CALLBUF1;调用子程序BUF1
CALLWRINTVER;WRITEINTRRUPT
MOVAL,13H;写ICW1,边沿触发,单片,需要ICW4
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H;ICW2,中断类型号高5位
MOVDX,INTPORT2
OUTDX,AL
MOVAL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统
OUTDX,AL
MOVAL,0F7H
OUTDX,AL
MOVintcnt,01H;TIME=1
MOVDX,TCONTR0;指向控制口
MOVAL,51H;8253控制字,通道1,方式0,只读/写低字节,BCD码计数
OUTDX,AL;送控制字
MOVDX,TCON1;指向控制口
MOVAL,03;计数值低字节
OUTDX,AL;送控制字
MOVDX,0FF23H;指向8255A控制口
MOVAL,80;A口方式0,输出,C口上半部输出,B口方式0,输出,C口下半部输出
OUTDX,AL;送控制字
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,03;计数值低字节
OUTDX,AL
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
MOVDX,INTPORT1
OUTDX,AL
popdx
popcx
popbx
popax
IRET;软中断返回
DISP:
MOVAL,0FFH;00H
MOVDX,PA;清零
OUTDX,AL
MOVCL,0DFH;20H
MOVBX,OFFSETBUF
DIS1:
MOVDX,PC
OUTDX,AL
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,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
RET
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;8259A的偶地址入口
INTPORT2EQU0FF81H;8259A的奇地址入口
INTQ3EQUINTREEUP3
TCONTR0EQU0043H;8253端口地址
TCON1EQU0041H;8253端口地址
IOCONPTEQU0FF2BH;8255A 的端口地址
IOBPTEQU0FF29H;8255A 的端口地址
IOAPTEQU0FF28H;8255A 的端口地址
PAEQU0FF20H;字位口
PBEQU0FF21H;字形口
PCEQU0FF22H;键入口
ORG12D0H;源地址
START:
JMPSTART0
BUFDB?
?
?
?
?
?
;6字节缓冲区
intcntdb?
;1字节缓冲区
WEIKONGDB?
;1字节缓冲区
data1
db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h
db0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH
START0:
CLD;置方向位
CALLBUF1
CALLWRINTVER;WRITEINTRRUPT
MOVAL,13H;写ICW1,边沿触发,单片,需要ICW4
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H;ICW2,中断类型号高5位
MOVDX,INTPORT2
OUTDX,AL
MOVAL,09H;写ICW4,BUF位在缓冲方式下工作,8086/8088系统
OUTDX,AL
MOVAL,0F7H
OUTDX,AL
MOVintcnt,50;软件计数50(1秒=20ms*50)
MOVDX,TCONTR0
MOVAL,74H;通道1,先读/写低字节,再读/写高字节,方式2,二进制数
OUTDX,AL
MOVDX,TCON1;计数器1定时20ms
MOVAX,40000
OUTDX,AL
MOVAL,AH;读入计数值的高字节
OUTDX,AL
MOVDX,0FF2BH
MOVAL,82H;A口方式0,输出,C口上半部输出,B口方式0,输入,C口下半部输出
OUTDX,AL
MOVWEIKONG,0FEH;初始PA0对应位亮
MOVAL,WEIKONG
MOVDX,0FF29H
OUTDX,AL
STI;开中断
WATING:
CALLDISP;DISP8253-A
JMPWATING
WRINTVER:
MOVAX,0H
MOVES,AX
MOVDI,002CH;目的地址
LEAAX,INTQ3;INTQ3的偏移地址
STOSW
MOVAX,0000h
STOSW
RET
INTREEUP3:
DECINTCNT;INTCNT减1
JNZINTRE2
MOVINTCNT,50
ROLWEIKONG,1
MOVDX,IOAPT
MOVAL,WEIKONG
OUTDX,AL
INTRE2:
MOVAL,20H
MOVDX,INTPORT1
OUTDX,AL
IRET;软中断返回
DISP:
MOVAL,0FFH;00H
MOVDX,PA
OUTDX,AL
MOVCL,0DFH;20H
MOVBX,OFFSETBUF
DIS1:
MOVDX,PC
OUTDX,AL
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,0000H
LOOP$
POPCX
CMPCL,0FEH;01H
JZLX1;相等转LX1
INCBX
RORCL,1;循环右移一位,指示灯又移变亮
JMPDIS1
LX1:
MOVAL,0FFH;指示灯全灭
MOVDX,PB
OUTDX,AL
RET
BUF1:
MOVBUF,08H
MOVBUF+1,02H
MOVBUF+2,05H
MOVBUF+3,03H
MOVBUF+4,17H
MOVBUF+5,0AH
RET
CODEENDS
ENDSTART
思考:
硬件修改:
将连接在CLK1,GATE1,OUT1的连线改接到CLK0,GATE0,OUT0上。
接在PB口的线与接在PA口的线互换。
软件修改:
按照下面对相应部分修改
1、TCON1EQU0041H改为TCON1EQU0040H
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:
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,使其灯无显示MOVDX,PA
OUTDX,AL
MOVCL,0DFH;将0DFH给CL
MOVBX,OFFSETBUF;取BUF的偏移地址给BX
DIS1:
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端口输出
OUTDX,AL
MOVAL,CL;显示
MOVDX,PA
OUTDX,AL
PUSHCX;CX入栈
DIS2:
MOVCX,00A0H;循环00A0H次,延时
LOOP$
POPCX;CX出栈
CMPCL,0FEH;Cl与0FEH比较
JZLX1;Cl与00A0H相等,则程序跳转到LX1
INCBX ;BX自加1
RORCL,1;Cl循环左移1位
JMPDIS1;循环显示
LX1:
MOVAL,0FFH;PB端口清零
MOVDX,PB
OUTDX,AL
RET;中断返回
BUF1:
MOVBUF,00H
MOVBUF+1,08H
MOVBUF+2,00H
MOVBUF+3,09H
MOVBUF+4,00H
MOVBUF+5,00H
RET
CODEENDS
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)实验程序清单
CODESEGMENT;
ASSUMECS:
CODE
INTPORT1EQU0FF80H;8259A偶地址入口
INTPORT2EQU0FF81H;8259A奇地址入口
INTQ3EQUINTREEUP3;中断源IR3地址
TCONTR0EQU0043H;8253端口地址
TCON1EQU0041H;8253端口地址
IOCONPTEQU0FF2BH
IOBPTEQU0FF29H
IOAPTEQU0FF28H
PAEQU0FF20H;字位口
PBEQU0FF21H;字形口
PCEQU0FF22H;键入口
ADPORTEQU0FE00H;ADC0809端口地址
ORG12D0H;源地址
START:
JMPSTART0;跳转到START0
BUFDB?
?
?
?
?
?
;定义6字节的缓冲区
intcntdb?
RESDB?
data1db0c0h,0f9h,0a4h,0b0h,99h,92h,82h,0f8h,80h,90h,88h,83h,0c6h
db0a1h,86h,8eh,0ffh,0ch,89h,0deh,0c7h,8ch,0f3h,0bfh,8FH;
定义七段码
START0:
CLD;置方向位
CALLBUF1;调用BUF1
CALLWRINTVER;调用WRINTVER
MOVAL,13H;初始化ICW1,单片,边沿触发,设置ICW4
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H;写ICW2,允许IR3中断
MOVDX,INTPORT2
OUTDX,AL
MOVAL,09H;写ICW4,8259A在缓冲方式下工作,8086/8088系统
OUTDX,AL
MOVAL,0F7H;写OCW1,允许中断源IR3,其余均被屏蔽
OUTDX,AL
MOVintcnt,25
MOVDX,TCONTR0
MOVAL,74H;8253工作通道1,先读(写)低字节,再读(写)高字节,方式4,二进制计数
OUTDX,AL
MOVDX,TCON1
MOVAX,40000;8253初始值40000
OUTDX,AL
MOVAL,AH;写初值的高字节
OUTDX,AL
MOVDX,0FF2BH;8255初始化,PA口方式0,输出
MOVAL,82H
OUTDX,AL
STI;开中断
WATING:
CALLDISP;调用显示程序
JMPWATING;循环,延时
WRINTVER:
MOVAX,0H
MOVES,AX;ES指向AX
MOVDI,002CH;置DI初值为002CH
LEAAX,INTQ3;取INTQ3的初值
STOSW
MOVAX,0000h
STOSW