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

單片機用戶函數調用

發布時間: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));

}

閱讀全文

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

熱點內容
java面向對象編程題目 瀏覽:876
二次元壓縮包 瀏覽:698
stc模擬器編程器 瀏覽:155
伺服器銷售怎麼做好 瀏覽:87
什麼是com編程 瀏覽:848
演算法工程師最新資訊 瀏覽:608
郵政銀行卡怎麼在app簽約綁定 瀏覽:49
壓縮卷一直轉 瀏覽:976
初一編程小程序怎麼做 瀏覽:826
bt軟體文件夾名稱 瀏覽:157
unix創建命令 瀏覽:622
devc是多少位的編譯器 瀏覽:980
怎麼樣能快點升安卓系統 瀏覽:976
奇跡mu用什麼伺服器 瀏覽:605
如何讓軟體在多個安卓系統上運行 瀏覽:575
java判斷半形 瀏覽:881
java判斷正負 瀏覽:322
刷頭條程序員的日常 瀏覽:104
吉林程序員吐槽 瀏覽:244
單片機溫度范圍 瀏覽:421