两个需要调用的子函数,都包含延时子函数,调用的时候有冲突 , 怎么解决 望高人指点指点

两个需要调用的子函数,都包含延时子函数,调用的时候有冲突 , 怎么解决 望高人指点指点,第1张

你说的“延时子函数”,是不是那种靠循环次数来延时的程序

如果是的话,那么我告诉你,那种子程序的延时算法,只是用于“单线的”流程。也就是说,没有考虑系统中还有别的同时要做的工作。

所以,你如果要用这种延迟方法的话,就必须通盘考虑,一件事完了,再做另一件事,不要交叉。

如果你想提高CPU的利用效率,想多个任务穿插执行,那么,最好不要用这种延迟子程序。

可以用定时器中断来协调各项任务的进行,适当掌控各个动作的间隔时间。

(1)、C51语言中调用汇编语言程序;

C51语言调用汇编语言程序要注意以下几点:

1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。

2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51SLIB)加入工程中。

3:在C51语言中必须声明需要调用的函数为外部函数。extern void DELAY(void);

4:在汇编语言程序中必须声明被调用子程序为公共子程序,在被调用的文件中还需要声明此文件是可从新定位的。

PUBLIC DELAY,DEL

DELAYY SEGMENT CODE

RSEG DELAYY

实例如下:

C51语言文件:

#include "reg51h"

extern void DELAY(void);

extern void DEL(void);

void main(void)

{

P1=0x00;

DELAY();

DEL();

P1=0xff;

}

汇编语言文件:

PUBLIC DELAY,DEL

DELAYY SEGMENT CODE

RSEG DELAYY

DELAY: MOV R2,#3H

DJNZ R2,$

RET

DEL: MOV R3,#03H

DJNZ R3,$

RET

END

(2)、C51语言中嵌入汇编程序;

在C51语言中嵌套使用汇编语言编写程序要注意以下的几个问题:

1:在文件栏选中File Group和C51程序原文件,在配置文件选项中激活“产生汇编(SRC)文件,“编译(SRC)文件”和“创建工程(目标)时包含”三个选项。

2:根据选择的编译模式,把相应的库文件(如SMALL模式,库文件为KEIL\C51\LIB\C51SLIB)加入工程中。

3:用#pragma asm,和#pragma endasm语句包含嵌入的汇编语言程序。

实例如下:

#include "reg51h"

void delay(void);

void main(void)

{

void delay(void);

P1=0x00;

#pragma asm

MOV R3,#08H

DJNZ R3,$

#pragma endasm

P1=0xff;

}

void delay(void)

{

#pragma asm

MOV R4,#08H

DJNZ R4,$

#pragma endasm

}

这个延时程序和你单片机系统的晶振有关系,看程序注解搭配的是12MHZ的晶振,估计是经过模拟运行程序后才得到这个延时200MS的函数Delay200ms。

至于那三个for循环就是延时的关键,执行任意一条语句都是有微小耗时的,循环部分由于反复执行耗时就会相对很长,可以达到延时的效果,设定for的初始值10 31 147意义就在于确定循环的次数,也就可以调整延时的长短。

有问题追问我。

以上就是关于两个需要调用的子函数,都包含延时子函数,调用的时候有冲突 , 怎么解决 望高人指点指点全部的内容,包括:两个需要调用的子函数,都包含延时子函数,调用的时候有冲突 , 怎么解决 望高人指点指点、怎样在单片机C代码中加入汇编延时子程序、关于单片机C程序延时的问题如下程序。回答我两个问题哦~ 问题1: 200MS是怎么得来的公式是什么样的等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存