單片機的C語言是如何在單片機內運行的?
如上一段程序是如何在AT89C51內運行的?
#include"reg51.h"
#include"intrins.h"
#define uchar unsigned char
#define uint unsigned int
void delay(uint i)
{
uchar t;
while(i--)
{
for(t=0;t&<120;t++); } } void main() { P1=0xfe; while(1) { delay( 500 ); P1=_crol_(P1,1); } }求解釋 看了很久 還是找不出因為所以。(要學習彙編么?)
建議題主還是用刷知乎的時間多聽聽課吧。 1,基本的概念和原理你都沒有弄明白。什麼叫單片機的C語言?單片機從來不認識C語言和彙編,單片機本身只和可執行文件聯繫,單片機上面運行的程序都是可執行文件。而為了生成可執行文件,我們用計算機以及特定的開發工具,利用C語言等能夠方便使用的語言,根據具體的需求(最簡單的比如點亮二極體,在lcd上顯示字元,跑馬燈等)編寫代碼,然後用開發工具編譯鏈接寫好的C文件最終生成可執行文件,最後將可執行文件下載到單片機上運行。
2,就你所問的問題來看,你們涉及的內容還屬於比較入門的。不需要學彙編,先把程序看懂。這段程序都不懂,彙編你能懂?程序應該是要完成那幾個二極體的循環點亮。這裡面P1就是八個二極體對應的值。比如目前圖中只有第七個二極體,對應的P1為11111101,化成十六進位為0xfd;相反地,程序一進來給P1的值為0xfe,對應的二進位為11111110,那麼此時只有最後一個二極體亮。delay那個函數要等待一段時間, crol是將P1循環左移,從而不斷改變P1,每隔一段時間,亮的led的位置就會變化。
3,至於include的兩個文件基本針對於所用單片機的庫函數以及部分引導程序,比如裡面可能定義了這段程序里用到的P1和crol.
4,少年好好聽課吧。我真的感覺這是最基礎的知識,好好做實驗,好好寫實驗報告,稍微走點心
C語言源程序-----&>C編譯器-----&>彙編代碼-----&>彙編器-----&>機器代碼所謂的單片機C語言的意思是拿C語言來編寫單片機程序,沒有什麼C語言控制單片機這回說法。具體過程是:C語言源程序通過特定的C編譯器編譯為針對某種單片機的彙編代碼,再由彙編器將彙編代碼彙編為單片機可執行的機器代碼,然後下載到單片機的存儲器運行。當前一般的集成開發環境(如Keil C)可以一次搞定生成機器代碼。需要補充一點的是,單片機也是一種計算機,不要以為只有在PC機上才可以用C語言編程,C語言可以用作為任何計算機的編程語言,當然包括單片機,但有一個條件就是,你必需要有針對某種架構的計算機的C編譯器。目前來講,C語言的編譯器種類非常多,有用於各種單片機以及微處理器架構的編譯器版本,所以可以用C來做為單片機的編程語言。不同的是,你用TC或者VC編譯得到的是X86(如Intel,AMD)的目標代碼,只能在PC機上運行,而如果用單片機C編譯器(比如Keil C)編譯的代碼是單片機代碼,只能在特定的單片機上運行。目前C/C++是最流行的單片機/微處理器編程語言。
我來回答。 我也是剛剛開始自學單片機(水平太低,大家不要見笑~~補充一下,本人大二,北京理工大學,題主要是有興趣的話可以加個微信什麼的。),這個點亮二極體的電路我前幾天也剛做過。我理解的是這個程序就是控制管腳輸出高低電平的。你那個二極體一端接5V高電平,另一端接在P1口。打個比方,讓P1.0=0,就行當於P1.0輸出低電平,然後二極體就導通了。。。。。。
第一次回答,不知道說的名不明白。
slf2930378825微信。機器只「認識」機器語言(二進位的)。
從C到機器語言的翻譯工作由編譯器、彙編器、鏈接器等程序來完成。然後一位接著一位的「填」在內存里就可以"走"了。參考《深入理解計算機系統》一書。
程序的解釋上面說得很清楚了,我就推薦你一個教學視屏(廣告了) 郭天祥十天學會單片機, 很適合新手,就算c語言基礎差也可以弄懂,
這個就不是一句話兩句話說得清楚的,有本書叫做微機原理,裡面用8086晶元作為講解,還有彙編語言的講解,少年,不要企圖在知乎一句話兩句話看懂什麼,搞技術的,還是踏踏實實學習多讀書,多實踐。
你的代碼是C51源代碼,需要相應編譯器KEIL或IAR等等,編譯完成後載入到模擬器(海神,NI)模擬,或者開發機上運行
推薦閱讀:
※PLC在控制系統中扮演了什麼角色?
※感測器反饋(4~20mA)到 PLC 模塊,感測器只有兩根線,一根接 24V,一根接模擬量模塊?
※在新單位接觸到PLC,如何快速的入門?
TAG:編程語言 | C編程語言 | 單片機 | 可編程邏輯控制器PLC |