ADC0809模拟量采集实验报告.docx
- 文档编号:3507843
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:18
- 大小:187.05KB
ADC0809模拟量采集实验报告.docx
《ADC0809模拟量采集实验报告.docx》由会员分享,可在线阅读,更多相关《ADC0809模拟量采集实验报告.docx(18页珍藏版)》请在冰豆网上搜索。
ADC0809模拟量采集实验报告
ADC0809模拟量采集
一.实验目的
(1)了解将模拟量转换成数字量的基本原理。
(2)学会利用ADC0809芯片进行摸/数转换的编程方法。
二.实验内容
将电位器产生的模拟电压信号转换成数字信号,转换结果送入主机内存中,并在屏幕上显示。
取256个采样点。
三.线路连接
ADC0809有8个模拟输入端IN7~IN0,输入模拟量电压范围为0V~+5V,旋转电位器SW1产生不同的模拟电压,作为模拟输入量。
实验电路中只开通了IN0一路模拟量输入,其它输入端未使用。
ADC0809的D7~D0引脚与主机数据总线相连接。
ADC0809的START端为A/D转换启动信号,ALE端为通道地址的锁存信号。
线路中将START端与ALE端连接,以便锁存通道地址,同时启动A/D采样并进行转换。
ADC0809的CLOCK端的时钟频率范围为10~1280KHz,本实验中采用1MHz。
ADC0809的结束信号EOC用来产生中断请求信号,请求CPU读入转换后的结果。
实验接线如图4.9所示。
四.编程提示
(1)发出启动A/D转换信号
由于START与ALE相连,所以在通道地址锁存的同时,发出A/D转换信号。
通道IN0地址为PCI外扩设备基地址+外扩设备译码器输出地址。
(2)将转换结果读入内存
当A/D转换结束后,CPU从ADC0809输出端接收数据。
五.流程图
程序流程如图4.10所示。
六.参考程序
DATASEGMENT;数据段
IOPORTEQU0D880H-280H;端口基地址
IO0809AEQUIOPORT+298H;0809通道0地址
CRTDB'SPIN“SW1”SWITCH,VIEWONTHEDISPLAY',0DH,0AH
DB'ENTERANYKEYCANEXITTODOS',0DH,0AH,'$';提示信息
DATAENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA;初始化,取段基址
MOVDS,AX
MOVDX,OFFSETCRT;AX←CRT段基址
MOVAH,09H;DOS9号调用,显示提示信息
INT21H
LAB:
MOVDX,IO0809A;DX←IN0端口地址
OUTDX,AL;启动A/D转换
MOVCX,0FFFFH;CX=FFFFH
DELAY:
LOOPDELAY;调延时子程序
INAL,DX;AL←IN0端口数据
MOVBL,AL;BL←AL,暂存IN0端口数据
MOVCL,4;CL=4
SHRAL,CL;AL内容右移4位,
CALLDISP;调显示子程序,显示高四位
MOVAL,BL;AL←BL,IN0端口数据
ANDAL,0FH;“与”操作,屏蔽高4位
CALLDISP;调显示子程序,显示低四位
MOVAH,02;DOS2号调用
MOVDL,20H;DL=20H,“空格”的ASCII码
INT21H;显示空格
INT21H;显示空格
PUSHDX;DX进栈保护
MOVAH,06H;DOS6号调用,有键按下退出
MOVDL,0FFH;DL=FFH
INT21H;执行键盘输入操作
POPDX;DX出栈
JELAB;ZF=1,没有键按下,转到标号LAB继续从IN0端口输入数据
MOVAX,4C00H;返回DOS
INT21H
DISPPROCNEAR;显示字符子程序
MOVDL,AL;DL←AL
CMPDL,9;DL内容与9比较
JLEDDD;DL≤9,转到标号DDD
ADDDL,7;DL>9,DL←DL+7
DDD:
ADDDL,30H;DL←DL+30H,转换成ASCII码
MOVAH,02;DOS2号调用
INT21H;显示字符
RET
DISPENDP
CODEENDS
ENDSTART;结束
七.编译过程
DAC0832控制直流电机转速
一.实验目的
(1)学习并掌握DAC0832的性能及编程方法。
(2)了解直流电机速度控制的基本原理。
二.实验内容
直流电机的转速是由0832的Ub输出脉冲的占空比例来决定的,正向占空比例越大,电机转速越快,反之越慢,如图4.12所示。
0832的输出Ub为双极性,当输入量小于80H时,输出为负,电机反转。
等于80H时,输出为0,电机停止转动。
大于80H时,输出为正,电机正转。
本实验0832输出的数字量只需要两个数值80H和FFH,80H对应电机反转,FFH对应电机正转,通过不同的延时时间达到改变电机转速的目的。
三.线路连接
如图4.12所示,0832输出端Ub与直流电机Uj端相连,CS接地址端口2A0H~2A7H。
8255的PC0~PC5分别与开关K0~K5相连,CS接地址端口280H~287H。
四.编程提示
0832输出80H的持续时间是不变的,输出FFH的持续时间越长,电机转动时的速度就越快。
持续时间长短,可以利用开关用K0~K5来控制,共5个档,达到使电机加速、减速的目的。
K0对应的速度最慢,K5对应的速度最快。
五.流程图
程序流程图如图4.13所示。
六.参考程序
DATASSEGMENT;数据段
IOPORTEQU0D880H-280H;端口基地址
IO0832AEQUIOPORT+2A0H;0832地址
IO8255CEQUIOPORT+282H;8255端口C口地址
IO8255TEQUIOPORT+283H;8255控制口地址
BUF1DW0;预留字单元
BUF2DW0;预留字单元
CRTDB'K0~K5ARESPEEDSWITCH',0DH,0AH
DB'K0ISLOWESTSPEED',0DH,0AH
DB'K5ISHIGHESTSPEED',0DH0AH
DB'STIRANYSWHITCH,VIEWELECTRICMORTORSPEED',0DH,0AH
DB'ENTERANYKEYCANEXITTODOS',0DH,0AH,'$';提示信息
DATAENDS
STACKSSEGMENT;堆栈段
DB100DUP(?
)
STACKSENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACKS,ES:
DATA
START:
MOVAX,DATA;初始化,取段基址
MOVDS,AX
MOVES,AX
MOVAX,STACKS
MOVSS,AX
MOVDX,OFFSETCRT;DX←CRT首地址
MOVAH,09H;DOS9号调用
INT21H;显示提示信息
MOVDX,IO8255T;DX←8255控制口地址
MOVAL,8BH;AL=8BH,控制字
OUTDX,AL;设置8255端口C输入
LLL:
MOVAL,80H;AL=80H
MOVDX,IO0832A;DX←0832端口地址
OUTDX,AL;0832输出80H,对应0V
PUSHDX;DX进栈保护
MOVAH,06h;DOS6号功能调用,判断是否有键按下?
MOVDL,0FFH;DL=FFH
INT21H
POPDX;DX出栈
JEINTK;ZF=1,表示没有键按下没,转到标号INTK
MOVAH,4CH;ZF=1,表示有键按下,返回DOS
INT21H
INTK:
MOVDX,IO8255C;DX←8255端口C地址
INAL,DX;AL←开关状态
TESTAL,01H;测试PC0=1?
JNZK0;ZF=0,则PC0=1,表明拨动了K0开关,转到标号K0
TESTAL,02H;测试PC1=1?
JNZK1;ZF=0,则PC1=1,表明拨动了K1开关,转到标号K1
TESTAL,04H;测试PC2=1?
JNZK2;ZF=0,则PC2=1,表明拨动了K2开关,转到标号K2
TESTAL,08H;测试PC3=1?
JNZK3;ZF=0,则PC3=1,表明拨动了K3开关,转到标号K3
TESTAL,10H;测试PC4=1?
JNZK4;ZF=0,则PC4=1,表明拨动了K4开关,转到标号K4
TESTAL,20H;测试PC5=1?
JNZK5;ZF=0,则PC5=1,表明拨动了K5开关,转到标号K5
JMPLLL;无条件转到标号LLL
K0:
MOVBUF1,0FFFFH;BUF1=FFFFH,延时时间常数
MOVBUF2,9000H;BUF2=9000H,延时时间常数
DELAY:
MOVCX,BUF1;CX=FFFFH
DELAY1:
LOOPDELAY1;CX-1→CX,CX≠0,转到标号DELAY1
MOVAL,0FFH;AL=FFH,对应0832输出+5V
MOVDX,IO0832A;DX←0832端口地址
OUTDX,AL
MOVCX,BUF2;CX=9000H
DELAY2:
LOOPDELAY2;CX-1→CX,CX≠0,转到标号DELAY2
JMPLLL;无条件转到标号LLL
K1:
MOVBUF1,0FFFFH;BUF1=FFFFH,延时时间常数
MOVBUF2,0A000H;BUF2=A000H,延时时间常数
JMPDELAY;无条件转到标号DELAY
K2:
MOVBUF1,0FFFFH;BUF1=FFFFH,延时时间常数
MOVBUF2,0B000H;BUF2=B000H,延时时间常数
JMPDELAY;无条件转到标号DELAY
K3:
MOVBUF1,0FFFFH;BUF1=FFFFH,延时时间常数
MOVBUF2,0E000H;BUF2=E000H,延时时间常数
JMPDELAY;无条件转到标号DELAY
K4:
MOVBUF1,0FFFFH;BUF1=FFFFH,延时时间常数
MOVBUF2,0F000H;BUF2=F000H,延时时间常数
JMPDELAY;无条件转到标号DELAY
K5:
MOVBUF1,0FFFFH;BUF1=FFFFH,延时时间常数
MOVBUF2,0FFFFH;BUF2=FFFFH,延时时间常数
JMPDELAY
CODEENDS
ENDSTART;结束
七.编译过程
加法程序
一.实验目的
学习并掌握数据传送和算术运算指令的用法。
编写多位十进制数相加程序。
二.实验内容
将两个多位十进制数28056,47193相加,并在屏幕上显示加数、被加数、和。
要求两个操作数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,并将结果送回DATA1处(低位在前,高位在后)。
三.程序流程图
程序流程如图2.1所示。
两操作数在内存中存放的情况如图2.2所示。
四.参考程序
SHOWMACROB;宏定义
MOVDL,B;B为要显示字符的ASCII码
MOVAH,02H
INT21H;2号功能调用,在屏幕上显示一个字符
ENDM
DATASEGMENT;数据段
DATA1DB33H,39H,31H,37H,34H;被加数47193的ASCII码(倒序存放)
DATA2DB36H,35H,30H,38H,32H;加数28056的ASCII码(倒序存放)
DATA3DB'———',0DH,0AH,'$'
DATAENDS
STACKSEGMENTSTACK;堆栈段
STADB20DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA;初始化,取段基址
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
MOVSI,OFFSETDATA2;取DATA2(加数)的偏移地址
MOVBX,05;设置地址指针,BX=5(加数为5位)
SHOW20H;宏调用,显示“空格”(ASCII码为20H)
CALLDISPL;调显示子程序
SHOW0DH;宏调用,“回车”
SHOW0AH;宏调用,“换行”
MOVSI,OFFSETDATA1;取DATA1(被加数)的偏移地址
MOVBX,05;设置地址指针,BX=5(被加数为5位)
SHOW2BH;宏调用,显示“+”(ASCII码为2BH)
CALLDISPL;调显示子程序
SHOW0DH;宏调用,“回车”
SHOW0AH;宏调用,“换行”
MOVCL,7;CL=7,显示7个“-”,构成直线
S1:
SHOW2DH;宏调用,显示“-”(ASCII码为2DH)
LOOPS1;CX-1→CX,CX≠0,转到标号S1
SHOW0DH
SHOW0AH
MOVSI,OFFSETDATA1;取DATA1(被加数)的偏移地址
MOVDI,OFFSETDATA2;取DATA2(加数)的偏移地址
CALLADDA;调加法程序
MOVSI,OFFSETDATA1;取DATA1的偏移地址,显示两数之和
SHOW20H
MOVBX,05;BX=5,设置地址指针
CALLDISPL;调显示子程序
MOVAX,4C00H;返回DOS
INT21H
DISPLPROCNEAR;显示子程序
DS1:
SHOW[SI+BX-1];宏调用,倒序显示数据
DECBX;BX←BX-1
JNZDS1;BX≠0,转到标号DS1,继续显示数据
RET
DISPLENDP
ADDAPROCNEAR;加法子程序
MOVDX,SI;DATA1的偏移地址传送给DX
MOVBP,DI;DATA2的偏移地址传送给BP
MOVBX,05;BX=5,设置地址指针
AD1:
SUBBYTEPTR[SI+BX-1],30H;将ASCII码转化为十六进制数,并存入DATA1
SUBBYTEPTR[DI+BX-1],30H;将ASCII码转化为十六进制数,并存入DATA2
DECBX;BX←BX-1
JNZAD1;BX≠0,转到标号AD1,继续转换
MOVSI,DX;SI←DATA1的偏移地址
MOVDI,BP;DI←DATA2的偏移地址
MOVCX,05;CX=5,设置计数常数
CLC;清除进位表示,CF=0
AD2:
MOVAL,[SI];AL←DATA1中的低位数
MOVBL,[DI];BL←DATA1中的低位数
ADCAL,BL;带进位相加
AAA;十进制调整
MOV[SI],AL;将结果保存到DATA1中
INCSI;指向下一位
INCDI
LOOPAD2;CX-1→CX,CX≠0,转到标号AD2,继续加法
MOVSI,DX;SI←DATA1的偏移地址
MOVDI,BP;DI←DATA2的偏移地址
MOVBX,05;BX=5,设置地址指针
AD3:
ADDBYTEPTR[SI+BX-1],30H;将十六进制转化为ASCII码
ADDBYTEPTR[DI+BX-1],30H
DECBX;BX←BX-1
JNZAD3;BX≠0,转到标号AD3,继续转换
RET
ADDAENDP
CODEENDS
ENDSTART
五.编译过程
结果=75249
乘法程序
一.实验目的
掌握乘法指令和循环指令的用法,编写十进制数乘法程序
二.实验内容
实现十进制数的乘法。
被乘数(29054)和乘数(3)均以ASCII码的形式存放在内存中,要求在屏幕上显示乘数、被乘数、积。
三.程序流程图
程序流程如图2.2所示。
程序执行前数据在内存中的存放情况如图2.4所示,程序执行后数据在内存中的存放情况如图2.5所示。
2.3两数相乘程序流图
四.参考程序
SHOWMACROB;宏定义
MOVDL,B;B为要显示字符的ASCII码
MOVAH,02H;2号功能调用,在屏幕上显示一个字符
INT21H
ENDM
DATASEGMENT;数据段
DATA1DB32H,39H,30H,35H,34H;被乘数29054的ASCII码
DATA2DB33H;乘数3的ASCII码
RESULTDB6DUP(00H);预留6个字节单元
DATAENDS
STACKSEGMENT;堆栈段
STADB20DUP(?
)
TOPEQULENGTHSTA
STACKENDS
CODESEGMENT;代码段
ASSUMECS:
CODE,DS:
DATA,SS:
STACK,ES:
DATA
START:
MOVAX,DATA;初始化,取段基址
MOVDS,AX
MOVAX,STACK
MOVSS,AX
MOVAX,TOP
MOVSP,AX
MOVSI,OFFSETDATA1;SI←DATA1(被乘数)的偏移地址
MOVCL,5;CL=5,设置计数常数
SHOW20H;宏调用,显示一个“空格”
CALLDISPL;调显示子程序,显示被乘数
SHOW0DH;宏调用,“回车”
SHOW0AH;宏调用,“换行”
SHOW2AH;宏调用,显示乘号“*”
MOVSI,OFFSETDATA2;SI←DATA2(乘数)的偏移地址
MOVBL,[SI];BL←乘数,BL=33H
ANDBL,00001111B;屏蔽乘数ASCII码的高四位,BL=3
MOVCL,1;CL=1
CALLDISPL;调显示子程序,显示乘数
SHOW0DH;宏调用,“回车”
SHOW0AH;宏调用,“换行”
MOVCL,7;CL=7
S1:
SHOW2DH;宏调用,显示7个“-”,构成直线
LOOPS1;CX-1→CX,CX≠0,转到标号S1
SHOW0DH;宏调用,“回车”
SHOW0AH;宏调用,“换行”
MOVSI,OFFSETDATA1;SI←DATA1被乘数首地址
MOVDI,OFFSETRESULT;DI←乘积首地址
MOVAX,00H;AX=0
MOVCX,05;CX=5,设置计数常数
LOOP1:
MOVAL,[SI];依次将被乘数的各个位传送给AL
ANDAL,00001111B;屏蔽被乘数ASCII码的高四位,转换为十六进制数
INCSI;SI←SI+1,指向下一个单元
MULBL;AX←AL×BL
AAM;乘法的ASCII码调整指令
ADDAH,[DI];加进位
AAA;加法的ASCII码调整指令
MOV[DI],AH;将结果高八位送入指定的存储器单元
INCDI;指向下一个单元
MOV[DI],AL;将结果低八位送入指定的存储器单元
LOOPLOOP1;CX-1→CX,CX≠0,转到标号LOOP1
MOVSI,OFFSETRESULT;SI←乘积首地址
MOVCX,06;CX=6
LOP:
MOVDL,[SI];DL←依次取乘积
ADDDL,30H;DL←DL+30H,转换为ASCII码
MOV[SI],DL;原单元←乘积的ASCII码
INCSI;SI←SI+1,指向下一个单元
LOOPLOP;CX-1→CX,CX≠0,转到标号LOP
MOVSI,OFFSETRESULT;SI←乘积首地址
MOVCL,6;CL=6
CALLDISPL;调显示子程序
MOVAX,4C00H;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ADC0809 模拟 采集 实验 报告