㈠ 單片機實現按鍵功能函數
#include<reg51.h>
#defineucharunsignedchar
uchardat;
sbitkey1=P1^0;
sbitkey2=P1^1;
sbitkey3=P1^2;
main()
{
bitflag=0;
while(1)
{
if(key1==0)
{
while(key1==0);
flag=~flag;
}
if(key2==0)
{
while(key2==0);
if(flag)dat++;
}
if(key3==0)
{
while(key3==0);
if(flag(dat--);
}
P0=dat;
}
}
㈡ 單片機 C語言 函數定義
#define uint16 unsigned int -> typedef unsigned int uint16;
#define uchar8 unsigned char -> typedef unsigned char uchar8;
㈢ 單片機函數
void sw()
{
while(ax>5);
}
void main()
{
if(ax>0){
sw();
}
ax--;
}
-
main在C語言里為主函數,如果我記沒錯的話,只有中斷程序才能退出主函數,
而中斷程序結束後還是會自動回到main主程序里!
有點不明白你說的問題!能不能說明白點,是退出還是推出啊?
判斷程序是哪個?循環是什麼?假設也有個例子啊--
-
對於你問題的理解,可以吧sw()這個程序設置成中斷程序-
然後再sw()中斷程序里判斷是否中斷完成---
-
你還是把問題說清楚吧!不然我們回答得都牛頭了!
㈣ 單片機中斷函數和主函數
單片機主函數可以有序的執行一系列包括調用子函數在內的所有程序,但中斷的發生往往是隨機的,這就會暫時打斷主函數的順序,先去執行中斷函數,之後返回主函數從被打斷的位置繼續執行程序。因此,中斷一旦開放,中斷函數與主函數之間便無順序可言。
㈤ 單片機中什麼是函數
大部分都是函數來實現功能的,有庫函數和自定義函數,不過在單片機中,大部分是使用的自定義函數。
比如:void
delay()函數,void
main()主函數等,這些都是函數的。
㈥ 單片機 左移函數是怎麼用的
左循環本徵函數:
函數原型:unsigned char _crol_(unsigned char a,unsigned char n);
單片機左移函數用法:
例如,P2=0xff; P2=_crol_(P2,1);//語法是對的,但這是沒意義的,因為執行程序後P2還是原值0xff
P2=0xfe; P2=_crol_(P2,1);//執行程序後P2=0xfd
(6)單片機函數擴展閱讀:
單片機相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。
單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。單片機也被稱為單片微控器,屬於一種集成式電路晶元。
在單片機中主要包含CPU、只讀存儲器ROM和隨機存儲器RAM等,多樣化數據採集與控制系統能夠讓單片機完成各項復雜的運算,無論是對運算符號進行控制,還是對系統下達運算指令都能通過單片機完成。
㈦ 單片機中函數的參數分為什麼和什麼
單片機中函數的參數分為形參和實參。
C51和標准C語言沒啥區別,C51主要是引入了一些新的關鍵詞,比如bit sbit類型關鍵字,還有 interrupt中斷函數標志關鍵字。這些都是C51加的,其實很多其他單片機基本是使用標准C語言的,其他的東西都可以用預編譯宏或者匯編和C混合的方式解決。C51也僅僅是51系列單片機用而已,除了51系列就沒用了。。。
㈧ 單片機中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單片機 c語言里 _nop_ 函數怎麼用 具體一點 求高手指教
一個nop為1個指令周期,主要用於精確定時或者延時
nop指令的作用:
1)就是通過nop指令的填充(nop指令一個位元組),使指令按字對齊,從而減少取指令時的內存訪問次數。(一般用來內存地址偶數對齊,比如有一條指令,佔3位元組,這時候使用nop指令,cpu 就可以從第四個位元組處讀取指令了。)
2)通過nop指令產生一定的延遲,但是對於快速的CPU來說效果不明顯,可以使用rep前綴,多延遲幾個時鍾;-->具體應該說是佔用了3個時鍾脈沖!
3)i/o傳輸時,也會用一下 nop,等待緩沖區清空,匯流排恢復;
4)清除由上一個算術邏輯指令設置的flag位;
5)破解:)對於原程序中驗證部分使用nop來填充,使驗證失效;
6)有一個朋友說的比較厲害--在太空梭控製程序中防止程序跳飛!
本文來自CSDN博客,轉載請標明出處:http://blog.csdn.net/erazy0/archive/2010/12/12/6071281.aspx
㈩ 怎麼實現單片機多個函數功能同時執行
設計主要思想:
單片機不可能同時執行多個函數,但是可以先後執行程序給他安排的每一件事,假如每個事件間隔時間非常短,ms、us級別,或者間隔時間更短,那麼連續一段時間內執行的事件,看起來就是同時執行的。每一個事件可以看做一個或多個函數,也就意味著只要程序安排的合理,很多函數看起來是同時運行的;
模型舉例:假如要做幾件事,燒開水,洗衣服,打游戲;
A:燒開水,等好了之後,洗衣服,洗完之後,打游戲;
B:燒開水,洗衣服時監聽水壺的聲音,兩件事執行完,打游戲;
C:選擇一個燒水開了會停止工作的電水壺,不要等了,用洗衣機洗衣服,打游戲;
耗時:A最長,其次B,C最短。
不同的工具佔用人時間精力也是不同的,同理單片機周圍外設選擇不同,也會影響CPU佔用時間;
實例:
要求:假如單片機要「同時」執行,數碼管顯示、蜂鳴器、流水燈移動;
具體實施A:設置一個定時器,假如每隔1ms進入中斷,設置幾個全局變數x、y、z,定時器中斷里自加,在程序主循環里查詢全局變數的數值,當x大於500後,清零x,讓流水燈移位,當y大於,1000時清零y,數碼管加1,當z大於2時,清零z,反轉控制蜂鳴器的IO電平,以此類推其他事情也是如此。
具體實施B:設置單片機本身PWM驅動蜂鳴器,設置一個定時器,假如每隔1ms進入中斷,設置幾個全局變數x、y、z,定時器中斷里自加,在程序主循環里查詢全局變數的數值,當x大於500後,清零x,讓流水燈移位,當y大於,1000時清零y,數碼管加1,以此類推其他事情也是如此。
使用內部PWM資源可以更省CPU時間!
總結:
如果外設資源不足只能演算法來補充;
以上方法適合資源較少的單片機,若是單片機資源夠多(RAM>4K,Flas>8K),很多實時操作系統可以選擇:ucos,FreeRTOS等,這些實時操作系統可以方便管理事件的切換。