ADC0809模拟量采集实验报告Word文档下载推荐.docx

上传人:b****6 文档编号:22416750 上传时间:2023-02-04 格式:DOCX 页数:18 大小:187.11KB
下载 相关 举报
ADC0809模拟量采集实验报告Word文档下载推荐.docx_第1页
第1页 / 共18页
ADC0809模拟量采集实验报告Word文档下载推荐.docx_第2页
第2页 / 共18页
ADC0809模拟量采集实验报告Word文档下载推荐.docx_第3页
第3页 / 共18页
ADC0809模拟量采集实验报告Word文档下载推荐.docx_第4页
第4页 / 共18页
ADC0809模拟量采集实验报告Word文档下载推荐.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

ADC0809模拟量采集实验报告Word文档下载推荐.docx

《ADC0809模拟量采集实验报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《ADC0809模拟量采集实验报告Word文档下载推荐.docx(18页珍藏版)》请在冰豆网上搜索。

ADC0809模拟量采集实验报告Word文档下载推荐.docx

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;

显示空格

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码

显示字符

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;

K0~K5ARESPEEDSWITCH'

,0DH,0AH

K0ISLOWESTSPEED'

K5ISHIGHESTSPEED'

,0DH0AH

STIRANYSWHITCH,VIEWELECTRICMORTORSPEED'

STACKSSEGMENT;

堆栈段

DB100DUP(?

STACKSENDS

CODESEGMENT;

DATA,SS:

STACKS,ES:

MOVES,AX

MOVAX,STACKS

MOVSS,AX

MOVDX,OFFSETCRT;

DX←CRT首地址

DOS9号调用

INT21H;

显示提示信息

MOVDX,IO8255T;

DX←8255控制口地址

MOVAL,8BH;

AL=8BH,控制字

OUTDX,AL;

设置8255端口C输入

LLL:

MOVAL,80H;

AL=80H

MOVDX,IO0832A;

DX←0832端口地址

0832输出80H,对应0V

MOVAH,06h;

DOS6号功能调用,判断是否有键按下?

INT21H

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,延时时间常数

MOVCX,BUF1;

DELAY1:

LOOPDELAY1;

CX-1→CX,CX≠0,转到标号DELAY1

MOVAL,0FFH;

AL=FFH,对应0832输出+5V

OUTDX,AL

MOVCX,BUF2;

CX=9000H

DELAY2:

LOOPDELAY2;

CX-1→CX,CX≠0,转到标号DELAY2

K1:

MOVBUF2,0A000H;

BUF2=A000H,延时时间常数

JMPDELAY;

无条件转到标号DELAY

K2:

MOVBUF2,0B000H;

BUF2=B000H,延时时间常数

K3:

MOVBUF2,0E000H;

BUF2=E000H,延时时间常数

K4:

MOVBUF2,0F000H;

BUF2=F000H,延时时间常数

K5:

MOVBUF2,0FFFFH;

BUF2=FFFFH,延时时间常数

JMPDELAY

ENDSTART;

加法程序

学习并掌握数据传送和算术运算指令的用法。

编写多位十进制数相加程序。

将两个多位十进制数28056,47193相加,并在屏幕上显示加数、被加数、和。

要求两个操作数均以ASCII码形式各自顺序存放在DATA1和DATA2内存单元中,并将结果送回DATA1处(低位在前,高位在后)。

三.程序流程图

程序流程如图2.1所示。

两操作数在内存中存放的情况如图2.2所示。

四.参考程序

SHOWMACROB;

宏定义

MOVDL,B;

B为要显示字符的ASCII码

MOVAH,02H

INT21H;

2号功能调用,在屏幕上显示一个字符

ENDM

DATA1DB33H,39H,31H,37H,34H;

被加数47193的ASCII码(倒序存放)

DATA2DB36H,35H,30H,38H,32H;

加数28056的ASCII码(倒序存放)

DATA3DB'

———'

,0DH,0AH,'

$'

DATAENDS

STACKSEGMENTSTACK;

STADB20DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT;

代码段

ASSUMECS:

STACK,ES:

MOVAX,DATA;

MOVAX,STACK

MOVAX,TOP

MOVSP,AX

MOVSI,OFFSETDATA2;

取DATA2(加数)的偏移地址

MOVBX,05;

设置地址指针,BX=5(加数为5位)

SHOW20H;

宏调用,显示“空格”(ASCII码为20H)

CALLDISPL;

调显示子程序

SHOW0DH;

宏调用,“回车”

SHOW0AH;

宏调用,“换行”

MOVSI,OFFSETDATA1;

取DATA1(被加数)的偏移地址

设置地址指针,BX=5(被加数为5位)

SHOW2BH;

宏调用,显示“+”(ASCII码为2BH)

SHOW0AH;

MOVCL,7;

CL=7,显示7个“-”,构成直线

S1:

SHOW2DH;

宏调用,显示“-”(ASCII码为2DH)

LOOPS1;

CX-1→CX,CX≠0,转到标号S1

SHOW0DH

SHOW0AH

MOVDI,OFFSETDATA2;

CALLADDA;

调加法程序

取DATA1的偏移地址,显示两数之和

SHOW20H

BX=5,设置地址指针

DISPLPROCNEAR;

显示子程序

DS1:

SHOW[SI+BX-1];

宏调用,倒序显示数据

DECBX;

BX←BX-1

JNZDS1;

BX≠0,转到标号DS1,继续显示数据

DISPLENDP

ADDAPROCNEAR;

加法子程序

MOVDX,SI;

DATA1的偏移地址传送给DX

MOVBP,DI;

DATA2的偏移地址传送给BP

AD1:

SUBBYTEPTR[SI+BX-1],30H;

将ASCII码转化为十六进制数,并存入DATA1

SUBBYTEPTR[DI+BX-1],30H;

将ASCII码转化为十六进制数,并存入DATA2

DECBX;

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,继续加法

AD3:

ADDBYTEPTR[SI+BX-1],30H;

将十六进制转化为ASCII码

ADDBYTEPTR[DI+BX-1],30H

JNZAD3;

BX≠0,转到标号AD3,继续转换

ADDAENDP

ENDSTART

五.编译过程

结果=75249

乘法程序

掌握乘法指令和循环指令的用法,编写十进制数乘法程序

实现十进制数的乘法。

被乘数(29054)和乘数(3)均以ASCII码的形式存放在内存中,要求在屏幕上显示乘数、被乘数、积。

程序流程如图2.2所示。

程序执行前数据在内存中的存放情况如图2.4所示,程序执行后数据在内存中的存放情况如图2.5所示。

2.3两数相乘程序流图

SHOWMACROB;

宏定义

MOVDL,B;

MOVAH,02H;

INT21H

DATA1DB32H,39H,30H,35H,34H;

被乘数29054的ASCII码

DATA2DB33H;

乘数3的ASCII码

RESULTDB6DUP(00H);

预留6个字节单元

STACKSEGMENT;

STADB20DUP(?

SI←DATA1(被乘数)的偏移地址

MOVCL,5;

CL=5,设置计数常数

宏调用,显示一个“空格”

调显示子程序,显示被乘数

SHOW0DH;

SHOW2AH;

宏调用,显示乘号“*”

MOVSI,OFFSETDATA2;

SI←DATA2(乘数)的偏移地址

MOVBL,[SI];

BL←乘数,BL=33H

ANDBL,00001111B;

屏蔽乘数ASCII码的高四位,BL=3

MOVCL,1;

CL=1

调显示子程序,显示乘数

MOVCL,7;

CL=7

宏调用,显示7个“-”,构成直线

CX-1→CX,CX≠0,转到标号S1

SI←DATA1被乘数首地址

MOVDI,OFFSETRESULT;

DI←乘积首地址

MOVAX,00H;

AX=0

MOVCX,05;

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码

LOOPLOP;

CX-1→CX,CX≠0,转到标号LOP

SI←乘积首地址

MOVCL,6;

CL=6

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 小学作文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1