導航:首頁 > 操作系統 > 單片機c語言技巧

單片機c語言技巧

發布時間:2022-12-31 11:38:14

1. 單片機的C語言怎樣去學

你最好是買一個單片機,對所有的管腳功能進行熟悉,然後進行編程練習。還有就是看相關的書籍,最好是有例子和習題那種的,邊學習邊做練習,這樣進步會很快!如果到一定程度了的話,你就可以根據你的想法自己給自己出題,然後實現。

2. 單片機C語言培訓 應注意哪些學習方法

學習單片機C語言的話,注重多實踐,不要好高騖遠。
把學習到的程序一個字元一個字元的敲出來,用來加深編寫代碼的印象。用模擬軟體看現象,再下載到實際電路板看運行狀態。初期編寫簡單的程序進行模擬,逐漸增加代碼量,增加難度。再去網上找一些好玩的程序去學。
建議先看看51單片機的程序,進行模擬。然後直接用STM32系列單片機進行單片機C語言學習及實踐。

3. 如何寫出高效的單片機C語言程序代碼

由於單片機的性能同電腦的性能是天淵之別的,無論從空間資源上、內存資源、工作頻率,都是無法
與之比較的。PC 機編程基本上不用考慮空間的佔用、內存的佔用的問題,最終目的就是實現功能就可以了。
對於單片機來說就截然不同了,一般的單片機的Flash 和Ram 的資源是以KB 來衡量的,可想而知,單片
機的資源是少得可憐,為此我們必須想法設法榨盡其所有資源,將它的性能發揮到最佳,程序設計時必須
遵循以下幾點進行優化:

1. 使用盡量小的數據類型
能夠使用字元型(char)定義的變數,就不要使用整型(int)變數來定義;能夠使用整型變數定義的變
量就不要用長整型(long int),能不使用浮點型(float)變數就不要使用浮點型變數。當然,在定義變
量後不要超過變數的作用范圍,如果超過變數的范圍賦值,C 編譯器並不報錯,但程序運行結果卻錯了,
而且這樣的錯誤很難發現。

2. 使用自加、自減指令
通常使用自加、自減指令和復合賦值表達式(如a-=1 及a+=1 等)都能夠生成高質量的
程序代碼,編譯器通常都能夠生成inc 和dec 之類的指令,而使用a=a+1 或a=a-1 之類
的指令,有很多C 編譯器都會生成二到三個位元組的指令。

3. 減少運算的強度
可以使用運算量小但功能相同的表達式替換原來復雜的的表達式。
(1) 求余運算
N= N %8 可以改為N = N &7
說明:位操作只需一個指令周期即可完成,而大部分的C 編譯器的「%」運算均是調用子程序來
完成,代碼長、執行速度慢。通常,只要求是求2n 方的余數,均可使用位操作的方法來代替。
(2) 平方運算
N=Pow(3,2) 可以改為N=3*3
說明:在有內置硬體乘法器的單片機中(如51 系列),乘法運算比求平方運算快得多, 因為浮點數
的求平方是通過調用子程序來實現的,乘法運算的子程序比平方運算的子程序代碼短,執行速度快。
(3) 用位移代替乘法除法
N=M*8 可以改為N=M<<3
N=M/8 可以改為N=M>>3
說明:通常如果需要乘以或除以2n,都可以用移位的方法代替。如果乘以2n,都可以生成左移
的代碼,而乘以其它的整數或除以任何數,均調用乘除法子程序。用移位的方法得到代碼比調用乘除法子
程序生成的代碼效率高。實際上,只要是乘以或除以一個整數,均可以用移位的方法得到結果。如N=M*9
可以改為N=(M<<3)+M;
(4) 自加自減的區別
例如我們平時使用的延時函數都是通過採用自加的方式來實現。
void DelayNms(UINT16 t)
{
UINT16 i,j;
for(i=0;i<t;i++)
for(j=0;i<1000;j++)
}
可以改為
void DelayNms(UINT16 t)
{
UINT16 i,j;
for(i=t;i>=0;i--)
for(j=1000;i>=0;j--)
}
說明:兩個函數的延時效果相似,但幾乎所有的C 編譯對後一種函數生成的代碼均比前一種代碼少1~3
個位元組,因為幾乎所有的MCU 均有為0 轉移的指令,採用後一種方式能夠生成這類指令。

4. while 與do...while 的區別
void DelayNus(UINT16 t)
{
while(t--)
{
NOP();
}
}
可以改為
void DelayNus(UINT16 t)
{
do
{
NOP();
}while(--t)
}
說明:使用do…while 循環編譯後生成的代碼的長度短於while 循環。

5. register 關鍵字
void UARTPrintfString(INT8 *str)
{
while(*str && str)
{
UARTSendByte(*str++)
}
}
可以改為
void UARTPrintfString(INT8 *str)
{
register INT8 *pstr=str;
while(*pstr && pstr)
{
UARTSendByte(*pstr++)
}
}
說明:在聲明局部變數的時候可以使用register 關鍵字。這就使得編譯器把變數放入一個多用途的寄存
器中,而不是在堆棧中,合理使用這種方法可以提高執行速度。函數調用越是頻繁,越是可能提高代碼的
速度,注意register 關鍵字只是建議編譯器而已。

6. volatile 關鍵字
volatile 總是與優化有關,編譯器有一種技術叫做數據流分析,分析程序中的變數在哪裡賦值、在
哪裡使用、在哪裡失效,分析結果可以用於常量合並,常量傳播等優化,進一步可以死代碼消除。一般來
說,volatile 關鍵字只用在以下三種情況:
a) 中斷服務函數中修改的供其它程序檢測的變數需要加volatile(參考本書高級實驗程序)
b) 多任務環境下各任務間共享的標志應該加volatile
c) 存儲器映射的硬體寄存器通常也要加volatile 說明,因為每次對它的讀寫都可能由不同意義
總之,volatile 關鍵字是一種類型修飾符,用它聲明的類型變數表示可以被某些編譯器未知的因素
更改,比如:操作系統、硬體或者其它線程等。遇到這個關鍵字聲明的變數,編譯器對訪問該變數的代碼
就不再進行優化,從而可以提供對特殊地址的穩定訪問。

4. 怎樣學習單片機c語言

1,樓主,你首先要學習C語言基礎,就相當於80%會單片機了,因為現在所有8/16/32位(51系列,MSP430系列,ARM系列)都是使用C語言。
2,先看內核8051的單片機:台灣宏晶的STC89C51-DIP40/或其它如新茂,到網上買一個開發板,價格不會超過200元。
3,看一下單片機功能:包換內部FLASH、RAM、TIMER、INT、ADC、USB、ISP/IAR等。
4,編譯環境、編程軟體KEIL。
5,打開開發板的例子程序,在KEIL編譯,下載到板,看結果和說明是不是相符,達到這樣效果時,你心裡肯定很秀激動,這時你真正學會了單片機,你成功了!!!!!。
6,單片機C語言舉例:
sbit SPEAK = P1^5; //IO口定義為蜂鳴器控制
如果蜂鳴器正極接電源,SPEAK =0;蜂鳴器就會響,你看就是這么簡單。
unsiggne char temp;//定義TEMP為單位元組變數。
sfr PORTA P1;//將P1口定義為PORTA
總結:多做開發板上的實驗,你要多參與這樣的項目開發,慢慢就會了。

5. C語言怎麼用到單片機

1、把C語言編譯為編程器支持的語言格式,比如常用的bin,或hex等格式。
2、如果是可在線編程的,可以用ISP直接進行燒錄。
3、如果不是可在線編程的,將單片機晶元,放入編程器,然後燒錄。
注意:編譯和燒錄時,都要選擇和單片機晶元一致的型號,否則會出錯。
如果找不到對應的型號,說明不支持該型號的單片機。

6. 單片機c語言如何精通

用過瑞薩R8C25的,和你分享一下心得:
1.C語言基礎打扎實,指針這塊一定要透徹,比如隨便問一下,int a[3][4],請問a+2是第幾號元素的地址,答案有a[0][2]和a[2][0]。很容易弄錯的。
2.文件方面倒是不用看了,單片機不用C語言文件操作。
3.學一個單片機關鍵學的是它的說明書,像我們學的R8C25說明書是英文版的,當然後來搞到了一些中文的資料,學得很費勁,我學單片機的起步時51單片機,那個時候只用看看課本,背熟指令輕松考了個96,以為R8C25和51一樣,信手拈來,後來遭受打擊,我囧!51單片機不論是從功能還是指令都簡單多了,而其他的商用單片機就不是那麼簡單,不是一本課本就可以搞定的。說這個是預防你由於以前有過單片機基礎,以為就好學、簡單,其實不然,作好心理准備,不簡單!
4.多實踐是真理,每一個說明書或者是學習資料上的例子都給它調通,不要放棄難的,越難的越不能放棄。
5.單片機挺有意思的,能做一些定時、LED、鳳鳴、通信,能達到讓君會心一笑,祝你學得開心哈哈!

7. 如何快速的學會單片機C語言編程

很多想學單片機的人問我的第一句話就是怎樣才能學好單片機?對於這個問題我今天就我自己是如何開始學單片機,如何開始上手,如何開始熟練這個過程給大家講講。

先說說單片機,一般我們現在用的比較多的的MCS-51的單片機,它的資料比較多,用的人也很多,市場也很大。就我個人的體會怎麼樣才能更快的學會單片機這門課。單片機這門課是一項非常重視動手實踐的科目,不能總是看書,但是學習它首先必須得看書,因為從書中你需要大概了解一下,單片機的各個功能寄存器,而說明白點,我們使用單片機就是用軟體去控制單片機的各個功能寄存器,再說明白點,就是控制單片機那些管腳的電平什麼時候輸出高,什麼時候輸出低。由這些高低電平的變化來控制你的系統板,實現我們需要的各個功能。至於看書,只需大概了解單片機各管腳都是干什麼的?能實現什麼樣的功能?第一次,第二次你可能看不明白,但這不要緊,因為還缺少實際的感觀認識。所以我總是說,學單片機看書看兩三天的就夠了,看小說你一天能看五六本,看單片機你兩三天看兩三遍就夠了,可以不用仔細的看。推薦一本書,就這一本就足夠,書名是《新編MCS-51單片機應用設計》,是哈爾濱工業大學出版社出的的,作者是張毅剛。大概了解一下書上的內容,然後實踐,這是非常關鍵的,如果說學單片機你不實踐那是不可能學會的,關於實踐有兩種方法你可以選擇,一種方法:你自己花錢買一塊單片機的學習板,不要求功能太全的,對於初學者來說你買功能非常多的那種板子,上面有很多東西你這輩子都用不著,我建議有流水燈、數碼管、獨立鍵盤、矩陣鍵盤、AD或DA(原理一樣)、液晶、蜂鳴器,這就差不多了。如果上面我提到的這些,你能熟練應用,那可以說對於單片機方面的硬體你已經入門了,剩下的就是自己練習設計電路,不斷的積累經驗。只要過了第一關,後面的路就好走多了,萬事開頭難,大家可能都聽過。方法二:你身邊如果有單片機方面的高手,向他求助,讓他幫你搭個簡單的最小系統板。對於高手來說,做個單片機的最小系統板只需要一分鍾的時間,而對於初學者可就難多了,因為只有對硬體了解了,才能熟練運用。而如果你身邊沒有這樣的高手,又找不到可以幫助你的人,那我勸你最好是自己買上一塊,畢竟自己有一塊要方便的多,以後做單片機類的小實驗時都能用得上,還省事。

有了單片機學習板之後你就要多練習,最好是自己有台電腦,一天少看電影,少打游戲,把學習板和電腦連好,打開調試軟體坐在電腦前,先學會怎麼用調試軟體,然後從最簡單的流水燈實驗做起,等你能讓那八個流水燈按照你的意願隨意流動時你已經入門了,你會發現單片機是多麼迷人的東西啊,太好玩了,這不是在學習知識,而是在玩,當你編寫的程序按你的意願實現時你比做什麼事都開心,你會上癮的,真的。做電子類的人真的會上癮。然後讓數碼管亮起來,這兩項會了後,你已經不能自拔了,你已經開始考慮你這輩子要走哪一行了。就是要這樣練習,在寫程序的時候你肯定會遇到很多問題,而這時你再去翻書找,或是問別人,當得到解答後你會記住一輩子的,知識必須用於現實生活中,解決實際問題,這樣才能發揮它的作用,你自己好好想想,上了這么多年大學,天天上課,你在課堂上學到了什麼?是不是為了期末考試而忙碌呢?考完得了90分,哈哈哈好高興啊,下學期開學回來忘的一干二凈,是不是?你學到什麼了?但是我告訴你單片機一旦學會,永遠不會忘了。另外我再說說用匯編和C語言編程的問題。很多同學大一二就開設了C語言的課,我也上過,我知道那時天天就是幾乘幾,幾加幾啊,求個階乘啊。學完了有什麼用?讓你用C語言編單片機的程序你是不是就傻了?書上的東西我們必須要會運用。單片機編程用C語言或匯編語言都可以,但是我建議用C語言比較好,如果原來有C語言的基礎那學起來會更好,如果沒有,也可以邊學單片機邊學C語言,C語言也挺簡單,只是一門工具而已,我勸你最好學會,將來肯定用得著,要不你以後也得學,你一點匯編都不會根本無所謂,但你一點C語言都不會那你將來會吃苦頭。匯編寫程序代碼效率高,但相對難度較大,而且很羅嗦,尤其是遇到演算法方面的問題時,根本是麻煩的不得了,現在單片機的主頻在不斷的提高,我們完全不需要那麼高效率的代碼,因為有高頻率的時鍾,單片機的ROM也在不斷的提高,足夠裝得下你用C語言寫的任何代碼,C語言的資料又多又好找,將來可移植性非常好,只需要變一個IO口寫個溫度感測器的程序在哪裡都能用,所以我勸大家用C語言。

總結上面,只要你有信心,做事能堅持到底,有不成功不放棄的強烈意志,那學個單片機來說就是件非常容易的事。

步驟:1.找本書大概了解一下單片機結構,大概了解就行。不用都看懂,又不讓你出書的。(三天)

2.找學習板練習編寫程序,學單片機就是練編程序,遇到不會的再問人或查書。 (二十天)

3.自己網上找些小電路類的資料練習設計外圍電路。焊好後自己調試,熟悉過程。 (十天)

4.自己完全設計具有個人風格的電路,產品,。。。你已經是高手了。 。。。。

看到了嗎?下功夫一個多月你就能成為高手,我就講這么多了,學不學得會,下不下得了功夫就看你的了。
參考資料:

8. 如何提高單片機C語言編程能力

1.先自己寫一些小程序,然後再從網上下載些優秀代碼回來,對比自己的程序,找出差別,認真對比學習,吃透優秀演算法,慢慢積累。
2.從小的模塊程序開始,一步一步優化自己的程序,這樣的話,以後寫的大程序就慢慢好了,沒事的時候多看看C的書,不懂的要搞懂,已經懂的要多想想有沒有更好的方法。
3另外,單片機與硬體有關,不可能說編譯器中的庫函數有什麼什麼,就可直接使用,還得考慮自己單片機的執行速度等好多方面的問題。
4.有空的話,也可以看看軟體方面的書,學學一些典型演算法。
5.這是後話,程序的效率除了編程外,還與編譯器有大的關系,可以從網上看看,學習一下自己使用的編譯器的特點。
反正不斷努力,肯定會有進步。編程需要練習,不練習,空想成不了高手,不要
浮躁,會驅動51的幾個小東西,就得意
編程需要的是綜合能力。各個方面都兼顧到,

9. 怎樣提升自己單片機C語言編程能力啊求高手指點迷津!我硬體也懂一點 但我想朝編程方面發展 跪求高手指教

到樓主描述的這種程度,比較實際的只有兩種方法:一是實踐,實際做一個較大的項目,二是多看看網上的一些好的範例,哪怕是你做過的項目,重點不是看其所實現的功能,而是看其源程序的特點和結構!個別的可以關注一下演算法。還有一種方法,學一些軟體專業的必修基礎課,了解軟體編程的思維模式,這可能要搭些功夫,而且影響是潛移默化的,如果不是搞純軟體的話,個人觀點可以不學。

C語言編程能力並不完全體現在代碼的編寫效率和執行效率高。注意:是不完全,這方面的提升與個人的邏輯思維能力和其它知識水平有關。舉個例子:假如讓你編制一個函數實現求arctan反三角函數的值,你會怎麼做?如果你不知道採用級數展開的方法就無從下手。其實這考驗的是你的數學水平。所以這方面的提高是綜合性的,無法具體而談。
可以提升的我認為體現在如下幾個方面,這幾方面做好了,同樣也可以說具備相當的編程能力了。

1、軟體版本管理:任何軟體,每次修改發布後必須更新軟體版本號,這點工作後尤其關鍵,我見過這方面不認真的,別多了,3、4個版本後就焦頭爛額。
2、源程序中多些注釋:比如函數的功能描述、入口參數說明、返回值說明、調用的要求、完成日期等。另外,關鍵演算法的說明也應該注釋。常言道:好記憶不如爛筆頭,不能太過相信自己的智商。
3、工程化管理源程序:比如對一些常數、介面地址、數據類型定義(typedef)、數據結構定義、自定義的函數聲明等,應寫入單獨建立.H文件,然後在其它.C文件中包含。.C文件,如果軟體大的話也盡量的按照功能分別建立,然後在工程中包含。
4、有時,一個軟體會針對不同型號的設備,此時應採用#ifdef等編譯控制語句加以區分;而且,為方便調試,有時需要對一些狀態或變數賦與初值,而正式版本中不能要,也可以採用這種方法,便於管理,不易出錯。這部分內容應放在前面所說的.H文件中。
5、盡量多使用函數,這樣模塊化強,也能通過函數名看出函數功能,易於代碼閱讀。最簡單的例子就是初學者常用的Delay()。不過也別太過了,A=B+C就沒必要了。
6、對一些常數、地址,最好使用#define通過英文字元來代替,將其放在.H文件中,這樣萬一有變化,只需改一處即可,方便,又不會遺漏。比如定時器重裝值:
#define C_TH0_50MS (65536-50000)/256
如果需要改晶振,只需改此處即可。

以上注重的是整個軟體方面,下面說一些具體需要注意的,不成系統,也沒整理過,想到那說到哪吧。基本上是些規范,規范同樣代表著水平:
1、多分枝邏輯判斷類語句:應養成將所有判斷情況都寫出來、不用的注掉的習慣,這類語句包括if、switch,舉例
if(i==4)
{....}
//else if i>4
//else i<4
其中else的兩部份不用,那也寫出來,注掉。這樣幫助你保證程序的嚴密型,也有助於問題排查
2、常數、變數、函數、埠等的命名:(不要出現全局變數名與局部變數名相同的情況,雖然在C里允許這樣做)我個人採用如下規則
全局變數:類型+具有實際意義的片語或拼音,其中片語或拼音中每個字首字母應大寫。
例如: iSecondCount:一個int類型的秒計數變數
局部變數:全小寫字元,循環計數變數可以採用諸如i、j、k、n之類的無意義字元。最好不用
a、b、c之類的16進制數所使用的字元。
埠:全大寫,並使用具有實際意義的片語或拼音,使用_作為分割符。如KEY_COM
常數:前面加「C_」,後面每個單詞之間最好也加「_」,如上例中的C_TH0_50MS
函數:類似於全局變數,只是前面不加類型說明符。如Timer0、Delay、DelayMs。
3、源程序中的注釋符盡量不使用/* */,而使用//,這樣如果要臨時注掉大塊程序時,使用一次/* */就可以了,否則可能需要修改多處,麻煩。
4、格式上,注意縮進,尤其是多級判斷。而且執行體既便只有一句,有些地方也盡量不要忽略大括弧,舉例:
if(a>4)
{
a++;
}
else
{
a=0;
}
5、..............還有很多,一下想不起來。你可以自己體會,自己制定。

能力的體現方式有很多,比如說求職是否能如願。看人看細節,如果編程時養成了上述的習慣,不管你的實際水平如何,都說明了你的處事態度,在大家的智商水平差不多的前提下,無論於公於私,如果我是老闆的話會選擇你,放心的把任務交給你去做。
你先試試吧,說起來容易,做起來難,我自己的規則,我的執行度也就達到70%水平吧。

10. 單片機 用C語言怎麼編程!

每一種單片機都有一套自己的C編譯器,你可以直接用,也可以掛載到其他的編譯環境中
比如
Wave6000

51系列的
推薦用keilV8
Microchip系列的推薦用HT-PICC
編譯環境用MPLAB
然後編程代碼部分你寫好之後,編譯,此時會生成一些文件,如*.hex
,*.bin
……
然後把.hex
文件
利用燒寫器燒寫到單片機裡面
這樣單片機就可以按照編譯的程序執行了
單片機的種類不一樣,程序代碼也略有區別

閱讀全文

與單片機c語言技巧相關的資料

熱點內容
如何截獲手機app連接的ip 瀏覽:328
冰箱壓縮機是否需要電容 瀏覽:344
python列表每一行數據求和 瀏覽:274
自己有一台伺服器可以玩什麼 瀏覽:656
社會學波普諾pdf 瀏覽:584
解壓做食物的小視頻 瀏覽:758
pdf怎麼單獨設置文件夾 瀏覽:474
業務邏輯程序員 瀏覽:659
addto新建文件夾什麼意思 瀏覽:160
有伺服器地址怎麼安裝軟體 瀏覽:659
安卓如何完全清除數據 瀏覽:690
安卓安卓證書怎麼信任 瀏覽:53
伺服器被攻擊如何解決 瀏覽:221
學霸變成程序員 瀏覽:881
c語言編譯錯誤fatalerror 瀏覽:441
ipv4內部伺服器地址怎麼分配 瀏覽:463
java線程安全的方法 瀏覽:951
重復命令畫梯形 瀏覽:164
在疫情就是命令 瀏覽:328
自己搭建一個什麼伺服器好玩 瀏覽:253