當前位置:首頁 » 編程語言 » 單片機用c語言

單片機用c語言

發布時間: 2024-01-15 15:08:41

A. c語言在單片機中的應用

單片機就像是一個軀體,而程序就是它的靈魂。C語言就是製造(編寫)它的靈魂的工具。
單片機中的C語言與標准C語言有一些不同,有很多對位的定義和操作。在單片機應用中最常用的編譯軟體是KEIL
C51,功能強大。
C語言是一種高級語言,在單片機應用中其優點也是非常突出:編程靈活、可讀性、可移植性都很強。當然,若能在學C之前懂一些匯編語言,就更好啦。既能熟悉位操作,又能發揮C語言的優勢。

B. C語言,單片機主要運用到那些

在單片機的開發應用中,已逐漸開始引入高級語言,

C語言就是其中的一種。對用慣了匯編的人來說,總覺得高級語言』可控性』不好,不如匯編那樣隨心所欲。

但是只要我們掌握了一定的C語言知識,有些東西還是容易做出來的,以下是筆者實際工作中遇到的幾個問題,希望對初學C51者有所幫助。

一、C51熱啟動代碼的編制

對於工業控制計算機,往往設有有看門狗電路,當看門狗動作,使計算機復位,這就是熱啟春悔動。

熱啟動時,一般不允許從頭開始,這將導致現有的已測量到或計算到的值復位,導致系統工作異常。

因而在程序必須判斷是熱啟動還是冷啟動,常用的方法是:確定某內存單位為標志位(如0x7f位和0x7e位),

啟動時首先讀該內存單元的內容,如果它等於一個特定的值(例如兩個內存單元的都是0xaa),就認為是熱啟動,

否則就是冷扒虧正啟動,程序執行初始化部份,並將0xaa賦與這兩個內存單元。

根據以上的設計思路,編程時,設置一個指針,讓其指向特定的內存單元如0x7f,然後在程序中判斷,程序如下:

voidmain()

{chardata*HotPoint=(char*)0x7f;

if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa))

{/*熱啟動的處理*/

}

else

{HotPoint=0x7e;/*冷啟動的處進

*HotPoint=0xaa;

*(++HotPoint)=0xaa;

}

/*正常工作代碼*/

}

然而實際調試中發現,無論是熱啟動還是冷啟動,開機後所有內存單元的值都被復位為0,當然也實現不了熱啟動的要求。這是為什麼呢?原來,用C語言編程時,開機時執行的代碼並非是從main()函數的第一句語句開始的,在main()函數的第一句語句執行前要先執行一段』起始代碼』。正是這段代碼執行了清零的工作。C編譯程序提供了這段起始代碼的源程序,名為CSTARTUP.A51,打開這個文件,可以看到如下代碼:

.

IDATALENEQU80H;thelengthofIDATAmemoryinbytes.

.

STARTUP1:

IFIDATALEN<>0

MOVR0,#IDATALEN-1

CLRA

IDATALOOP:MOV@R0,A

DJNZR0,IDATALOOP

ENDIF

.

可見,在執行到判斷是否熱啟動的代碼之前,起始代碼已將所有內存單元清零。如何解決這個問題呢?好在啟動代碼是可以更改的,方法是:修改startup.a51源文件,然後用編譯程序所附帶的a51.exe程序對startup.a51編譯,得到startup.obj文件,然後用這段代碼代替原來的起始代碼。具體步驟是(設C源程序名為HOTSTART.C):

修改startup.a51源文件(這個文件在C51LIB目錄下)。

執行如下命令:

A51startup.a51得到startup.obj文件。將此文件拷入HOTSTART.C所在目錄。

將編好的C源程序用C51.EXE編譯好,得到目標文件HOTS

TART.OBJ。

用L51HOTSTART,STARTUP.OBJ命令連接,得到絕對目標文件HOTSTART。

用OHS51HOTSTART得到HOTSTART.HEX文件,即可。

對於startup.a51的修改,根據自已的需要進行,如將IDATALENEQU80H中的80H改為70H,就可以使6F到7F的16位元組內存不被清零。

二、直接調用EPROM中已固化的程序

筆者用的模擬機,由6位數碼管顯示,在內存DE00H處放顯示子程序,只要將要顯示的數放入顯示緩沖區,然後調用這個子程序就可以使用了,匯編指令為:

LCALL0DEOOH

在用C語言編程時,如何實現這一功能呢?C語言中有指向函數的指針這一概念,可以利空租用這種指針來實現用函數指針調用函數。指向函數的指針變數的定義格式為:

類型標識符(*指針變數名)();

在定義好指針後就可以給指針變數賦值,使其指向某個函數的開始存地址,然後用

(*指針變數名)()即可調用這個函數。如下例:

voidmain(void)

{

void(*DispBuffer)();/*定義指向函數指針*/

DispBuffer=0xde00;/*賦值*/

for(;;)

{Key();

DispBuffer();

}

}

三、將浮點數轉化為字元數組

筆者在編制應用程序時有這樣的要求:將運算的結果(浮點數)存入EEPROM中。我們知道,浮點數在C語言中是以IEEE格式存儲的,一個浮點數佔用四個位元組,例如浮點數34.526存為(160,26,10,66)這四個數。要將一個浮點數存入EEPROM,實際上就是要存這四個數。那麼如何在程序中得到一個浮點數的組成數呢?

浮點數在存儲時,是存儲連續的位元組中的,只要設法找到存儲位置,就可以得到這些數了。可以定義一個void的指針,將此指針指向需要存儲的浮點數,然後將此指針強制轉化為char型,這樣,利用指針就可以得到組成該浮點數的各個位元組的值了。具體程序如下:

#defineucharunsignedchar#defineuintunsignedintvoidFtoC(void)

{floata;

uchari,*px

ucharx[4];/*定義字元數組,准備存儲浮點數的四個位元組*、

void*pf;

px=x;/*px指針指向數組x*/

pf=&a;/*void型指針指向浮點數首地址*/

a=34.526;

for(i=0;i<4;i++)

{*(px+i)=*((char*)pf+i);/*強制void型指針轉成char型,因為*/

}/*void型指針不能運算*/

}

如果已將數存入EEPROM,要將其取出合並,方法也是一樣,可參考下面的程序。

#defineucharunsignedchar#defineuintunsignedint

voidCtoF(void)

{floata;

uchari,*px

ucharx[4]={56,180,150,73};

void*pf;

px=x;

pf=&a;

for(i=0;i<4;i++)

{*((char*)pf+i)=*(px+i);

}

}

以上所用C語言為FRANKLINC51VER3.2。


C. 51單片機c語言是什麼意思

C 語言,是計算機編程語言。
適合於入門者學習、使用。
51 單片機,是一種微型計算機。
用 C 語言,對其編程,就是「51單片機c語言」。

D. 單片機用什麼語言編程

單片機用以下語言可以編程:

1、C語言。單片機C語言是一種編譯語言,具有編譯語言的特點。C語言具有功能豐富的庫函數、計算速度快、編譯效率高、可移植性好,可直接控制系統。此外,C語言程序具有完整的程序模塊結構,為軟體開發中模塊化程序設計方法的使用提供了有力的保證。

2、匯編語言。它的主要優點是佔用資源少,程序執行效率高。因為它有一個指令,所以每個指令都很清晰,堆疊和調整都很容易控制,調試也很方便。但是不同類型的單片機可能有不同的編碼語言,所以不容易移植。

3、PL/M編程語言。P/M是一種具有L/M語言的高級語言,不僅具有L/M語言的高級匯編,而且直接利用CPU的硬體特性進行編程。因此,與其他高級語言相比,它具有更多的功能和更廣泛的應用,尤其是在16台單片機的應用領域。

4、BASIC編程語言。BASIC是一種高級語言,其英文意思是初學者通用符號代碼。在過去的幾十年裡,BASIC語言被認為是初學者編程的語言,已經從QBASIC發展到很多版本,有很多結構化的思維和編程方法,比如函數、模塊、局部變數、全局變數、數據傳輸等。

使用單片機語言的注意事項。

1、單片機編程的特點對單片機編程來說,首先要考慮的是單片機的程序空間和數據空間都是有限的,所以要讓程序盡量短小精悍,以節省程序佔用的存儲空間。

2、單片機編程的一個主要對象是對單片機的埠和內部寄存器的操作和配置,這個需要比較精確的時序控制。

3、單片機演算法運算中,盡量使用加法、減法、移位運算,因為乘法和除法運算會非常費時間,尤其是除法,會耗費很多時間,這對於速度本身就有限制的單片機來說,是一個很大的負擔。

4、高級語言編寫單片機程序的缺陷高級語言可以實現更為優化的演算法,更為方便的執行方案,但是,高級語言對程序存儲空間的佔用要比匯編和C語言多很多。這是最致命的一點,單片機有限的存儲空間需要靠精打細算來設計程序,根本經不起高級語言臃腫的代碼體積。

E. 單片機c語言char和int什麼區別啊

在單片機C語言中,char和int都是數據類型,但它們的數據范圍和作用有很大的區別。
char類型通常被用來表示字元型數據,比如字母、數字、符號等。在單片機中,char類型通常佔用1個位元組(8位),其數據范圍一般是-128到127或0到255。char類型的變數通常用於存儲單個搭態首字元或字元串。
int類型通常被用來表示整型數據,比如整數。在單片機中,int類型的大小通常是2個位元組(16位),其數據范圍一般是-32768到32767或0到65535。int類型的變數通常用於存儲整數型閉殲數據。
因此,char和int的區別主要在於數據范圍和作用。在單片機C語言中,char類型通常用於存儲字元型數據,而int類型則用於存儲整型數據。需要注意的是,char類型的變數可知數以通過強制類型轉換(如(int)ch)轉換為int類型的變數,但可能會導致數據精度的損失。

F. C語言與單片機C語言的區別 急求

單片機c語言比起普通C語言增加了一些基本的指令,變數的賦值是16進制,當然單片機c語言只牽涉到普通c語言的基礎部分。具體體現在:

1、單片機中C的語法一般都對ANSIC有些擴展,及一些特殊寫法如C51擴展的dataxdatabitsbit一類的,還有一些中斷程序寫法voidint()interrput1一類的。

2、C是一門語言,由對應平台的編譯器編譯成對應平台匯編的程序,各平台的匯編不一樣,當然編譯器也不一樣DOS上的TC2TC3WINDOWS上的VC8051的C51都有自已的編譯器。具體區別是由編譯器決的,只能參考對應的編譯手冊,即使同種平台不同的編譯器對C的擴展也有不同。

3、單片機c語言編程是基於C語言的單片機編程。單片機的C語言採用C51編譯器(簡稱C51)。由C51產生的目標代碼短,運行速度高,存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言PL/M51語言目標代碼混合使用。

C51本質就是C,是為在單片機上使用C而出來的,如果C不牢固,還是多掌握一點C再學C51,不過新增的知識也不少,而且基本上跟C無關。

4、C只是一種高級語言。它除具有一般高級語言的功能特性外,它可以很好的操作底層的硬體介面。在C語言的基礎上,如果你把一些單片機的埠或特殊功能寄存器加於定義,使之方便於在寫語句的時候,直接直觀的編寫。這樣就差不多是單片機C語言。

C語言的特性差不多都可以用於單片機C語言,因為它們的編譯機理都是一樣的。

(6)單片機用c語言擴展閱讀:

C語言:

C語言是一門通用計算機編程語言,廣泛應用於底層開發。C語言的設計目標是提供一種能以簡易的方式編譯、處理低級存儲器、產生少量的機器碼以及不需要任何運行環境支持便能運行的編程語言。

盡管C語言提供了許多低級處理的功能,但仍然保持著良好跨平台的特性,以一個標准規格寫出的C語言程序可在許多電腦平台上進行編譯,甚至包含一些嵌入式處理器(單片機或稱MCU)以及超級電腦等作業平台。

C語言是一門面向過程的計算機編程語言,與C++,Java等面向對象的編程語言有所不同。

其編譯器主要有Clang、GCC、WIN-TC、SUBLIME、MSVC、TurboC等。

單片機的C語言:

單片機軟體設計使用C語言作為編程開發軟體,採用模塊化的程序結構,設計了按鍵模塊程序、RFID模塊程序、日歷時鍾模塊程序、GPRS模塊程序、顯示存儲模塊程序等,並編寫系統主程序,將五個程序模塊組合在一起,實現單片機控制系統的整體功能。

51單片機支持三種高級語言,即PL/M,C和BASIC。C語言是一種通用的程序設計語言,其代碼率高,數據類型及運算符豐富,並具有良好的程序結構,適用於各種應用的程序設計,是目前使用較廣的單片機編程語言。

單片機的C語言採用C51編譯器(簡稱C51)。有C51產生的目標代碼短,運行速度高,所需存儲空間小,符合C語言的ANSI標准,生成的代碼遵循Intel目標文件格式,而且可與A51匯編語言或PL/M51語言目標代碼混合使用

C語言-網路

單片機C語言-網路

熱點內容
機加工的編程 發布:2024-11-30 00:31:19 瀏覽:727
坦克世界電腦什麼配置 發布:2024-11-30 00:30:41 瀏覽:317
如何在手機設置上找到網路的密碼 發布:2024-11-30 00:18:29 瀏覽:414
和鷹加密鎖 發布:2024-11-30 00:17:17 瀏覽:556
C語言舞會 發布:2024-11-30 00:15:44 瀏覽:377
java下載我的世界 發布:2024-11-30 00:11:08 瀏覽:12
華三配置器升級失敗怎麼回事 發布:2024-11-30 00:09:23 瀏覽:842
汽車空調壓縮機壽命 發布:2024-11-30 00:06:04 瀏覽:567
電腦網路波動異常與伺服器失去連接 發布:2024-11-29 23:43:19 瀏覽:247
個人電腦與伺服器架構類似 發布:2024-11-29 23:40:59 瀏覽:705