導航:首頁 > 操作系統 > 單片機用戶函數調用

單片機用戶函數調用

發布時間:2023-08-01 05:57:51

1. 51單片機延時函數聲明和調用

聲明很簡單,例如延時 delay( x); 這是調用的,聲明就在這個前面加void delay( unsigned char x);

2. 【單片機】 知道函數的地址怎麼調用

還需要知道函數的調用規則,比如:
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);
}

3. 51單片機c語言里 _nop_ 函數怎麼用

在單片機c語言中直接調用庫函數即可,具體如下:

#include<intrins.h> // 聲明了void_nop_(void);

_nop_(); // 產生一條NOP指令。

該函數的作用:對於延時很短的,要求在us級的,採用「_nop_」函數,這個函數相當信亂游匯編NOP指令,延時幾微秒。NOP指令為單周期指令,可由晶振頻率算出延時時間,對於12M晶振,延時1uS。

4. 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));

}

閱讀全文

與單片機用戶函數調用相關的資料

熱點內容
香港伺服器如何做代理 瀏覽:199
pdf寫入 瀏覽:984
高爾夫電台怎麼添加到文件夾 瀏覽:237
四川麻將一般下哪個app 瀏覽:862
反編譯exe腳本 瀏覽:460
源碼文件夾怎麼編譯到固件中 瀏覽:912
ERp列印伺服器錯誤怎麼弄 瀏覽:111
蚌埠u盤加密軟體有哪些 瀏覽:178
前端如何認證伺服器 瀏覽:554
linux切換db2用戶命令 瀏覽:308
相片如何用電解壓 瀏覽:906
碩士程序員去學校當老師 瀏覽:120
pythonstr提取到字典 瀏覽:820
程序員那麼可愛有人看上陸漓了 瀏覽:878
php正則提取圖片 瀏覽:105
pythonlinuxdjango 瀏覽:564
php中文返回亂碼 瀏覽:91
宿舍裝的電信怎麼加密 瀏覽:745
為什麼壓縮文件解壓後變少了 瀏覽:426
現在安卓充電器普遍是什麼型號 瀏覽:717