『壹』 單片機中bit函數如何使用 在什麼情況下使用 舉個例子 如何使用 謝謝
1、可以作為參數傳遞:比如
uchar test(bit flag)
{
if(flag)
{//傳遞來的是1則返回3,否則返回2
return 3;
}
else
{
return 2;
}
}
main()
{
uchar x;
bit flag = 1;
x = test(falg);
}
2、可以作為函數的返回值
bit test1(uchar a,uchar b)
{
if(a>b)
{//如果a>b則返回真,否則返回假
return 1;
}
else
{
return 0;
}
}
main()
{
bit flag;
flag = test1(2,3);
}
C51中沒有位變數指針一說,比如 bit *flag1;的定義就是非法的。除此之外使用中和其它類型沒什麼區別。
應用最多的情況:執行一個函數,只是想知道操作是否成功,這時就可以用bit變數作為返回值,這樣佔用資源少,判斷起來也快。
當然,如果返回值是char型,判斷速度上和bit型差不多,但如果是int型,由於是雙位元組,就要多花些時間了。
追問:
你做過595的程序嗎 那裡用一位數據線輸出8位數據 就用到bit
bit a;
bit testbit(unsigned char a,char n)
{
if(((0x01<<n)&a)==0)
{
return 0;
}else
return 1;
}
『貳』 51單片機按鍵問題,求解決
1)要讓一個程序能夠幾乎立即停止執行,需要在程序的很多地方,關鍵位置上加入判斷語句,以便接收停止命令;
2)為了讓程序按原邏輯順序執行,檢測鍵盤的輸入就應該採用中斷方式;
sbit K1=P1^0; //按鍵
char flag=0;
在8051單片機的時鍾頻率為12MHz,用T0定時,10ms中斷一次
void Timer0_init()
{
TMOD |=0x01; //採用16位定時器
TH0 = (65536-10000)/256; //定時器裝初值10000,10ms中斷一次
TL0 = (65536-10000)%256;
EA=1; ET0=1; TR0=1;
}
void timer0() interrupt 1
{
TH0 = (65536-10000)/256; //裝初值10000,10ms中斷一次
TL0 = (65536-10000)%256;
if(k1) flag=1;
}
void test1()
{ if(flag) return; //在關鍵地方都加上此語句,如長時間的循環內部,這樣才能起到立即停止執行的效果;
.......
}
void main()
{
....; //其他初始化代碼
Timer0_init();
while(1)
{
if(!flag) test1();
if(flag) test2();
}
}