导航:首页 > 操作系统 > 单片机的调用函数

单片机的调用函数

发布时间:2023-06-14 06:17:49

❶ 51单片机上,C语言函数调用过程是怎样 哪些东西需要压堆栈保护起来,参数如何传递

就是直接跳到子程序那里执行,至于堆栈的话,只有当用到中断的时候再使用堆栈,一般像acc,dptr都会自动堆栈的,编译的时候生成的

❷ 51单片机汇编如何调用C函数

先声明,后调出。
若C语言函数名为ABC,汇编的入口符号为_ABC。
例:CALL _ABC ,就调用的了ABC涵数。
至于如何声明,如何传函数参数,就要查编译器的使用说明了。

我也没这么做过,一般是高级语言调用低级语言,只是一个建议。

❸ 单片机是如何调用函数的

呵呵,当然不是这么简单。你想一下,调用完函数你返回哪里?
一般来说,调用函数这个指令都至少隐含着将当前栈指针入栈的操作。

❹ C51函数是如何调用

在你原来的函数基础上,加上三个参数,分别是:
1 要操作的PORT口
2 要进行的操作
3 要操作的引脚
当然,如果你的目标很明确,可以把以上三个参数裁剪掉一些,利于系统的效率提高.
下面是我写的示例程序,你可能参考一下:
#include<reg52.h>
#define Pin0 0x01
#define Pin1 0x02
#define Pin2 0x04
#define Pin3 0x08
#define Pin4 0x10
#define Pin5 0x20
#define Pin6 0x40
#define Pin7 0x80

#define OPT_CPL 0x00 //----取反某位操作
#define OPT_CLR 0x01 //----清零某位操作
#define OPT_SET 0x02 //----置一某位操作

void Operate(
/*这里写你原来的参数,*/
unsigned char Port_Num,
unsigned char Opr_Style,
unsigned char Pins
)

{
//----如果在单片机PORT口范围之内,刚读取当前PORT口的状
//----如果不在范围之内,死循环
//----注意,为了效率起见,这个部分可以根据实际应用进行裁剪
if(Port_Num == 0)
{
Port_Num = P0;
}
else if(Port_Num == 1)
{
Port_Num = P1;
}
else if(Port_Num == 2)
{
Port_Num = P2;
}
else if(Port_Num == 3)
{
Port_Num = P3;
}
else
{
while(1);
}

//----如果是取反相应位,进行异或操作
//----如果清零相应位,则位与操作
//----如果置位相应位,则位或操作
//----如果都不在范围之内,则死循环
//----这段代码也根据实际情况裁剪
if(Opr_Style == OPT_CPL)
{
Port_Num ^= Pins;
}
else if(Opr_Style == OPT_CLR)
{
Port_Num &= ~Pins;
}
else if(Opr_Style == OPT_SET)
{
Port_Num |= Pins;
}
else
{
while(1);
}

//----如果在单片机PORT口范围之内,刚读取当前PORT口的状
//----如果不在范围之内,死循环
//----注意,为了效率起见,这个部分可以根据实际应用进行裁剪
if(Port_Num == 0)
{
P0 = Port_Num;
}
else if(Port_Num == 1)
{
P1 = Port_Num;
}
else if(Port_Num == 2)
{
P2 = Port_Num;
}
else if(Port_Num == 3)
{
P3 = Port_Num;
}
else
{
while(1);
}
//----以上的内容,可根据实际情况进行裁剪,以实现程序最优化
//----添加你的功能的其他代码---------------

}

void main(void)
{
//----使用示例:函数功能的同时,置位P2口的P2.0,P2.5,P2.7
Operate(/*这里写你原来的参数*/2,OPT_SET,(Pin0|Pin5|Pin7));

//----使用示例:函数功能的同时,清零P1口的P1.2,P1.5,P2.6
Operate(/*这里写你原来的参数*/1,OPT_CLR,(Pin2|Pin5|Pin6));

}

❺ 如何调用单片机函数模块

看你要调用的函数是什么类型的咯。
1、如果是这种缺省的,void可写可不写,如:
fuction()
//或者void
fuction()
或者fuction(
void
)
或者void
fuction(
void
)
{
//函数实体
}
这种既没有入参,也没有出参、返回值的,就在你要调用的地方直接这么写fuction();
2、有入参,类型缺省的,如
void
fuction(
unsigned
char
Data
)
//当然数据类型有很多,这个看用户需要
{
//函数实体
}
调用的时候,就这么写
fuction(DATA);//保证DATA和Data的数据类型一样比较好
3、有返回值的,甚至有入参的,如
unsigned
char
fuction(
unsigned
char
Data
)
{
unsigned
char
n;
//函数实体
return
n;
}
调用的时候,把这个函数的返回值赋给其他的变量,如m
=
fuction(
DATA
);
//还是那句话,数据类型不要变来变去,最后保持一致,否则可能导致未知的错误。
以上字字手打,希望对你有帮助

❻ 【单片机】 知道函数的地址怎么调用

还需要知道函数的调用规则,比如:
int fun1(int a,int b) { return a+b; }
int fun2(int a,int b) { return a-b; }
typedef int (*pfun)(int,int);
#define MYFUNCTION1 0x80002000 //假设函数fun1的地址位于0x80002000
#define MYFUNCTION2 0x80003000 //假设函数fun2的地址位于0x80003000
void main()
{ int a=2,b=1,c;
fun=(pfun)MYFUNCTION1; c=(*fun)(a,b);
fun=(pfun)MYFUNCTION2; c=(*fun)(a,b);
}

阅读全文

与单片机的调用函数相关的资料

热点内容
闲置的腾讯云服务器 浏览:437
rar压缩包mac 浏览:626
php混淆加密工具 浏览:581
java把数字拆分 浏览:464
如何下载svn服务器旧版本 浏览:559
命令与征服4攻略 浏览:914
实数四则运算法则概念 浏览:294
cs16优化命令 浏览:871
Minecraft云服务器免费 浏览:828
png压缩最小 浏览:182
老韩综app怎么看不了了 浏览:227
只有一个程序员的体验 浏览:323
用服务器地址怎么有网 浏览:552
路由器服务器昵称是什么 浏览:715
程序员男友消失了 浏览:401
程序员搜索框自动提示 浏览:28
android44api20 浏览:677
adb刷recovery命令 浏览:697
广联达正版加密锁可以补办吗 浏览:945
java程序员一天多少行代码 浏览:948