
1、两过程定义与作用
子程序是微机基本程序结构中的1种,基本程序结构包括顺序(简单)、分支(判断)、循环、子程序和查表等5种。
子程序是一组可以公用的指令序列,只要给出子程序的入口地址就能从主程序转入子程序。子程序在功能上具有相对的独立性,在执行主程序的过程中往往被多次调用,甚至被不同的程序所调用。一般微机首先执行主程序,碰到调用指令就转去执行子程序,子程序执行完后,返回指令就返回主程序断点(即调用指令的下一条指令),继续执行没有处理完的主程序,这一过程叫做(主程序)调用子程序过程。
子程序结构可简化程序,防止重复书写错误,并可节省内存空间。计算机中经常把常用的各种通用的程序段编成子程序,提供给用户使用。用户在自己编写的程序中,只要会调用这些子程序,就可大大简化用户编程的困难。
中断是计算机中央处理单元CPU与外设I/O交换数据的一种方式,除此方式外,还有无条件、条件(查询)、存贮器直接存取DMA和I/O通道等四种方式。由于无条件不可靠,条件效率低,DMA和I/O通道两方式硬件复杂,而中断方式CPU效率高,因此一般大多采用中断方式。
中断概念是当计算机正在执行某一(主)程序时,收到一中断请求,如果中断响应条件成立,计算机就把正在执行的程序暂停一下,去响应处理这一请求,执行中断服务程序,处理完服务程序后,中断返回指令使计算机返回原来还没有执行完的程序断点处继续执行,这一过程称为中断过程。有了中断,计算机才能具有并行处理,实时处理和故障处理等重要功能。
2、两过程的联系与区别
21联系
中断与调用子程序两过程属于完全不同的概念,但它们也有不少相似之处。两者都需要保护断点(即下一条指令地址)、跳至子程序或中断服务程序、保护现场、子程序或中断处理、恢复现场、恢复断点(即返回主程序)。两者都可实现嵌套,即正在执行的子程序再调另一子程序或正在处理的中断程序又被另一新中断请求所中断,嵌套可为多级。
正是由于这些表面上的相似处,很容易使学生把两者混淆起来,特别是把中断也看为子程序,这就大错特错了。
22区别
中断过程与调用子程序过程相似点是表面的,从本质上讲两者是完全不一样的。
两者的根本区别主要表现在服务时间与服务对象不一样上。首先,调用子程序过程发生的时间是已知和固定的,即在主程序中的调用指令(CALL)执行时发生主程序调用子程序,调用指令所在位置是已知和固定的。而中断过程发生的时间一般的随机的,CPU在执行某一主程序时收到中断源提出的中断申请时,就发生中断过程,而中断申请一般由硬件电路产生,申请提出时间是随机的(软中断发生时间是固定的),也可以说,调用子程序是程序设计者事先安排的,而执行中断服务程序是由系统工作环境随机决定的;其次,子程序完全为主程序服务的,两者属于主从关系,主程序需要子程序时就去调用子程序,并把调用结果带回主程序继续执行。而中断服务程序与主程序两者一般是无关的,不存在谁为谁服务的问题,两者是平行关系;第三,主程序调用子程序过程完全属于软件处理过程,不需要专门的硬件电路,而中断处理系统是一个软、硬件结合系统,需要专门的硬件电路才能完全中断处理的过程;第四,子程序嵌套可实现若干级,嵌套的最多级数由计算机内存开辟的堆栈大小限制,而中断嵌套级数主要由中断优先级数来决定,一般优先级数不会很大。
当一个被加工零件,有多个部位有相同之处时,加工轨迹也相同,如一根轴上每10mm就切一槽,深度、宽度都是2mm,共5条槽,切槽程程序肯定相同,不同的是切完一条槽退出后,向一个方向移动10mm后再切,为了简化程序,我们把那个切槽程序专门编写一个程序,称为子程序,那么再切槽时就不必每次编写程序而可调用5次子程序,并且切完槽后回到目前的程序(主程序),继续进行其它该做的程序。 当然间距不等而槽形相同也一样能调用子程序。
那个子程序与主程序一样,有一个独立的程序号,不包含在主程序里,实际上也是一个程序。
GAUSSLE坐标正反算fx-5800程序
1正算主程序 (GSZS)
?K:Prog “DAT-M-DZD”: ((P-R)÷(2(H-O(字母))PR))→D : “L(-Z +Y)” L:
“ANG”M : (Abs(K-O(字母))) →J:Prog"SUB1":If (F-M) <0: Then (F-M+360) →F: Else(F-M) →F: IfEnd
“FWJ=”:F ●DMS(显示度分秒)◢
“X=”:X◢
”Y=”:Y◢
2 反算主程序 (GSFS)
?K:Prog “DAT-M-DZD”: X:Y:X→Z[2]:Y→Z[3]: ( (P-R)÷(2(H-O(字母))PR)) →D: (Abs((Y-S)cos(G-90)-(X-I)sin(G-90)) ) →J: 0→L:90→M: Lbl 0:Prog "SUB1":((Z[3]-Y)cos(G-90+QJ(1÷P+JD)×180÷π)) →Z[20]:((Z[2]-X)sin(G-90+QJ(1÷P +JD) ×180÷π)) →Z[21]:( Z[20]- Z[21]) →L:If Abs(L)<10∧(-6): Then Goto1:Else (J+L)→J:Goto 0: IfEnd
Lbl 1:0→L:Prog "SUB1":((Z[3]-Y)÷sin(F))→L: (O+J)→K:“LC=”:K◢
L→L :“PJ(-Z +Y)=”:L◢
3 反算,正算子程序(SUB1)
01184634425→A:02393143352→B: 02844444444→Z[4]:00469100770→C: 02307653449→E: 05→Z[1]:
((P-R)÷(2(H-O(字母))PR))→D : (Acos(G+QCJ(1÷P+CJD)×180÷π))
→Z[5]: ( Bcos(G+QEJ(1÷P+EJD)×180÷π)) →Z[6]: (Z[4]cos(G+QZ[1]J(1÷P+Z[1]JD)×180÷π)) →Z[7]:( Bcos(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)) →Z[8]:(Acos(G+Q (1-C)J(1÷P+(1-C)JD) ×180÷π)) →Z[9]: (Z[5]+Z[6] +Z[7] +Z[8] +Z[9])→Z[10]: (J×Z[10]) →Z[11]:(I+ Z[11]) →X: (Asin(G+QCJ(1÷P+CJD)×180÷π)) →Z[12]:(Bsin(G+QEJ(1÷P+EJD)×180÷π)) →Z[13]:(Z[4]sin(G+QZ[1]J(1÷P+Z[1]JD)×180÷π)) →Z[14]:(Bsin(G+Q(1-E)J(1÷P+(1-E)JD)×180÷π)) →Z[15]:(Asin(G+Q (1-C)J(1÷P+(1-C)JD) ×180÷π)) →Z[16]:( Z[12]+ Z[13]+ Z[14]+ Z[15]+ Z[16])→Z[17] : (J×Z[17]) →Z[18]:(S+ Z[18]) →Y: (G+M) →Z[19]:(( Z[19]+QJ(1÷P+JD) ×180÷π)) →F: (X+LcosF)→X:(Y+LsinF) →Y
Return
4 线元要素数据库:(DAT-M-DZD )
If K≥(线元起点里程)And K<(线元终点里程):Then (线元起点横坐标x) →I:(线元起点纵坐标y)→S: (线元起点里程)→O: (线元起点方位角)→G:(线元终点里程)→H:(线元起点半径)→P:(线元终点半径)→R:Q(Z=-1 ZX=0 Y=1)(偏转系数)→Q: IfEnd
………(注:如有多个曲线元要素继续添加入数据库中)
说明:
一、程序功能及原理
1功能说明:
本程序由两个主程序——正算主程序(GSZS)、反算主程序(GSFS)和两个子程——正算子程序(SUB1)、线元数据库(DAT-M)构成,可以根据曲线段——直线、圆曲线、缓和曲线(完整或非完整型)的线元要素(起点坐标、起点里程、起点切线方位角、终点里程、起点曲率半径、止点曲率半径)及里程边距或坐标,对该曲线段范围内任意里程中边桩坐标进行正反算。本程序转化后可以在CASIO fx-4800P计算器及 CASIO fx-4850P计算器上运行。由于加入了数据库(DAT-M),可实现坐标正反算的全线贯通。
2.计算原理:
利用待求点至线元起点切线作垂线,逐次迭代趋近原理反算里程及边距。
二、使用说明
1、规定
(1) 以道路中线的前进方向(即里程增大的方向)区分左右;当线元往左偏时, Q=-1;当线元往右偏时,Q=1;当线元为直线时,Q=0。
(2) 当所求点位于中线时,L=0;当位于中线左侧时,L取负值;当位于中线右侧时,L取正值。
3) 当线元为直线时,其起点、止点的曲率半径为无穷大,以10的45次代替。
(4) 当线元为圆曲线时,无论其起点、止点与什么线元相接,其曲率半径均等于圆弧的半径。
(5) 当线元为完整缓和曲线时,起点与直线相接时,曲率半径为无穷大,以10的45次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径为无穷大,以10的45次代替;与圆曲线相接时,曲率半径等于圆曲线的半径。
(6) 当线元为非完整缓和曲线时,起点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。止点与直线相接时,曲率半径等于设计规定的值;与圆曲线相接时,曲率半径等于圆曲线的半径。
(7)曲线元要素数据库(DAT-M)可根据线型不同分为各个线元段输入到DAT-M中,即分为直线段、缓和曲线、圆曲线等。
(8)正算时可仅输入里程和边距及右交角可实现全线计算,但反算时只能通过首先输入里程K值读取数据库DAT-M,计算器自动将里程K所在线元数据赋给反算主程序GSFS进行试算,试算出的里程和边距须带入正算主程序GSZS中计算坐标,若坐标吻合则反算正确。
2、输入与显示说明
(1)输入部分:
I ?线元起点的X坐标
S?线元起点的Y坐标
O?线元起点里程
G ?线元起点切线方位角
H ?线元终点里程
P ?线元起点曲率半径
R?线元止点曲率半径
Q ? 线 元左右偏标志(左偏Q=-1,右偏Q=1,直线段Q=0)
K ? 正算时所求点的里程
L ? 正算时所求点距中线的边距(左侧取负值,右侧取正值,在中线上取零)
ANG?正算边桩时左右边桩连线与线路中线的右交角
X ? 反算时所求点的X坐标
Y ? 反算时所求点的Y坐标
M 斜交右角
(2)显示部分
X正算时,计算得出的所求点的X坐标
Y正算时,计算得出的所求点的Y坐标
K反算时,计算得出的所求点的里程
L反算时,计算得出的所求点的边距
三、算例
某匝道的由五段线元(直线+完整缓和曲线+圆曲线+非完整缓和曲线+直线)组成,各段线元的要素(起点里程S0、起点坐标X0 Y0、起点切线方位角F0、线元长度LS、起点曲率半径R0、止点曲率半径RN、线元左右偏标志Q)如下:
S0 X0 Y0 F0 LS R0 RN Q
500000 19942837 28343561 125 16 3100 269256 1E45 1E45 0
769256 19787340 28563378 125 16 3100 37492 1E45 22175 -1
806748 19766566 28594574 120 25 5407 112779 22175 22175 -1
919527 19736072 28701893 91 17 3063 80285 22175 9579228 -1
999812 19744038 28781659 80 40 5000 100000 1E45 1E45 0
(注:该算例中线元要素Ls为程序修改前须输入的线元长度,程序修改后改为输入线元终点里程KN)
相同点:都是让cpu从主程序转去执行子程序,执行完毕又返回主程序。
不同点:中断服务程序是随机的,而普通子程序是预先安排好的;中断服务子程序以reti结束,而一般子程序以ret结束。reti除将断点d回pc动作外,还要清除对应的中断优先标志位,以便新的中断请求能被响应。
以上就是关于原理调用中断服务程序和调用子程序有何全部的内容,包括:原理调用中断服务程序和调用子程序有何、数控车床中,什么是子程序、5800计算子程序是干什么的和主程序有什么区别我们编程的时候要编那个那位高手等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)