C語言,單片機主要運用到那些?
在單片機的開發和應用中,高級語言已經逐漸被引入。
c語言就是其中之一。對于習慣于組裝的人來說,他們總是覺得可控性高級語言的不好,所以不如匯編自由。
但是,只要我們有一定的C語言知識,有些東西還是很容易做出來的。以下是筆者在實際工作中遇到的一些問題,希望對C51初學者有所幫助。
一、C51熱啟動代碼的編譯
對于工業控制計算機,通常有一個看門狗電路。當看門狗動作時,計算機復位,這是熱啟動。
一般情況下,熱態啟動時不允許從零開始,這會導致現有的測量值或計算值被重置,從而導致系統運行異常。
所以當一個程序必須判斷是熱啟動還是冷啟動時,常見的方法有:確定某個內存單元為標志位(如0x7f位和0x7e位),
啟動時,首先讀取存儲單元的內容,如果它等于特定值(例如,兩個存儲單元都是0xaa),則認為是熱啟動。
否則就是冷啟動,程序執行初始化部分,給這兩個存儲單元賦值0xaa。
按照上面的設計思路,在編程的時候,設置一個指針指向某個特定的存儲單元,比如0x7f,然后在程序中進行判斷。該計劃如下:
voidmain()
{chardata*HotPoint(char*)0x7f
if((*hotpoint0xaa)ampamp(*(-hotpoint)0xaa))
{
}
其他
{HotPoint0x7e
}
但在實際調試中發現,無論是熱啟動還是冷啟動,啟動后所有存儲單元的值都被重置為0,當然也無法實現熱啟動的要求。這是為什么呢?原來用C語言編程時,啟動時執行的代碼并不是從main()函數的第一句開始,而a開始代碼應該在main()函數的第一句執行之前執行。正是這個代碼執行清除工作。c編譯器提供了這個初始代碼的源程序,命名為CSTARTUP。A51打開這個文件,可以看到下面的代碼:
。
IDATAl:
如果IDATALENltgt0
MOVR0,#伊達倫-1
CLRA
IDATALOOP:·MOV
DJNZR0,IDATA環
ENDIF
。
可以看出,初始代碼在執行代碼判斷是否熱啟動之前,已經清空了所有的存儲單元。如何解決這個問題?幸運的是,可以通過修改startup.a51的源文件,然后用編譯器附帶的a51.exe程序編譯startup.a51得到startup.obj文件,再用這段代碼替換原來的啟動代碼,來改變啟動代碼。具體步驟是(設C源程序命名為HOTSTART。c):
修改startup.a51源文件(該文件位于C51LIB目錄中)。
執行以下命令:
A51startup.a51獲取startup.obj文件。將該文件復制到HOTSTART的目錄中。C
用C51.EXE編譯編譯好的C源程序,得到目標文件HOTS。
酸酸的。OBJ.
使用命令L51HOTSTART,STARTUP進行連接。OBJ獲得絕對目標文件熱啟動。
獲得快速啟動。帶OHS51熱啟動的十六進制文件。
startup.a51的修改要根據自己的需求進行。例如,如果IDATAL:。
LCALL0DEOOH
用C語言編程如何實現這個功能?C語言中有一個函數指針的概念,可以用函數指針來調用函數。函數指針變量的定義格式為:
類型標識符(*指針變量名)()
定義指針后,可以給指針變量賦值以指向函數的起始地址,然后使用
(*指針變量名)()可以調用這個函數。例如:
無效總管(無效)
{
Void(*DispBuffer)()
DispBuffer0xde00
用于()
{密鑰()
調度緩沖區()
}
}
3、將浮點數轉換成字符數組
作者在編寫應用程序時有這樣一個要求:運算結果(浮點數)存儲在EEPROM中。我們知道,浮點數在C語言中是以IEEE格式存儲的,一個浮點數占用四個字節。例如,浮點數34.526存儲為四個數字(160,26,10,66)。要求在EEPROM中存儲一個浮點數,其實就是存儲這四個數。那么如何在程序中得到一個浮點數的組成呢?
存儲浮點數時,它們存儲在連續的字節中。只要你試著找到存放地點,就能得到這些數字。可以定義一個void的指針,將指針指向要存儲的浮點數,然后將指針強制轉換為char類型,這樣就可以使用指針得到構成浮點數的每個字節的值。具體程序如下:
#defineucharunsignedchar#defineuintunsignedintvoidFtoC(void)
浮動a
uchari,*px
Ucharx[4]
Pfampa
a34.526
用于(Ioilt4I)
{*(pxi)*((char*)pfi)
}
}
如果號碼已經存在EEPROM中,就要取出來合并,方法相同。請參考以下程序。
#defineuchar無符號char#defineuint無符號int
voidCtoF(無效)
浮動a
uchari,*px
ucharx[4]{56,180,150,73}
void*pf
pxx
普法帕
用于(Ioilt4I)
{*((char*)pfi)*(pxi)
}
}
上面使用的C語言是富蘭克林C51V
什么叫單片機?
什么是單片機?
答::單片機因將其主要部件集成在一個芯片上而得名,具體來說就是將中央處理器、隨機存取存儲器ROM(只讀存儲器、中斷系統、定時器/計數器、I/O(輸入/輸出)接口電路等主要微機部件集成在一個芯片上。雖然單片機只是一個芯片,但從組成和功能上來說,它具有計算機系統的屬性,所以簡稱為單片機(SCMC)。
單一的單片機的發展歷史并不長,但單片機發展很快,種類太多,從1位、4位、8位到16位、32位單片機,集成度更高,功能更強,應用更廣。如今,高速單片機已經發展到300M。
單片機的分類及應用領域
1.單片機的分類
根據控制應用的需要,單片機可分為通用型和專用型。通用單片機是一種基礎芯片,內部資源豐富,性能全面,適用性強,可以覆蓋多種應用需求。用戶可以根據自己的需求為不同的應用設計控制系統,即一般的單片機都有一個重新設計的過程。
通過用戶的進一步設計,可以形成以通用單片機為核心,配以其它外圍電路的應用控制系統。
2.單片機的應用領域
(1)工業自動化。工業生產的自動化可以使工業系統處于最佳狀態,提高經濟效益,提高產品質量,降低操作人員的勞動強度。因此,自動化技術已廣泛應用于機械、電子、電力、石油、化工、紡織、食品等輕重工業領域。在工業自動化技術中,無論是過程控制技術、數據采集與測控技術,還是生產線上的機器人技術,都需要單片機的參與。在工業自動化領域,機電一體化技術將發揮越來越重要的作用。在這項集機械、微電子和計算機技術于一體的綜合技術中,單片機將發揮越來越重要的作用。
(2)儀器儀表。現代儀器儀表的自動化、智能化要求越來越高,最好用單片機來實現。隨著單片機的使用,將加速儀器儀表的數字化、智能化、多功能化和柔性化。
性化的發展。而且,單片機的使用還有助于提高儀器的精度和準確度,簡化結構,減小體積和質量,便于攜帶和使用。還具有降低成本、增強抗干擾能力、便于增加顯示、報警和自診斷等功能。
(3)家用電器。智能化是家電的發展趨勢,也是家電產品的進一步提高。;智能化需要單片機的參與,所以廠家經常標榜"計算機控制與應用提高自己產品的檔次,如洗衣機、冰箱、空調、微波爐、電視機和視聽設備等。"計算機與電子產品這里說的其實是單片機。
幸福在于知足上海2019年7月25日。