在單片機的開發應用中,已逐漸開始引入高級語言,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語言在單片機開發中的應用
相關推薦
51單片機C語言入門教程
51單片機C語言入門教程51 單片機C 語言學習雜記學習單片機實在不是件易事,一來要購買高價格的編程器,仿真器,二來要學習編程語言,還有眾多種類的單片機選擇真是件讓人頭痛的事。在眾多單片機中51
2009-09-24 09:00:12
51單片機C語言入門教程
51單片機C語言入門教程使用 C 語言肯定要使用到C 編譯器,以便把寫好的C 程序編譯為機器碼,這樣單片機才能執行編寫好的程序。KEIL uVISION2 是眾多單片機應用開發軟件中優秀的軟件之一
2009-11-27 08:50:37
51單片機C語言入門教程
51單片機C語言入門教程學習單片機實在不是件易事,一來要購買高價格的編程器,仿真器,二來要學習編程語言,還有眾多種類的單片機選擇真是件讓人頭痛的事。在眾多單片機中51 架構的芯片風行很久,學習資料也
2009-02-10 20:21:46
51單片機C語言入門教程
學習單片機實在不是件易事,一來要購買高價格的編程器,仿真器,二來要學習編程語言,還有眾多種類的單片機選擇真是件讓人頭痛的事。在眾多單片機中 51 架構的芯片風行很久,學習資料也相對很多,是初學的較好
2023-09-28 08:01:28
51單片機c語言教程全集
。KEIL uVISION2 是眾多單片機應用開發軟件中優秀的軟件之一,它支持眾多不一樣公司的MCS51架構的芯片,它集編輯,編譯,仿真等于一體,同時還支持,PLM,匯編和C語言的程序設計,它的界面和常用
2019-07-13 15:53:54
51單片機的C語言應用基礎程序設計
51單片機的C語言應用基礎程序設計匯編單片機的C語言應用程序設計1 C51數據類型及在51中的存儲方式2 C51數據的存儲類型與51存儲結構3 51特殊功能寄存器(SFR)的C51定義4 51
2021-07-15 08:33:54
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語言和匯編語言在開發單片機時各有哪些優缺點
01、C語言和匯編語言在開發單片機時各有哪些優缺點?C語言是一種結構化的高級語言。其優點是可讀性好,移植容易,是普遍使用的一種計算機語言。缺點是占用資源較多,執行效率沒有匯編高。對于目前普遍
2022-02-11 06:54:28
C語言和匯編語言在開發單片機時各有哪些優缺點?
C語言和匯編語言在開發單片機時各有哪些優缺點?C或匯編語言可以用于單片機,C++能嗎?搞單片機開發,一定要會C嗎?8088和196芯片單片機教材,請問哪里可以找到?初學者到底是應該先學C還是匯編?
2021-10-19 07:51:02
C語言的結構體和共用體在單片機中的妙用是什么
【分享】C語言的結構體和共用體在單片機中的妙用C語言的結構體和共用體,往往在單片機應用開發中被忽視。如果能夠用起來,不僅能夠極大的提高單片機的運行效率,還可能解決一些看起來無法解決的問題?,F在,給
2021-11-30 06:13:04
單片機C語言具有哪些功能
/*單片機C語言……在工程應有中,單片機語言和匯編語言使用廣泛,特別是實時時鐘系統,但它它們的可讀性和可維護性不強,代碼的可重用性也比較低。在單片機的開發應用中,逐漸引入了高級語言,C語言就是其中
2021-07-15 07:40:44
單片機C語言教程
和C語言的程序設計,它的界面和常用的微軟 VC++的界面相似,界面友好,易學易用,在調試程序,軟件仿真方面也有很強大的功能?! ∠旅娼Y合8051介紹單片機C語言的優越性: ·無須懂得單片機的具體硬件
2012-12-19 10:13:36
單片機c語言
,匯編和C語言的程序設計,它的界面和常用的微軟 VC++的界面相似,界面友好,易學易用,在調試程序,軟件仿真方面也有很強大的功能。本站提供的單片機c語言教程都是基于keilc51的?! ∠旅娼Y合
2014-02-13 14:26:18
單片機c語言入門
單片機c語言入門單片機c語言入門《新概念51單片機C語言教程:入門、提高、開發、拓展》從實際應用入手,以實驗過程和實驗現象為主導,循序漸進地講述51單片機C語言編程方法以及51單片機的硬件結構和功能
2021-07-15 08:10:39
單片機c語言案例教程,單片機C語言案例教程 精選資料分享
語言案例教程》介紹以不使用匯編語言,不使用編程器和不使用仿真器的簡約型開發手段,用Keil C51對51單片機進行系統編程的實用方法,從驅動一位數碼管顯示"8."的最簡單的程序起步,用十多個案例作為鋪墊,翔實地講解了含時控功...
2021-07-19 06:07:14
單片機c語言經典教程(共16課,連載)
· [圖文] 單片機c語言教程單片機c語言教程· [圖文] 單片機c語言教程第十六章--C51指針的使用· 單片機c語言教程第十五章--C51數組的使用· 單片機c語言
2009-04-14 23:45:43
單片機中的C規則是什么
文章目錄單片機中C語言的規則基本標點符號C語言關鍵字與五大語句32個關鍵字特殊關鍵字C51單片機預處理關鍵字單片機的常量(不可以被修改)單片機的變量構造類型:數組==**特別注意RAM和ROM區別
2022-01-24 07:21:03
單片機開發中應掌握的幾個基本技巧
在單片機應用開發中,代碼的使用效率問題、單片機抗干擾性和可靠性等問題仍困擾著.現歸納出單片機開發中應掌握的幾個基本技巧. 1、如何減少程序中的bug.對于如何減少程序的bug,應該先考慮系統運行中
2017-03-25 10:10:53
單片機開發中應該掌握的四個基本技巧
在單片機應用開發中,代碼的使用效率問題、單片機抗干擾性和可靠性等問題仍困擾著。現歸納出單片機開發中應掌握的幾個基本技巧。1、如何減少程序中的bug。對于如何減少程序的bug,應該先考慮系統運行中應考
2018-08-06 17:54:38
單片機開發中的幾個基本技巧
中的有序變化的參數?!?、如何提高C語言編程代碼的效率。用C語言進行單片機程序設計是單片機開發與應用的必然趨勢。如果使用C編程時,要達到最高的效率,最好熟悉所使用的C編譯器。先試驗一下每條C語言編譯
2018-06-23 15:36:33
單片機開發中的幾個基本技巧
、存儲單元長度、堆疊深度。應用參數:這些應用參數常表現為一些單片機、功能單元的應用條件。過程參數:指系統運行中的有序變化的參數。貳如何提高C語言編程代碼的效率:用C語言進行單片機程序設計是單片機開發
2016-09-26 23:20:44
單片機開發技巧小貼士
本帖最后由 dzdaw2013b 于 2013-6-4 14:02 編輯
在單片機應用開發中,代碼的使用效率問題、單片機抗干擾性和可靠性等問題仍困擾著工程師。為幫助工程師解決單片機設計上
2013-05-18 15:33:34
單片機AT89C51與C語言簡介
單片機AT89C51--2.單片機與C語言簡介1. 單片機概述1.1 計算機的組成1.2 單片機的內部結構1.3 封裝方式2. 開發板介紹3. C語言基礎4. 電子電路基礎1. 單片機概述1.1
2021-07-20 07:34:17
單片機為什么一直用C語言,不用其他編程語言
最適合單片機開發的編程語言實在太過晦澀難懂,并且每一種單片機的匯編指令有很大區別,所以想把一個程序從這種單片機移植到另一種單片機簡直是癡心妄想,還不如重新寫一遍程序。而C語言代碼執行效率高,也比較精簡,更便于移植......所以在現今的單片機編程語言中,C語言才會占據絕對主導地位
2020-05-19 14:23:07
單片機為什么一直用C語言,不用其他編程語言?
最適合單片機開發的編程語言實在太過晦澀難懂,并且每一種單片機的匯編指令有很大區別,所以想把一個程序從這種單片機移植到另一種單片機簡直是癡心妄想,還不如重新寫一遍程序。而C語言代碼執行效率高,也比較精簡,更便于移植......所以在現今的單片機編程語言中,C語言才會占據絕對主導地位
2020-06-30 10:30:41
單片機為什么要使用C語言
常用的標準函數庫,以供用戶直接使用; ·頭文件中定義宏、說明復雜數據類型和函數原型,有利于程序的移植和支持單片機的系列化產品的開發; ·有嚴格的句法檢查,錯誤很少,可容易地在高級語言的水平上迅速地被
2020-12-25 09:43:21
單片機為什么要使用C語言
的標準函數庫,以供用戶直接使用; ·頭文件中定義宏、說明復雜數據類型和函數原型,有利于程序的移植和支持單片機的系列化產品的開發; ·有嚴格的句法檢查,錯誤很少,可容易地在高級語言的水平上迅速地被排
2020-12-10 09:23:57
單片機原理及c語言程序設計
0417、C語言程序設計及應用實例單片機的C語言應用程序設計 0413、單片機原理與應用及C51程序設計課件電子教案0414、《單片機原理與應用》(金龍國)電子教案0427、單片機典型模塊設計實例0428、C語言趣味程序百例精解C語言程序設計及應用實例--2
2013-08-14 16:31:29
單片機的C 語言輕松入門
單片機的C 語言輕松入門單片機的C 語言輕松入門隨著單片機開發技術的不斷發展,目前已有越來越多的人從普遍使用匯編語言到逐漸使用高級語言開發,其中主要是以C 語言為主,市場上幾種常見的單片機均有其C
2008-09-09 14:14:17
單片機的C語言程序設計與應用
資源的C51編程,在實際應用的51單片機系統中,很少是由以單塊單片機獨立構成的,經常需要對單片機的相關資源進行擴展,本章將介紹單片機的并行口、鍵盤、顯示、A/D及D/A等擴展資源的C51編程。,41 并行...
2021-07-14 08:06:09
單片機的c語言應用程序設計
單片機C語言期末考試題..,單片機的c語言應用程序設計,單片機c語言編程,51單片機c語言程序100例,單片機c語言,單片機c語言編程思想,c語言開發單片機,c語言單片機程序,新概念51單片機c語言
2021-07-15 08:51:48
AVR單片機C語言開發入門指導
AVR單片機C語言開發入門指導,PDF文檔,希望對大家有用 AVR單片機C語言開發入門指導.pdf 15.76 MB, 下載次數: 64
2018-07-03 09:32:38
PIC 單片機的C語言編程
PIC 單片機的C語言編程 用 C 語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此C 語言編程在
2009-11-03 10:10:20
PIC單片機C語言學習教程
用 C 語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此 C 語言編程在單片機系統設計中已得到越來越廣泛的運用。針對 PIC 單片機的軟件開發,同樣可以用 C 語言實現。
2012-08-04 16:19:05
PIC單片機C語言學習教程
用C語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護 升級方便、代碼的重復利用率高、便于跨平臺的代碼移植等等,因此C語言編程在單片機 系統設計中已得到越來越廣泛的運用。針對
2011-10-26 12:12:15
PIC單片機C語言程序設計
文中,我們已在 MPLABIDE7.40集成開發環境中編輯 了pic07C源程序 (0~99秒脈沖發生器 )。對于PIC單片機來說 ,所有的C語言源程序,都要在進行編譯并生成 目標碼 .hex文件后,方能...
2021-07-15 08:56:00
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
STC單片機C語言程序設計
STC單片機C語言程序設計 第11章 STC單片機C語言描述語句STC單片機C語言描述語句主講輸入輸出語句在完整的計算機系統中,包含輸入輸出設備。典型的,在以PC機/筆記本為代表的計算機系統中,默認
2021-07-15 06:09:58
[原創]單片機的應用與開發技巧論文
運行中的有序變化的參數。 2、如何提高C語言編程代碼的效率。用C語言進行單片機程序設計是單片機開發與應用的必然趨勢。如果使用C編程時,要達到最高的效率,最好熟悉所使用的C編譯器。先試驗一下每條C
2010-03-22 11:26:58
[原創]使用單片機C語言的好處
使用; ·頭文件中定義宏、說明復雜數據類型和函數原型,有利于程序的移植和支持單片機的系列化產品的開發; ·有嚴格的句法檢查,錯誤很少,可容易地在高級語言的水平上迅速地被排掉; ·可方便地接受多種實用程序
2010-01-28 11:30:57
avr單片機C語言開發入門指導
avr單片機C語言開發入門指導本書介紹了ICCAVR編譯器使用C語言的有關知識,也穿插介紹ICCAVR與常用的其他C編譯器使用C語言的一些異同點,并簡單介紹ICCAVR的集成環境和ICCAGVR
2010-03-19 21:24:53
【單片機開發300問】單片機開發一定要會C語言嗎?
等問題。而且一些單片機廠家也不一定能提供C編譯器。而匯編語言,一條指令就對應一個機器碼,每一步執行什么動作都很清楚,并且程序大小和堆棧調用情況都容易控制,調試起來也比較方便。所以在資源較少單片機開發中
2011-11-16 16:45:23
【單片機開發300問】開發單片機時C語言和匯編語言哪個更好
,一條指令就對應一個機器碼,每一步執行什幺動作都很清楚,并且程序大小和堆棧調用情況都容易控制,調試起來也比較方便。所以在單片機開發中,我們還是建議采用匯編語言比較好。
2011-11-16 11:59:31
【跟我學單片機C語言】單片機C語言學習開篇寄語—導航貼
本帖最后由 eehome 于 2013-1-5 10:03 編輯
單片機c語言是高效的單片機開發語言電子發燒友論壇為了方便大家學習制作了一個單片機c語言教程,如果你是新手先看下下面的c51介紹
2011-11-29 10:54:12
為什么單片機C語言和我當初學的C語言有差異呢?
普通C語言增加了一些基本的指令,變量的賦值是16進制,當然單片機c語言只牽涉到普通c語言的基礎部分。具體體現在:1、單片機中C的語法一般都對 ANSI C有些擴展,及一些特殊寫法 如C51擴展的 data xdata bit ***it 一類的,還有一些中斷程序寫法 void int() int
2021-11-30 06:20:58
使用C語言編寫單片機的程序
上次說到了使用C語言編寫單片機的程序,既然使用編程語言,就需要有軟件把程序語言翻譯成機器能懂的機器碼,把機器碼下載進單片機,單片機才能運行。在這里,我們隆重推薦Keil uVision2,它支持眾多
2021-07-14 08:24:05
使用C語言進行單片機的開發
前言:單片機的開發也是可以使用C語言的,但是需要使用keil軟件將C語言生成的單片機可以直接執行的hex文件軟件安裝:51的開發程序可以在 進行下載雙擊運行安裝包,進行安裝安裝好keil之后需要進行
2021-11-19 08:13:19
如何學好單片機中的c語言
我剛從學校出來實習,本身是學單片機的,但是面試的時候,看我不會C,都把我DOWN掉了,所以準備痛下決心學好C,但是我看了譚浩強老師的C語言的書,覺得太籠統了(相對于單片機來說),沒有針對性,里面主要
2012-12-05 01:13:43
用C語言來開發單片機系統軟件最大的好處是什么
1.為什么也是C語言?用C語言來開發單片機系統軟件最大的好處是編寫代碼效率高、軟件調試直觀、維護升級方便、代碼的重復利用率高等,因此C 語言編程在單片機系統設計中越來越廣泛的運用。PIC 單片機
2021-07-15 09:17:01
講解位操作在單片機開發中的一些實用技巧
導讀C 語言是單片機開發中的必備基礎知識。我們這里就列舉部分STM32學習中會遇見的C 語言基礎知識點1.位操作下面我們先講解幾種位操作符,然后講解位操作使用技巧。C語言支持如下6中位操作:(圖1
2022-01-24 08:18:13
單片機方案開發注意事項及如何挑選PIC單片機進行學習
要對PIC單片機進行編程,你需要了解特定的開發工具的基本構件,例如配置寄存器,總線和存儲器類型。理解C編程語言、匯編語言等單片機開發語言等。此外,選擇正確的軟件開發工具集還可以使升級更加容易和快捷。
2020-06-29 09:59:17892
SDCC編譯器和FreeRTOS在C8051F上的開發應用
SDCC編譯器和FreeRTOS在C8051F上的開發應用(肇慶理士電源技術有限公司怎么樣)-引言MCS-51系列單片機應用廣泛,在我國學習研究的人較多。使用C語言在單片機上開發程序可提高開發效率
2021-09-17 12:53:518
單片機如何使用?51單片機C語言編程實例有哪些?
對單片機編程不同的程序,從而實現不同的功能。一、如何使用單片機?首先我們需要掌握單片機的編程語言,目前大多數的單片機都支持C語言編程 ,個別低端單片機還需要匯編語言。所以單片機開發,我們C語言編程基礎就可以滿足
2021-11-23 10:21:0917
單片機怎么寫入程序并燒錄程序?快收藏
同的編程語言,有的是C++,有的是匯編語言。可以參考單片機的開發手冊或技術手冊。寫好程序后,就可以進行下一步了。 程序編寫完成后,還需要通過深圳單片機仿真器進行測試。當然,這一步不是必須的。最主要的是測試功能是否正常
2023-05-24 18:03:063851
評論
查看更多