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));
}