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 这些汇编是什么意、西门子全局变量为什么不能用在功能块里等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)