上海大学微机实践报告46.docx
《上海大学微机实践报告46.docx》由会员分享,可在线阅读,更多相关《上海大学微机实践报告46.docx(20页珍藏版)》请在冰豆网上搜索。
上海大学微机实践报告46
上海大学微机实践报告
实验四:
D/A转换器实验
【实验目的】
了解D/A转换的基本原理,掌握DAC0832芯片的性能、使用方法及对应的硬件电路。
【实验内容】
编写程序,要求输出锯齿波、三角波及方波,分别用示波器观察波形;如有能力,把三段程序编在一起,循环输出三种波形。
【实验区域电路连接图】
连线:
CS5→8000H;IOWR→IOWR;JX2→JX17;AOUT→示波器。
【程序框图】
三角波
【编程】
1)方波
CODESEGMENT;定义代码段
ASSUMECS:
CODE
ORG1200H
START:
MOVDX,8000H
MOVAL,00H
LOOP1:
OUTDX,AL
CALLDELAY
XORAL,0FFH;高低电平转换
JMPLOOP1
DELAY:
;若干秒延时
MOVBX,0FFH
LOOP2:
DECBX
JNZLOOP2
RET
CODEENDS
ENDSTART
2)锯齿波
CODESEGMENT;定义代码段
ASSUMECS:
CODE
ORG1200H
START:
MOVDX,8000H
MOVAL,00H
LOOP1:
;逐步累加到5V,到最大值后又从零开始累加
OUTDX,AL
NOP
INCAL
JMPLOOP1
CODEENDS
ENDSTART
LOOP2:
OUTDX,AL
MOVAL,00H;达到最大值后,再从00H不断累加,使波形上升
JMPLOOP1;循环输出锯齿波
CODEENDS
ENDSTART
3)三角波
CODESEGMENT;定义代码段
ASSUMECS:
CODE
ORG1200H
START:
MOVDX,8000H
MOVAL,00H
LOOP1:
OUTDX,AL
INCAL
CMPAL,0FFH
JZLOOP2;进行三角波下降沿
JMPLOOP1
LOOP2:
OUTDX,AL
DECAL
NOP
JZLOOP1;重新进行三角波上升沿
JMPLOOP2
CODEENDS
ENDSTART
【问答题】
1、DAC产生波形的频率如何调节?
频率上限的限制取决于那些因素?
解:
如果是方波只要调节延时程序就可以实现改变频率。
三角波和锯齿波的频率除了取决于程序执行的长度,及延时时间,还取决于CPU频率和转换频率。
频率的上限取决于CPU频率和转换频率。
2、如果要求产生正弦波一般用什么方法实现?
具体如何实施的(给个方案)。
解:
在三角波的程序中由于上升时比较操作用CMPAL,0FFH。
先根据你的采样率(确切说是设计的分辨率,例如16),把一个周期的平分n份,算出正弦值;每隔1/n周期,送算出的了n个数值;n越大正弦波形越明显,但不能超过系统频率。
【心得体会】
本次试验的程序相对比较简单。
主要是输出三个波形:
方波、锯齿波、三角波。
方波的编译思想主要是现在AL中寄存一个低电平,输出之后取反为高电平,之后跳转回去输出,在取反为低电平,如此循环,中间再加入延时程序锯齿波的思路就是让AL寄存器从0开始累加,每加1就输出。
知道最后AL寄存器里面的值就变成了0FFH。
这个时候在执行加1就会变成00H。
之后在循环这段程序就完成了锯齿波的输出。
如果需要改变频率可以加入NOP指令。
三角波的编译思想和锯齿波的相差不多。
当AL寄存器里面的值变成0FFH后执行减1操作,然后输出;当减到00时再执行加一操作,如此循环。
JZLOOP2两步操作,而下降时只用了JZLOOP1一步操作,因此加入一个NOP以保持上下时间相等。
【实验波形】
1,方波
示波器横向每格时间标度为:
1ms/格
示波器纵向每格电压幅度为:
1V/格
由图:
方波纵向有2.6格,则方波的幅度为2.6x1V=2.6V;方波一个周期有2.4格,因此方波周期为1msx2.4=2.4ms。
2,锯齿波
示波器横向每格时间标度为:
1ms/格
示波器纵向每格电压幅度为:
1V/格
由图:
锯齿波纵向有5.6格,锯齿波的幅度为5.6x1V=5.6V;锯齿波一个周期有2格,因此方波周期为1msx2=2ms。
3,三角波
示波器横向每格时间标度为:
1ms/格
示波器纵向每格电压幅度为:
1V/格
由图可以看出三角波纵向有5.6格,因此三角波的幅度为5.6x1V=5.6V;三角波一个周期有5.2格,因此方波周期为1msx5.2=5.2ms。
实验五:
A/D转换器实验
【实验目的】
了解模/数转换基本原理,掌握ADC0809的使用方法。
掌握A/D转换与计算机的接口方法,了解ADC0809芯片的转换性能及编程,了解计算机如何进行数据采集。
【实验内容】
编写程序,用查询方式采样输入模拟电压(模拟量电压从实验装置的电位器接入),并将其转换为二进制数字量,用发光二极管显示。
【实验区域电路连接图】
连线:
IN0→AOUT1(可调电压,VIN→+5V);IOWR→IOWR;IORD→IORD;CLK→500K(单脉冲与时钟单元);ADDA、ADDB、ADDC→GND;CS4→8000HJX6→JX17(数据总线)
PA0~7→L1~L8
【程序框图】
【编程】
CODESEGMENT
ASSUMECS:
CODE
ORG1000H
START:
MOVDX,0FF2BH
MOVAL,80H
OUTDX,AL;设置8255方式,A口出
L1:
MOVDX,8000H;ADC0809端口地址
MOVAL,0;选择通道0
OUTDX,AL;发CS和WR信号并送通道地址
MOVAH,0FFH
DELAY:
DECAH
JNZDELAY;延时
MOVDX,8000H
INAL,DX;读0809转换结果
NOTAL
MOVDX,0FF28H
OUTDX,AL;通过8253A口控制LED
JMPL1;循环采样A/D转换的结果
CODEENDS
ENDSTART
【数据记录】
输入模拟电压二进制数字量
【问答题】
1、0809获取A/D转换数据的方法有哪几种?
比较这些方法的优劣。
解:
(1)0809获取A/D转换数据的方法有3种:
中断方式、查询方式、延时方式。
(2)查询方式主要由你编写的程序进行查询状态来获取数据的;
中断方式主要是通过系统本身的硬件机制再通过你自己编写的中断服务函数做出相应操作的;
两者主要区别在实时性上中断处理很及时,只要发生这个时间久会执行对应操作,查询的话要等到你查询状态之后才会做出相应操作。
中断的主要优势在程序较复杂的情况下和对实时性要求高的情况下更明显。
2、为获取比较平稳的数据显示,采取数据滤波措施,你能想到采用什么滤波措施比较合理。
(列出算法,程序实现的流程图)
解:
中值滤波法:
这种方法的原理是将采集到的若干个周期的变量值进行排序,然后取排好顺序的值得中间的值,这种方法可以有效的防止受到突发性脉冲干扰的数据进入。
在实际使用时,排序的周期的数量要选择适当,如果选择过小,可能起不到去除干扰的作用,选择的数量过大,会造成采样数据的时延过大,造成系统性能变差。
【心得体会】
这次的实验与上次相反,是A/D转换器实验。
为了得到我们想要的效果,程序采用延时方式等待A/D转换结果。
通过本实验程序的编写,我熟悉了ADC0809的使用方法,掌握A/D转换与计算机的接口方法,了解了模/数转换基本原理。
本实验程序相对来说比较简单,主要涉及到对ADC0809和8255两芯片的端口写控制字,这在前面几个实验中已经多次运用。
重点在于如何确认ADC0809转换数据完毕。
实验六、七:
8259中断控制
【实验目的】
1,学习8086/8088CPU中断系统的知识。
2,学习8259中断控制器的使用。
【实验内容】
1,编写程序,使8255的A口控制LED灯。
CPU执行主程序时四个绿灯亮。
用“
”作为8259的IR3的输入信号,向CPU请求中断。
CPU在中断服务程序中熄灭绿灯,并使4个红灯亮。
中断服务程序结束,又返回主程序,再使绿灯亮。
2,编写程序,使8255的A口控制LED灯。
CPU执行主程序时四个绿灯亮。
用“
”作为8259的IR3的输入信号,向CPU请求中断。
CPU在中断服务程序中每中断一次,使4个红色LED灯中每次只亮一个灯,并随每一次中断逐次移动一个灯的位置,中断服务程序结束,又返回主程序,再使绿灯亮。
【实验区域电路连接图】
连线:
8259的INT连8088的INTR(Xl5);
8259的INTA连8088的INTA(Xl2);
“
”插孔和8259的3号中断IR3插孔相连;(单脉冲与时钟单元);
8259的CS端接EX1(60H);
连JX4→JX17;IOWR→IOWR;IORD→IORD;A0→A0;
PA0…PA3→L2,L6,L10,L14;PA4…PA7→L3,L7,L11,L15。
【程序框图】
1:
2:
【编程】
1:
CODESEGMENT
ASSUMECS:
CODE
INTPORT1EQU0060H
INTPORT2EQU0061H
INTQ3EQUINTREEUP3
INTCNTDB?
ORG1200H
START:
CLD
MOVDX,0FF2BH
MOVAL,80H;设置8255方式字,A口出
OUTDX,AL
CALLWRINTVER;WRITEINTRRUPT
MOVAL,13H;ICW1=00010011B,边沿触发、单8259、需ICW4
MOVDX,INTPORT1
OUTDX,AL
MOVAL,08H;ICW2=00001000B,IR3进入则中断号=0BH
MOVDX,INTPORT2
OUTDX,AL
MOVAL,09H;ICW4=00001001B,非特殊全嵌套方式、缓冲/从、正常EOI
OUTDX,AL
MOVAL,0F7H;OCW1=11110111B
OUTDX,AL
MOVINTCNT,01H;延时
STI
WATING:
MOVDX,0FF28H;主程序绿灯亮(低四位为0则绿灯亮,高四位为1故红灯灭)
MOVAL,0F0H
OUTDX,AL
JMPWATING
WRINTVER:
MOVAX,0H
MOVES,AX
MOVDI,002CH;中断向量地址2CH=0BH*4
LEAAX,INTQ3
STOSW;送偏移地址
MOVAX,0000h
STOSW;送段地址
RET
INTREEUP3:
CLI;中断服务子程序开始
PUSHAX
PUSHDX
MOVDX,0FF28H;中断服务子程序执行红灯亮
MOVAL,0FH;低四位为1则绿灯灭,高四位为0故红灯亮
OUTDX,AL
CALLDELAY1S
MOVAL,20H;OCW2=00100000B;非特殊EOI命令,结束命令,用于完全嵌套方式的中断结束
MOVDX,INTPORT1
OUTDX,AL
POPDX
POPAX
STI;开系统中断
IRET
DELAY1S:
MOVCX,0FFFFH
MOVBX,5
L:
DECCX
JNZL
DECBX
JNZL
RET
CODEENDS
ENDSTART
2:
CODESEGMENT
ASSUMECS:
CODE
ORG1200H
INTCNTDB0EFH;全局变量INTCNT=11101111B
START:
MOVDX,0FF2BH
MOVAL,80H;设置8255方式字:
A口出
OUTDX,AL
MOVAL,0FFH
MOVDX,0FF28H
OUTDX,AL
CALLY2
MOVAL,13H;ICW1=00010011B,边沿触发、单8259、需ICW4
MOVDX,60H
OUTDX,AL
MOVAL,08H;ICW2=00001000B,IR3(ICW2低两位自动跳变为11,即00001011B)进入则中断号=0BH
MOVDX,61H
OUTDX,AL
MOVAL,09H;ICW4=00001001B,非特殊全嵌套方式、缓冲/从、正常EOI
OUTDX,AL
MOVAL,0F7H;OCW1=11110111B
OUTDX,AL
MOVINTCNT,0EFH
STI
Y1:
MOVDX,0FF28H;主程序绿灯亮(低四位为0则绿灯亮,高四位为1故红灯灭)
MOVAL,0F0H;D7…D4=1111,D3…D0=0000
OUTDX,AL
JMPY1;循环
Y2:
MOVAX,0H
MOVES,AX
MOVDI,002CH;中断向量地址2CH=0BH*4
LEAAX,INTREEUP3
STOSW;送偏移地址
MOVAX,0000H
STOSW;送段地址
RET
INTREEUP3:
CLI
PUSHAX;保护现场
PUSHDX
MOVDX,0FF28H;中断服务子程序执行红灯亮
MOVAL,INTCNT
OUTDX,AL
ROLINTCNT,1;循环左移一位
JCY4
MOVINTCNT,0EFH
Y4:
MOVAX,10H;延时服务程序
INTRE0:
MOVCX,10000
LOOP$
DECAX;AX=AX-1
JNZINTRE0
INTER2:
;设置OCW2
MOVAL,20H;D5=EOI=1,发送EOI指令结束中断
MOVDX,60H
OUTDX,AL
POPDX
POPAX
STI;开系统中断
IRET
CODEENDS
ENDSTART
【心得体会】
本次的实验分两次进行,循序渐进,有助于我们由浅入深地了解8259中断控制。
在实验过程中,我渐渐熟悉了8086/8088CPU中断系统的知识以及8259中断控制器的使用。
还有就是在关于保护现场时是先保护偏移地址然后是段地址,而在现场恢复时是先恢复段地址,然后是偏移地址,在刚开始是弄反了,发生了一些错误,这个需要注意到。
还有就是学到了巧妙地利用循环平移的指令实现循环的操作。
中断的思想在程序的设计中无疑占有重要的位置.采取中断的方法,大大提高程序的有效性和CPU的高效率工作.因此,8259中断控制实验在微机的几个实验中,就显得尤其重点.掌握8259中断控制器的工作原理和应用编程方法,需要对8259系统有一个深入的了解,这些是我们学习的重点,应该熟练掌握。