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