C51語(yǔ)言應用編程的若干問(wèn)題
1 c51語(yǔ)言程序設計的基本技巧
C語(yǔ)言是一種高級程序設計語(yǔ)言,它提供了十分完備的規范化流程控制結構。因此采用C51語(yǔ)言設計單片機應用系統程序時(shí),首先要盡可能地采用結構化的程序設計方法,這樣可使整個(gè)應用系統程序結構清晰,易于調試和維護。對于一個(gè)較大的程序,可將整個(gè)程序按功能分成若干個(gè)模塊,不同的模塊完成不同的功能。對于不同的功能模塊,分別指定相應的入口參數和出口參數,而經(jīng)常使用的一些程序最好編成函數,這樣既不會(huì )引起整個(gè)程序管理的混亂,還可增強可讀性,移植性也好。
在程序設計過(guò)程中,要充分利用C51語(yǔ)言的預處理命令。對于一些常用的常數,如TRUE,FALSE,PI以及各種特殊功能寄存器,或程序中一些重要的依據外界條件可變的常量,可采用宏定義"#define"或集中起來(lái)放在一個(gè)頭文件中進(jìn)行定義,再采用文件包含命令"#include"將其加入到程序中去。這樣當需要修改某個(gè)參量時(shí),只須修改相應的包含文件或宏定義,而不必對使用它們的每個(gè)程序文件都作修改,從而有利于文件的維護和更新?,F舉例說(shuō)明如下:
例1 對于不同的單片機晶振,程序取不同的延時(shí)時(shí)間,而且可根據外界條件的變化修改延時(shí)時(shí)間的長(cháng)短。對于這樣的程序,可利用宏定義和條件編譯來(lái)實(shí)現。程序如下:
#define flag 1
#ifdef flag==1
#define fosc 6M
delay=10;
#elif flag = = 0
#define fosc 8M
delay=12;
#else
#define fosc 12M
delay=20;
#endif
main()
{
for(I=0;Idelay;I++);
}
這樣源程序不作任何修改就可適用于不同時(shí)鐘頻率的單片機系統,并可根據情況的不同取不同的delay值,完成不同的目的。
2 C51語(yǔ)言與匯編語(yǔ)言程序的混合編程
C51編譯器能對C語(yǔ)言源程序進(jìn)行高效率的編譯,生成高效簡(jiǎn)潔的代碼,在絕大多數場(chǎng)合采用C語(yǔ)言編程即可完成預期的目的。但有時(shí)為了編程直觀(guān)或某些特殊地址的處理,還須采用一定的匯編語(yǔ)言編程。而在另一些場(chǎng)合,出于某種目的,匯編語(yǔ)言也可調用C語(yǔ)言。在這種混合編程中,關(guān)鍵是參數的傳遞和函數的返回值。它們必須有完整的約定,否則數據的交換就可能出錯。下面就以力源公司的10位串行A/D轉換器TLC1549 為例說(shuō)明C語(yǔ)言程序與匯編語(yǔ)言程序的調用。
評論