在單片機的開發應用中,已逐漸開始引入高級語言,C語言就是其中的一種。對用慣了匯編的人來說,總覺得高級語言’可控性’不好,不如匯編那樣隨心所欲。但是只要我們掌握了一定的C語言知識,有些東西還是容易做出來的,以下是筆者實際工作中遇到的幾個問題,希望對初學C51者有所幫助。
一、C51熱啟動代碼的編制
對于工業控制計算機,往往設有有看門狗電路,當看門狗動作,使計算機復位,這就是熱啟動。熱啟動時,一般不允許從頭開始,這將導致現有的已測量到或計算到的值復位,導致系統工作異常。因而在程序必須判斷是熱啟動還是冷啟動,常用的方法是:確定某內存單位為標志位(如0x7f位和0x7e位),啟動時首先讀該內存單元的內容,如果它等于一個特定的值(例如兩個內存單元的都是0xaa),就認為是熱啟動,否則就是冷啟動,程序執行初始化部份,并將0xaa賦與這兩個內存單元。
根據以上的設計思路,編程時,設置一個指針,讓其指向特定的內存單元如0x7f,然后在程序中判斷,程序如下:
void main()
{ char data *HotPoint=(char *)0x7f;
if((*HotPoint==0xaa)&&(*(--HotPoint)==0xaa))
{ /*熱啟動的處理 */
}
else
{ HotPoint=0x7e; /*冷啟動的處進
*HotPoint=0xaa;
*(++HotPoint)=0xaa;
}
/*正常工作代碼*/
}
然而實際調試中發現,無論是熱啟動還是冷啟動,開機后所有內存單元的值都被復位為0,當然也實現不了熱啟動的要求。這是為什么呢?原來,用C語言編程時,開機時執行的代碼并非是從main()函數的第一句語句開始的,在main()函數的第一句語句執行前要先執行一段’起始代碼’。正是這段代碼執行了清零的工作。C編譯程序提供了這段起始代碼的源程序,名為CSTARTUP.A51,打開這個文件,可以看到如下代碼:
.
IDATALEN EQU 80H ; the length of IDATA memory in bytes.
.
STARTUP1:
IF IDATALEN <> 0
MOV R0,#IDATALEN - 1
CLR A
IDATALOOP: MOV @R0,A
DJNZ R0,IDATALOOP
ENDIF
.
可見,在執行到判斷是否熱啟動的代碼之前,起始代碼已將所有內存單元清零。如何解決這個問題呢?好在啟動代碼是可以更改的,方法是:修改startup.a51源文件,然后用編譯程序所附帶的a51.exe程序對 startup.a51編譯,得到startup.obj文件,然后用這段代碼代替原來的起始代碼。具體步驟是(設C源程序名為HOTSTART.C):
修改startup.a51源文件(這個文件在C51\LIB目錄下)。
執行如下命令:
A51 startup.a51 得到startup.obj文件。將此文件拷入HOTSTART.C所在目錄。
將編好的C源程序用C51.EXE編譯好,得到目標文件HOTSTART.OBJ。
用 L51 HOTSTART, STARTUP.OBJ 命令連接,得到絕對目標文件HOTSTART。
用 OHS51 HOTSTART 得到HOTSTART.HEX文件,即可。
對于startup.a51的修改,根據自已的需要進行,如將IDATALEN EQU 80H中的80H改為70H,就可以使6F到7F的16字節內存不被清零。
二、直接調用EPROM中已固化的程序
筆者用的仿真機,由6位數碼管顯示,在內存DE00H處放顯示子程序,只要將要顯示的數放入顯示緩沖區,然后調用這個子程序就可以使用了,匯編指令為:
LCALL 0DEOOH
在用C語言編程時,如何實現這一功能呢?C語言中有指向函數的指針這一概念,可以利用這種指針來實現用函數指針調用函數。指向函數的指針變量的定義格式為:
類型標識符 (*指針變量名)();
在定義好指針后就可以給指針變量賦值,使其指向某個函數的開始存地址,然后用
(*指針變量名)()即可調用這個函數。如下例:
void main(void)
{
void (*DispBuffer)(); /*定義指向函數指針*/
DispBuffer=0xde00; /*賦值*/
for(;;)
{ Key();
DispBuffer();
}
}
三、將浮點數轉化為字符數組
筆者在編制應用程序時有這樣的要求:將運算的結果(浮點數)存入EEPROM中。我們知道,浮點數在C語言中是以IEEE格式存儲的,一個浮點數占用四個字節,例如浮點數34.526存為(160,26,10,66)這四個數。要將一個浮點數存入EEPROM,實際上就是要存這四個數。那么如何在程序中得到一個浮點數的組成數呢?
浮點數在存儲時,是存儲連續的字節中的,只要設法找到存儲位置,就可以得到這些數了??梢远x一個void的指針,將此指針指向需要存儲的浮點數,然后將此指針強制轉化為char型,這樣,利用指針就可以得到組成該浮點數的各個字節的值了。具體程序如下:
#define uchar unsigned char#define uint unsigned intvoid FtoC(void)
{ float a;
uchar i,*px
uchar x[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,要將其取出合并,方法也是一樣,可參考下面的程序。
#define uchar unsigned char#define uint unsigned int
void CtoF(void)
{ float a;
uchar i,*px
uchar x[4]={56,180,150,73};
void *pf;
px=x;
pf=&a;
for(i=0;i<4;i++)
{ *((char *)pf+i)=*(px+i);
}
}
以上所用C語言為FRANKLIN C51 VER 3.2。
C語言在單片機開發中的應用
相關推薦
熱點推薦
C語言在51單片機編程中的應用技巧
隨著單片機硬件性能的提高,編寫應用程序更著重于程序本身的效率。Franklin或KEII.C51交叉編譯器是專為51系列單片機設計的一種高效的C語言編譯器,用其開發的應用程序易于維護,可移植性好
2021-07-14 07:18:37
C語言—單片機編程使用的高級語言
語言的優勢更能得到發揮。使用C語言編程的單片機芯片執行速度的問題,配合英銳恩推出的開發工具仿真器,找出關鍵代碼,進一步用人工優化,可以達到十分滿意的程度。單片機編程采用C語言編程的優勢:1.C語言
2018-10-20 16:38:57
C語言和匯編語言在開發單片機時各有哪些優缺點?
C語言和匯編語言在開發單片機時各有哪些優缺點?C或匯編語言可以用于單片機,C++能嗎?搞單片機開發,一定要會C嗎?8088和196芯片單片機教材,請問哪里可以找到?初學者到底是應該先學C還是匯編?
2021-10-19 07:51:02
單片機C語言具有哪些功能
/*單片機C語言……在工程應有中,單片機語言和匯編語言使用廣泛,特別是實時時鐘系統,但它它們的可讀性和可維護性不強,代碼的可重用性也比較低。在單片機的開發應用中,逐漸引入了高級語言,C語言就是其中
2021-07-15 07:40:44
單片機的C 語言輕松入門
單片機的C 語言輕松入門單片機的C 語言輕松入門隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用匯編語言到逐漸使用高級語言開發,其中主要是以C 語言為主,市場上幾種常見的單片機均有其C
2008-09-09 14:14:17
PIC 單片機的C語言編程
PIC 單片機的C語言編程 用 C 語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此C 語言編程在
2009-11-03 10:10:20
PIC單片機C語言學習教程
用C語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護 升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此C語言編程在單片機 系統設計中已得到越來越廣泛的運用。針對
2011-10-26 12:12:15
PIC單片機的C語言編程
PIC單片機的C語言編程用C 語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此C 語言編程在單片機系統設計中已得到
2008-09-09 14:13:45
PIC單片機的C語言編程
,因此C語言編程在單片機系統設計中已得到越來越廣泛的運用。針對PIC單片機的軟件開發,同樣可以用C語言實現。但在單片機上用C語言寫程序和在PC機上寫程序絕對不能簡單等同?,F在的PC機資源十分豐富,運算
2011-03-03 10:55:33
【單片機開發300問】單片機開發一定要會C語言嗎?
等問題。而且一些單片機廠家也不一定能提供C編譯器。而匯編語言,一條指令就對應一個機器碼,每一步執行什么動作都很清楚,并且程序大小和堆棧調用情況都容易控制,調試起來也比較方便。所以在資源較少單片機開發中
2011-11-16 16:45:23
使用C語言進行單片機的開發
前言:單片機的開發也是可以使用C語言的,但是需要使用keil軟件將C語言生成的單片機可以直接執行的hex文件軟件安裝:51的開發程序可以在 進行下載雙擊運行安裝包,進行安裝安裝好keil之后需要進行
2021-11-19 08:13:19
51單片機c語言入門
單片機的C 語言輕松入門隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用匯編語言到逐漸使用高級語言開發,其中主要是以C 語言為主,市場上幾種常見的
2008-09-09 13:59:10
496
496pic單片機c語言教程
PIC 單片機C 語言編程簡介用C 語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因
2008-09-09 14:02:53
1071
1071單片機c語言入門教程
51 單片機C 語言學習雜記學習單片機實在不是件易事,一來要購買高價格的編程器,仿真器,二來要學習編程語言,還有眾多種類的單片機選擇真是件讓人頭痛的事。在眾多
2008-09-09 14:04:19
481
481AVR單片機C語言開發入門指導
AVR單片機C語言開發入門指導:本書介紹了ICCAVR編譯器使用C語言的有關知識,也穿插介紹ICCAVR與常用的其他C編譯器使用C語言的一些異同點,并簡單介紹ICCAVR的集成環境和ICCAVR 6.26C能
2008-10-27 22:41:45
27
27AVR系統單片機C語言編程與應用實例
AVR系統單片機C語言編程與應用實例針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發環境,詳細地介紹了AT90LS8535的C語言程序設計。全書共有13章,其內容既涉及到了單片機
2008-10-27 22:51:11
102
102AVR單片機C語言編程及應用實例
AVR單片機C語言編程及應用實例:本書針對Atmel公司的AVR系列單片機和ImageCraft公司的ICC AVR開發環境,詳細地介紹了AT90LS8535的C語言程序設計。全書共有13章,其內容既涉及到了單片機
2009-04-27 20:45:53
0
0單片機C語言編程應注意的若干問題
本文較詳細地分析了單片機C 語言的特點,就單片機系統資源對C 語言編程的制約,匯編與C語言混合編程等問題進行進行了討論,并給出了相應的處理程序。關鍵詞: 單片機;C
2009-08-25 14:16:27
43
438051單片機C語言軟件設計的藝術
8051單片機C語言軟件設計的藝術:主要介紹了8051單片機C語言軟件設計的思維與解決方法。《8051單片機C語言軟件設計的藝術》每一章都是一個精彩的例子,范例說明深入淺出。重點
2009-10-08 21:21:29
0
08051單片機C語言徹底應用 (電子書)
8051單片機C語言徹底應用:介紹8051單片機C語言結合硬件編程應用的工程方法。《8051單片機C語言徹底應用》通過一個個實用的例子分析,講解了C語言實現自動控制和界面的設計方法,
2009-10-08 21:25:36
0
08051單片機C語言開發環境實務與設計
8051單片機C語言開發環境實務與設計從基礎出發,循序漸進地介紹8051單片機的C語言程序開發環境、窗口操作、C語言的概念與結構、中斷程序編寫方法、程序的設計技巧、模塊化程序
2009-10-08 21:28:06
0
0單片機c語言輕松入門
單片機c語言輕松入門:隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用匯編語言到逐漸使用高級語言開發,其中主要是以C 語言為主,市場上幾種常見的單片機均
2009-10-09 10:19:56
200
200MSP430系列單片機C語言程序設計與開發
MSP430系列單片機C語言程序設計與開發MSP430系列是一個具有明顯技術特色的單片機品種。關于它的硬件特性及匯編語言程序設計已在《MSP430系列超低功耗16位單片機的原理與應用》
2009-10-09 17:23:57
1102
1102單片機C語言應用程序設計
單片機C語言應用程序設計針對目前最通用的單片機8051和最流行的程序設計語言——C語言,以KEII。公司8051單片機開發套件講解單片機的C語言應用程序設計。該套件的編譯器有支
2009-10-09 17:53:49
172
17251單片機C語言提升教程
51單片機C語言提升教程
51 單片機C 語言學習雜記學習單片機實在不是件易事,一來要購買高價格的編程器,仿真器,二來要學習編程語言,還有眾多種類的單
2010-03-29 14:32:29
191
191AVR 單片機和C語言的集成開發環境
AVR 單片機和C語言的集成開發環境
ICCAVR編譯器簡介
ICCAVR是一個綜合了編輯器和工程管理器的集成開發環境(IDE),是一個純32位的程序,可在Windows 95/98
2010-04-13 15:11:33
104
104PIC單片機的C語言編程指南
用C語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此C語言編程在單片機系統設計中
2010-07-15 13:54:58
93
93單片機的C語言輕松入門
隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用匯編語言到逐漸使用高級語言開發,其中主要是以C語言為主,市場上幾種常見的單片機均有其C語言開發環境。
2010-12-17 21:23:03
489
489單片機c語言教程單片機c語言教程
單片機c語言教程單片機c語言教程
前面的文章中介紹了 C 語言的基本數據類型,為了更有效的處理更復雜的數據,C 語 言引入了構造類型的數據類型。構造類型就是將一批各
2009-04-15 09:45:04
5433
5433
單片機開發技巧
一、 如何提高C語言編程代碼的效率鄧宏杰指出,用C語言進行單片機程序設計是單片機開發與應用的必然趨勢。他強調:“如果使用C編程時,要達到最高的效
2010-06-29 18:24:21
965
965單片機C語言編程中“位”的保存方案
引言
在現有的教課書及相關文章中,都難得提到在單片機C語言編程中對于自定義“位”的狀態進行保存的理念。
當單片機C語言編程中提及“位”的概念時
2010-07-06 11:44:13
2473
2473PIC單片機C語言概述
用C語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此 C語言編程 在單片機系統設計中已
2011-07-11 15:12:47
382
38251單片機C語言創新教程
《51單片機c語言創新教程》以宏晶公司的 stc89c52rc 單片機為藍本,由淺人深,并結合smartm51開發板系統地介紹單片機的原理與結構、開發環境的使用、各種功能器件的應用。 《51單片機
2011-07-18 17:57:03
0
0單片機的C語言輕松入門資料
隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用匯編語言到逐漸使
用高級語言開發,其中主要是以C 語言為主,市場上幾種常見的單片機均有其C 語言開發環境。這里以最為流行的80C51 單片機為例來學習單片機的C 語言編程技術。
2017-04-25 16:48:12
58
58單片機應用開發技術基于Proteus單片機仿真和C語言編程第二版教學課件
本文檔的主要內容詳細介紹的是單片機應用開發技術基于Proteus單片機仿真和C語言編程第二版教學課件包括了:第一章 單片機開發軟件快速入門,第二章 單片機的硬件結構和工作原理,第三章 C51語法簡介
2019-05-28 08:00:00
0
0學習AVR單片機C語言編程的方法和教程說明
AVR單片機是一種新型高效的單片機,主要的編程語言是C語言,但與一般的c語言又有所不同,與其它的單片機C語言也有所不同,AVR單片機C語言有自已的特點.學習AVR單片機首先要解決 AVR單片機c語言
2019-12-30 08:00:00
17
17單片機程序開發的語言怎么選擇
單片機程序的開發可以使用的兩種語言,分別是C語言和匯編語言。這里要指出的一件事是,這不是嵌入式單片機開發工程師唯一可以使用的兩種語言,在許多情況下,使用其他語言可能是更好的選擇。
2020-06-29 11:22:29
4121
4121單片機C語言程序設計的詳細資料
C語言目前己成為電子工程師進行單片機系統開發時的常用編程語言。用C語言來編寫目標系統軟件,會大大縮短開發周期,且明顯地增加軟件的可讀性,便于改進和擴充。用C語言編寫的應用程序必須經單片機的C語言
2020-07-07 14:48:01
76
76單片機C語言和C語言為什么有差異?
許多小伙伴在學完C語言后想入門單片機,但學著學著發現明明都是C語言,為什么單片機C語言和我當初學的C語言有差異呢?今天小編就來梳理我們平時所學的C語言與單片機C語言的有什么樣的不同。
2020-09-01 16:39:01
4182
4182PIC單片機的C語言編程電子版下載
用C語言來開發單片杋系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率髙、便于跨平臺的代碼移植等等,因此C語言編程在單片機系統設計中已得到越來越廣泛的運用。針對PIC單片機的軟件開發,同樣可以用C語言實現。
2021-05-13 09:31:39
0
0單片機c語言編程入門教程
單片機c語言編程入門教程說難不難,說易不易,學習單片機c語言首先就要明白這兩樣東西是啥?單片機入門編程主要是學C語言,其次就是電路跟編程語言。
2021-07-29 10:39:16
20649
206491.單片機和C語言的關系(5)
單片機和C語言的關系1.單片機一般使用C語言來編程2.學習單片機C語言的學習占比很大3.C語言不止用于單片機1.單片機一般使用C語言來編程2.學習單片機C語言的學習占比很大3.C語言不止用于單片機...
2021-11-10 20:35:59
18
18單片機C語言入門自學指南(前期準備)
盡快的掌握單片機C語言知識,今天我就給大家分享一下單片機C語言到底如何入門自學。C語言是一種偏向底層的語言,更多的是應用在嵌入式領域,或者操作系統的開發,單片機只是C語言應用的一個小分支。下面,我給大家簡單的介紹一
2021-11-13 20:36:05
15
15單片機AT89C51--2.單片機與C語言簡介
單片機AT89C51--2.單片機與C語言簡介1. 單片機概述1.1 計算機的組成1.2 單片機的內部結構1.3 封裝方式2. 開發板介紹3. C語言基礎4. 電子電路基礎1. 單片機概述1.1
2021-11-20 16:06:02
9
9C語言的結構體和共用體在單片機中的妙用
【分享】C語言的結構體和共用體在單片機中的妙用C語言的結構體和共用體,往往在單片機應用開發中被忽視。如果能夠用起來,不僅能夠極大的提高單片機的運行效率,還可能解決一些看起來無法解決的問題。現在,給
2021-11-20 19:36:05
20
20C語言和單片機C語言為什么會有差異?雖不同但理同!
普通C語言增加了一些基本的指令,變量的賦值是16進制,當然單片機c語言只牽涉到普通c語言的基礎部分。具體體現在:1、單片機中C的語法一般都對 ANSI C有些擴展,及一些特殊寫法 如C51擴展的 data xdata bit sbit 一類的,還有一些中斷程序寫法 voi
2021-11-20 20:06:10
10
10學單片機需要多少C語言基礎,C語言單片機編程教程
很多學員和朋友經常找我給他們推薦C語言的書,他們可能想和我當年一樣,悶頭大干一場,學個幾個月的C語言,把C語言吃透,再開始單片機程序開發!別!別!別! 大家千萬別這么干,我當年自學了3個月的C語言
2021-11-21 09:36:01
23
23單片機C語言的知識匯總
一、概述1、結合8051介紹單片機C語言的優越性:·無須懂得單片機的具體硬件,也能夠編出符合硬件實際的專業水平的程序; ·不懂得單片機的指令集,也能夠編寫完美的單片機程序; ·不同函數的數據
2021-11-21 09:36:02
48
48單片機如何使用?51單片機C語言編程實例有哪些?
對單片機編程不同的程序,從而實現不同的功能。一、如何使用單片機?首先我們需要掌握單片機的編程語言,目前大多數的單片機都支持C語言編程 ,個別低端單片機還需要匯編語言。所以單片機開發,我們C語言編程基礎就可以滿足
2021-11-23 10:21:09
17
17單片機c語言+編程c語言_C編程語言簡介
單片機c語言+編程c語言In this tutorial you will get basic introduction to C programming language. 在本教程中,您將獲得C
2021-11-29 10:21:14
39
39C語言條件編譯語句and單片機DMA的介紹
C語言條件編譯語句and單片機DMA的介紹C語言條件編譯:這里面介紹的很詳細,也有歷程。DMA的介紹:介紹了單片機中為什么要使用DMA,以及使用了DMA對于單片機有哪些優點。
2021-11-29 10:36:03
3
3單片機的c語言入門指南
隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用匯編語言到逐漸使 用高級語言開發,其中主要是以 C 語言為主,市場上幾種常見的單片機均有其 C 語言開發 環境。這里以最為流行的 80C51 單片機為例來學習單片機的 C 語言編程技術。
2023-07-07 14:34:42
14
14你用過哪些編程語言開發單片機?
C語言是最常用的一種用于單片機的開發語言,也是一種高級編程語言,具有較好的可移植性和可讀性。對于單片機,通常使用嵌入式C來進行開發。 舉例:用C語言寫一段STM32單片機點燈程序。
2023-12-04 10:18:19
2789
2789
電子發燒友App


評論