单片机汇编语言小程序,求大神指点啥意思

单片机汇编语言小程序,求大神指点啥意思,第1张

ORG

0

;程序入口

START:

MOV

DPTR,#TABLE

;将数据表首地址送数据指针

LOOP:

CLR

A

;累加器清0

MOVC

A,@A+DPTR

;取表中数据送累加器

CJNE

A,#01H,LOOP1

;如果累加器不等1转LOOP1

JMP

START

;转START

LOOP1:

MOV

P1,A

;累加器值送P1驱动LED显示

MOV

R3,#20

;延时参数20送R3,延时2010毫秒

LCALL

DELAY

;调用延时子程序

INC

DPTR

;数据指针加1

JMP

LOOP

;转LOOP

DELAY:

MOV

R4,#20

;外层循环20次

D1:

MOV

R5,#248

;内层循环248次

DJNZ

R5,$

;内层循环

DJNZ

R4,D1

;外层循环

DJNZ

R3,DELAY

;最外层循环

RET

;子程序延时10毫秒

TABLE:

DB

0FEH,0FDH,0FBH,0F7H

;

DB

0EFH,0DFH,0BFH,07FH

DB

0FEH,0FDH,0FBH,0F7H

DB

0EFH,0DFH,0BFH,07FH

DB

07FH,0BFH,0DFH,0EFH

DB

0F7H,0FBH,0FDH,0FEH

DB

07FH,0BFH,0DFH,0EFH

DB

0F7H,0FBH,0FDH,0FEH

DB

00H,

0FFH,00H,

0FFH

DB

01H

END

DELAY 和 D1、D2是一个标号,相当是标记的地址。$标记的是本条指令地址。

DJNZ <Rx>,Addr 是一个跳转指令,具体 *** 作是:

Rx=Rx-1;

if Rx != 0

goto Addr

否则,往后执行

这一段代码其实就是一个多重循环,相当于 C 语言里的

for (i = 1;i >0 ;i--) // i 相当于R5

for (j= 2; j>0 ;j--) // j 相当于 R6

for (k=248;k>0 ;k--) // k相当于 R7

{

_NOP(); //每条汇编指令对应了一定的机器时间周期数(与具体型号有关),

DJNZ好像是3个机器周期,

一直在这循环打转,每执行一条指令就会花掉一定的时间,

所以起到延 时的作用

}

主要作用就是延时,数节拍数。在 单片机的教程定时器里都会有这样的范例。

您好,西门子全局变量不能用在功能块里的原因是,因为功能块是一种独立的程序单元,它们有自己的空间,不能被其他程序单元访问,因此全局变量不能在功能块里使用。此外,功能块的变量只能在功能块内部使用,不能被其他程序单元访问,因此全局变量也不能在功能块里使用。

将数据段DATA开始的16个数排序,前小后大,程序示例如下:

DATAS SEGMENT

arr DB 74,68,58,66,69,254,186,6,10,98,34,90,128,222,33,0

COUNT DB 10

DATAS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,ES:DATAS

START:

MOV AX,DATAS

MOV DS,AX

MOV ES,AX

MOV BL,1 ;用BL来检验是否排序完成,减少循环次数

LOOP1:

CMP BL,0

JE CMPEND ;若相等则跳转

XOR BL,BL ;将BL清零

MOV CL,COUNT ;COUNT用于外层的计数

DEC CL ;CL减一,CL用于内层的计数

PUSH CX ;将CX压入堆栈

LEA DI,arr ;将数据段首地址赋值给DI

LOOP2:

MOV AL,[DI]

CMP AL,[DI+1] ;将前一个数与后一个数比较

JLE LOOP3 ;若前一个数小于或等于后一个数,则跳转到LOOP3

XCHG [DI+1],AL;前者大于后者,则交换两数

MOV [DI],AL ;如果前一个数字大于后一个数字,则交换

MOV BL,1

LOOP3:

INC DI ;指针加一

LOOP LOOP2 ;循环L00P2,直到CX==0成立

POP CX ;将CX从堆栈中d出

MOV COUNT,CL ;改变外层计数器的值

JMP LOOP1

CMPEND:

MOV AH,4CH ;带返回码结束功能

INT 21H ;返回系统

CODES ENDS

END START

一、实验目的

1测定纯物料表面的电动电位。

2掌握显微电泳仪测定矿物电动电位的方法。

3理解物料表面双电层理论。

二、实验设备、药剂与矿样

1设备:微电泳仪1套,pH计,烧杯等。

2药剂:稀酸、稀碱。

3矿样:石英纯矿物。

三、实验原理

矿物在水溶液中,其表面可以产生双电层。有关微粒分散系界面荷电理论中以Stern双电层理论较完善,应用较多。该理论中Stern层又分为两层,即紧密层和扩散层,他认为紧密层是由未水化离子组成,并紧靠近固体微粒表面,即Stern模型中的Stern层。外层是扩散层,由水化离子组成,由滑动面为界限又分成两部分,其中滑动面以里部分与固体吸附较紧密,可以随固体微粒运动,而滑动面以外的部分扩散的较远,不随固体微粒移动而移动。在外电场的作用下,胶体中的胶粒和分散介质沿滑动面反向相对移动时,就会产生电位差,滑动面上对应的此电位差即称为ζ电位。ζ电位是表征胶粒特性的重要物理量之一,在研究胶体性质及实际应用中有着重要的作用。它随吸附层内离子浓度、电荷性质的变化而变化,它与胶体的稳定性有关,ζ绝对值越大,表明胶粒电荷越多,胶粒间斥力越大,胶体越稳定。

由微细矿粒组成的粗分散体系,某些性质接近于胶体溶液,在电场作用下可以发生电动现象。微细固体粒子产生电泳时粒子与水发生相对移动。根据粒子移动速度和给入的端电压,就可以计算出粒子滑动界面上所带电荷的正负与电位大小。

根据Helmholtz公式,电动电位的值可用下式计算:

矿物加工工程专业实验教程

式中:ζ——动电电位,mV;

u——电泳速度,μm/s;

η——分散介质黏度,P(泊);

ε——分散介质的介电常数;

E——电位梯度,V/cm;

u/E——电泳淌度;

Kt——不同温度下ζ电位(ζ)与淌度(u/E)的比值。

以水溶液为介质时,其不同温度下的Kt值见表7-9-1。

表7-9-1 不同温度下Kt值(液相是水或水溶液)

注:Kt=ζ/(u/E)。其单位可由ζ,u,E导出。

电泳速度:在选定距离内,电泳所需的时间,以微米/秒表示:

u=l/t (7-9-2)

式中:l——微粒电泳距离,μm;

t——电泳时间,s。

电位梯度E:

E=U/L (7-9-3)

式中:U——外加电场直流电压,V;

L——两极间的距离,cm。

将(7-9-2)、(7-9-3)式及Kt数据代入(7-9-1)式即可求得ζ电位。

四、实验步骤

测定前在老师指导下先熟悉JS94 H型微电泳仪各部分结构及使用方法,之后将所用容器和毛细管清洗干净,先用自来水后用蒸馏水,按以下各步进行 *** 作:

1沟通。进入主界面后点击“Option”菜单中的“Connect”选项,出现“Connect ok”,表明计算机与仪器的通讯沟通成功,如出现出错信息,请检查计算机与仪器的连线。

2调焦与定位。用去离子水冲洗电泳杯和十字标,将被测样品注入电泳杯,插入十字标后洗涤数次,并将十字标充分湿润,取05mL样品注入电泳杯,倾斜电泳杯,缓缓插入电泳杯,石英片的表面有前后2个表面,将含有十字标的那个表面接近镜头,即将标有“前”的一面面向自己插入,不要产生气泡,擦拭干电泳杯的外面,将电泳杯平稳放入样品槽,轻轻按到底,切忌重压。

调节上下、左右旋钮和焦距,直到在计算机屏幕看到清晰的十字标图像。

3采样 *** 作。找到十字标后,用去离子水冲洗电泳杯和电极,将被测样品注入电泳杯,插入电极后洗涤数次,并让电极充分湿润;取05mL样品注入电泳杯,倾斜并缓缓放入样品槽,轻轻按到底,切忌重压,连上电极连线。

然后点击活动图像,调节所需电压,设置文件名,输入样品pH值,按“启动”,图像上颗粒会随电极的切换左右移动,使用快捷键调节,使待测颗粒处于取景框内,立即按“存盘”。

4设定。点击“Option”菜单中的“Setting…”选项,出现对话框,输入文件名和电压切换时间。电压切换时间也可使用程序预先的设定,但应根据用户需要在测试样品前预先设好文件名。

5截图。点按活动图像,调节所需电压输入样品pH值(pH值要事先用pH计测得),按“启动”,图像上颗粒会随电极的切换左右移动,使用快捷键调节所需画面和画质。然后存盘,程序将自动截取图像供分析计算使用。

6分析。按分析程序进入分析计算子程序界面。屏幕左侧出现三个长方形区域,分别为定标分析区1#、2#、3#,点击 *** 作区开始键,调出相应图像和数据进行分析,分析图像时,首先在分析区1#内确认一个颗粒,方法是将定标线移到这个颗粒所在位置,鼠标点击确定,在定标数据内的颗粒OA位置将显示所确定的位置数据,然后根据颗粒位置的相关性,在分析区2#中确认同一颗粒(即分析区1#内所确认的颗粒,参考分析区3#的颗粒位置),其位置数据显示在定标数据区内的颗粒OB后,至此获得第一组数据,然后再分析区1#内再确认其他颗粒,用同样方法获得多组数据。然后按继续键,系统将调出第二组图像供分析用,用同样方法获得多组数据后,存盘。此时按要求判断出颗粒电荷极性并输入,系统将自动算出分析结果。

7将待测液用稀酸或稀碱稀释,调节pH值后重复上述测定,记录分析结果。

五、数据处理

根据实验结果,绘制ζ电位-pH值关系图,并将实验结果进行讨论。

六、思考题

1若电泳仪事先没清洗干净,管壁上残留有微量电解质,对电泳测量结果有何影响

2影响ζ电位的因素有哪些

一个机器周期为T,每执行一句djnz r6,$就占4T, 循环250次=1000T,外层循环djnz r7,dl 120次,所以一共占1201000T=120000T , T=1/12M,所以占时001S=10ms

Pascal基本教程第八章

函数和过程 </P><P>81 函数

如果一个子程序执行后能够返回其结果制,那么它就可以用于表达式中,称这种子程序为函数,这种语句序列的定义称为函数说明。函数说明形式如下:

function 函数名(形式参数表):函数类型;

说明部分;

begin

语句1;

语句2;

……

语句n

end

函数返回一个函数值,过程则能完成一系列各种 *** 作。函数的调用方式出现在表达式中,而过程调用是一句独立的语句。

例:计算|X|的函数

function zhoufei(x:real):real;

var z:integer;

begin

if x>=0 then z:=x

else z:=-x

zhoufei:=z;

end;

函数说明第一行为函数首部。它指明函数名、函数形参信息和函数值的数据类型。如上面求x绝对值的函数说明,函数名是zhoufei;它有一个值参数X为实型;函数值的数据类型为实型。Turbo Pascal规定一个函数只能求出一个简单值,所以函数值类型只能是任何非结构类型。

除函数首部和过程首部的句法略有差别外,函数体和过程体完全相同。函数体中至少要有一条语句对函数名赋值。如函数zhoufei 中有语句“power:=z”。函数的每次求值至少要执行这样的一条语句,为次计算求得一个值。返回时就把这个值带调用的地方。

82 过程

给某个语句序列组成的子程序赋于一个适当的名字。程序中凡是需要出现这个语句序列的地方,可以简单的写上子程序的名字。这种完成一个 *** 作的子程序称为过程;子程序的定义称为过程说明。

过程说明由过程首部和过程体组成,其形式如下:

procedure 过程名(形式参数表);-------过程首部

说明部分;

begin

执行语句;

……

end;

例 输出两个数中最大值的过程

procedure largest(a,b:integer);

begin

if a>b then writeln(a)

else writeln(b);

end

上面largest过程由两个类型为整型的形式参数:a,b,你向过程传入的两个需要比较大小的数。

83 形参和实参

子程序调用(过程调用或函数调用)的执行顺序分为以下几步:

实参和形参结合——〉执行子程序——〉返回调用处继续执行

子程序说明的形式参数表对子程序体直接引用的变量进行说明,详细指明这些参数的类别、数据类型要求和参数的个数。子程序被调用时必须为它的每个形参提供一个实参,按参数的位置顺序一一对应,每个实参必须满足对应形参的要求

Turbo Pascal子程序形参有四类:

1值参数

形式参数表中前面没有var,后有类型的参数。它类似过程和函数的局部变量,仅为过程和函数的执行提供初值而不影响调用时实际参数的值。在调用过程或应用函数时,值参数所对应的实际参数必须是表达式,而且它的值不能使文件类型或包括文件类型的值。实参必须和形参赋值相容。

2变量参数

形式参数表中前面有var后由类型的参数。如果需要子程序向调用程序返回值时,应采用变量参数。变量参数要求它的实参是和它同一类型的变量。因为在子程序执行时,遇到对相应形参的引用式定值,就是对相应实参的引用式定值,即对形参的任何 *** 作就是对实参本身的 *** 作。

3无类型变量参数

形式参数表中前面有var而后面没有类型的参数。形参是无类型变量,对应的实参允许为任意类型的变量,但要在子程序中设置的强制类型转换(类型名(无类型变量参数名)),将无类型变量参数改变为相应类型。

4子程序参数

用过程首部或函数首部作为形式参数。

84 标识符的作用域

1全局变量和它的作用域

全局变量是指在程序开头的说明部分定义和说明的量。它的作用域分为两种情况:

(1)在全局变量和局部变量不同名时,其作用域是整个程序。

(2)在全局变量和局部变量同名时,全局变量的作用域不包含同名局部变量的作用域。

2局部变量和它的作用域

凡是在子程序内部使用的变量,必须在子程序中加入说明。这种在子程序内部说明的变量称为局部变量。局部变量的作用域是其所在的子程序。形式参数也只能在子程序中有效。因此也属于局部变量。局部变量的作用域分为两种情况:

(1)当外层过程序的局部变量名和嵌套过程中的局部变量不同名时,外层过程的局部变量作用域包含嵌套过琛。

(2)当外层过程的局部变量名和嵌套过程内的局部变量名同名时,外层局部变量名的作用域不包含此过程。

简单的说:形式参数就是定义函数时规定函数可以有哪些参数。

实际参数是在调用函数时,赋给函数的具体数值。必须遵守形式参数的要求

如果单纯延时,可以用实验的办法,在keilc51里面仿真

void Delay1S(char n)

{

char i,j;

n=n4;

for(;n;n--)

{

for(i=6;i;i++)

{

for(j=7;j;j++) // 一个循环约为1mS

;

}

}

}

看编译后的汇编:

C:0x0805 7D01 MOV R5,#0x06;j=1,1时钟

C:0x0807 0D INC R5;j++,1时钟

C:0x0808 ED MOV A,R5;A=R5,1时钟

C:0x0809 70FC JNZ C:0807;A=0,2时钟

循环共249次,一个循环共需4个时钟周期,加上第一个赋值语句1周期。

共997uS,加上外层循环,一次约1mS,

如果要精确的延时建议采用中断:

#include "reg51h"

//timer init

void initTimer(void)

{

TMOD=0x2;

TH0=0x6;

TL0=0x6;

}

int T250uS;

char T_mark;

//timer0/counter0 interrupt

void timer0(void) interrupt 1

{

//add your code here

T250uS++;

T_mark=0;

}

void Delay1S(char n)

{

for(;n;n--)

for(T250uS=0;T250uS<4000;)

{

T_mark=1;

while(T_mark);

}

}

//the main fun

void main(void)

{

initTimer();

TR0=1;

ET0=1;

EA=1;

while(1)

{

Delay1S(1);

}

}

以上就是关于单片机汇编语言小程序,求大神指点啥意思全部的内容,包括:单片机汇编语言小程序,求大神指点啥意思、DELAY: MOV R5,#1 D1: MOV R6,#2 D2:MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 这些汇编是什么意、西门子全局变量为什么不能用在功能块里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9807338.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存