單片機開(kāi)發(fā)中的一些實(shí)用技巧(上)
很多朋友正在學(xué)習單片機開(kāi)發(fā)技術(shù),但開(kāi)發(fā)中免不了要碰到這樣、那樣的問(wèn)題,有些問(wèn)題可能無(wú)礙大局,但有一些問(wèn)題卻直接影響到產(chǎn)品的成本、體積、性能。這里介紹筆者的幾個(gè)技巧,希望對大家的工作有幫助。
本文引用地址:http://dyxdggzs.com/article/172182.htm一.C語(yǔ)言中嵌入匯編語(yǔ)言
單片機開(kāi)發(fā)中,通常我們使用C語(yǔ)言編寫(xiě)主程序,這樣可以充分借助C語(yǔ)言工具提供的運算庫函數及強大的數據處理能力。但C語(yǔ)言的可控性不及匯編語(yǔ)言,在有些對時(shí)序要求嚴格的處理上,我們還需用靈活性更強的匯編語(yǔ)言來(lái)編寫(xiě)。上海AVR單片機培訓這樣就產(chǎn)生了C語(yǔ)言和匯編語(yǔ)言混合編程的問(wèn)題,一般分成三種方式:1.匯編語(yǔ)言調用C語(yǔ)言函數;2. C語(yǔ)言調用匯編語(yǔ)言;3. C語(yǔ)言中嵌入匯編語(yǔ)言。這里我們主要介紹第3種,即C語(yǔ)言中嵌入匯編語(yǔ)言。
下面的一段程序是主程序調用精確的205μS延時(shí)子程序并使P1.0交替輸出高、低電平的方波。
/*------------程序名test.c------------*/
#include P 晶振頻率12.000MHz>
/****************/
void delay(void)//延時(shí)205μS
{
#pragma asm
MOV R0,#100
LOOP:
DJNZ R0,LOOP
#pragma endasm
}
/***************/
void main (void)//主函數,其功能使P1.0交替輸出高、低電平的方波
{
while(1)
{P1_0=!P1_0;
delay();}
}
具體實(shí)現過(guò)程為:
1.先用匯編語(yǔ)言編制一段延時(shí)程序,在keil開(kāi)發(fā)環(huán)境中編譯,然后進(jìn)行軟件仿真,晶振頻率的設置應和你的要求相符。仿真時(shí)注意觀(guān)察左邊寄存器窗口內的時(shí)間顯示,調整延時(shí)程序的參數可得到我們需要的精確延時(shí)。
2.用C51編寫(xiě)主程序及延時(shí)子程序的外殼(等待嵌入匯編語(yǔ)言),假定此程序名稱(chēng)為test.c。
3.將第1步所得的匯編延時(shí)子程序放入C51編寫(xiě)的延時(shí)子程序外殼中。注意在開(kāi)始及結束時(shí)分別加上#pragma asm、#pragma endasm語(yǔ)句,這種方法是通過(guò)asm與endasm告訴C51編譯器,中間行不用編譯為匯編行。
4.按照Keil的使用方法,建立工程文件并添加源程序。
5.點(diǎn)擊含有匯編程序的C源程序后再右擊,在彈出的下拉菜單中選中Options for File ‘test.c’(圖1),這時(shí)出現圖2所示的界面,勾選Generate Assembler SRC File(生成匯編SRC文件)及Assembler SRC File(封裝匯編文件)使其有效。
6. 根據項目的編譯模式加載封裝庫文件,通常在Small模式時(shí)為C51S.LIB(該文件在C:KeilC51LibC51S.LIB),具體見(jiàn)圖3。
7.點(diǎn)擊Rebuild target(重建所有目標文件)即可得到編譯結果(圖4)。
圖1
圖2
圖3
圖4
評論