---主程序运行的时间即是延时函数的延时时间。
定时器中断是在主程序中插入的事件,是在主程序的某个时间点,跳出主程序去执行定时器中断要做的事情。
所以如果一个延时子程序不停地被中断(包括定时器中断或者其他中断)打断,
就没有时间完成自身运行一次所需的那些语句。
等到它自身运行完一次,可能原定延时时间的很多倍已经过去了。
Delay函数应该没错的。
编译有报错吗?conrtalcar(1)后面没有;
conrtalcar(2)后面的分号是中文格式的吧。
不对,我读不懂了。你这整一个是都在Delay函数里的吗?是这样的话,就好像是死循环了。是不是这样?
void Delay() //定义机器人调转子时间子程序
{
unsigned int DelayTime=50000; //定义机器人转弯时间变量
while(DelayTime--);
}
void main()
{
conrtalcar(1);
Delay() ;
conrtalcar(2);
}
1.子程序的定义
在编制加工程序中,有时会遇到一组程序段在-个程序中多次出现,或者在几个程序中都要使用它。这个典型的加工程序可以做成固定程序,并单独加以命名,这组程序段就称为子程序。
2使用子程序的目的和作用
使用子程序可以减少不必要的编程重复,从而达到减化编程的目的。主程序可以调用子程序,一个子程序也可以调用下一级的子程序。子程序必须在主程序结束指令后建立,其作用相当于一个固定循环。
3.子程序的调用
在主程序中,调用子程序的指令是一个程序段,其格式随具体的数控系统而定,FANUC-6T系统子程序调用格式为
M98 P--L--
式中M98--子程序调用字;
p--子程序号;
L--子程序重复调用次数。
由此可见,子程序由程序调用字、子程序号和调用次数组成。
4.子程序的返回
子程序返回主程序用指令M99,它表示子程序运行结束,请返回到主程序。
5.子程序的嵌套子程序调用下一级子程序称为嵌套。上一级子程序与下一级于程序的关系,与主程序与第一层子程序的关系相同。子程序可以嵌套多少层由具体的数控系统决定,在FANUC-6T系统中,只能有两次嵌套。
这个代码其实还是很清楚明了的。
DELY1: PUSH AX ;延时子程序,这里PUSH AX 其实可以不要的,因为AX没有做任何改动
PUSH CX ; 因为使用了CX来计数,所以先保存CX进堆栈
MOV CX,30H ; 循环30H也就是48次
DLY1: CALL DELY2 ; 在次调用一个延时子程序
LOOP DLY1 ; 循环,48次,不到次数则继续循环
POP CX ; 恢复被保护的原来CX的值
POP AX ; 恢复被保护的原来AX的值
RET ; 过程返回
DELY2: PUSH CX ; 内部调用的过程,也需要把CX当前的值保护进堆栈
MOV CX,8000H ; 循环8000H也就是32768次
LOOP $ ; $ 表示当前地址,也就是自己的地址,32768次循环不到则原地踏步
POP CX ; 恢复被保护的CX的值
RET ; 过程返回
分析寄存器r1r2对延时程序的影响是DELAY后面到RET都是延时子程序,RET是子程序返回指令,RO-R7都是单片机的通用寄存器;整段程序的作用就是产生一个周期04秒的方波。
分析寄存器电阻变大,C充电到2/3 vcc时间较长,555设计是当6脚电位达到2/3vcc时3脚输出转低电平,在计时器电路,6 7脚相连一起,这个2/3vcc再由7脚放电,再等待下一个计时信号由2脚输入。
分析寄存器通用寄存器组:
通用寄存器组包括AX、BX、CX、DX4个16位寄存器,用以存放16位数据或地址。也可用作8位寄存器。用作8位寄存器时分别记为AH、AL、BH、BL、CH、CL、DH、DL。只能存放8位数据,不能存放地址。
分析寄存器它们分别是AX、BX、CX、DX的高八位和低八位。若AX=1234H,则AH=12H,AL=34H。通用寄存器通用性强,对任何指令,它们具有相同的功能。为了缩短指令代码的长度,在8086中,某些通用寄存器用作专门用途。
以上就是关于单片机C语言编程中延时函数和定时器中断有何关系全部的内容,包括:单片机C语言编程中延时函数和定时器中断有何关系、51单片机C语言程序中延时函数delay的作用、plc如何在子程序中实现延时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)