<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>

新聞中心

EEPW首頁(yè) > 嵌入式系統 > 設計應用 > 單片機程序的一些習慣

單片機程序的一些習慣

作者: 時(shí)間:2016-11-18 來(lái)源:網(wǎng)絡(luò ) 收藏
對于一些狀態(tài)的集合,盡可能使用enum而不是#define 來(lái)定義。

如:

enum {OFF = 0, ON = 1};

遠比
#define OFF 0

#define ON 1

好。

兩種寫(xiě)法編譯的效果是一樣的,但是寫(xiě)程序及看程序的人員來(lái)說(shuō)感覺(jué)就不一樣了。用enum定義時(shí),可以覺(jué)得OFF與ON是一個(gè)集合,有相關(guān)性(且可減少程序中#define的定義)。但用#define定義時(shí),完全可認為OFF與ON不相干。特別是在程序中#define定義過(guò)多時(shí),查找并理解它的意思都是一個(gè)痛苦。(如:uc/os,看見(jiàn)它的一大堆#define都頭大,要完全明白那一堆定義都得花不少時(shí)間)

第二,程序中少用

#if

#ifdef

等條件編譯。不符合條件的程序段是不被編譯的,都不檢查語(yǔ)法錯誤,當在某些情況下打開(kāi)了條件開(kāi)關(guān)時(shí),也許一堆錯誤就出現了。而且程序并不利于閱讀,當讀程序時(shí)突然得去查找某東東是否#define真是痛苦。



好了,下面是我的習慣

1、I/O口輸出電平定義一下,以后萬(wàn)一I/O電平驅動(dòng)取反,一改就好。

//I/O Port Stutes

enum {OFF = 0, ON = 1};
//Led Stutes
enum {LED_ON = 0, LED_OFF = 1};
eg. LED = LED _ON; //低電平驅動(dòng)LED亮。

2、I/O口與任何的其它IC接口,I/O口都要定義,不能直接使用I/O口。(方便以后用于其它的應用中)

如93C46:

#define CS93C46 P1_0 //片選信號

#define SK93C46 P1_1 //時(shí)鐘信號

#define DI93C46 P1_2 //數據輸入,相對93C46而言 (即93C46的數據輸入)

#define DO93C46 P1_3 //數據輸出

如字符型LCD:

#define LCDPORT P0 //lcd數據口

#define RS P1_7 //數據指令選擇。低--ins ; 高--data

#define RW P1_6 //讀寫(xiě)選擇。 低--w ; 高--r

#define EN P1_5 //使能。 高到低--使能。



3、鍵盤(pán)口要定義輸入口及屏蔽字

如:
#define KEYMASK 0x0f

#define KEYPORT P2


4、串口用中斷驅動(dòng),要帶Buf。



5、取按鍵的程序及串口的程序編2個(gè),一個(gè)為非阻塞式,一個(gè)為阻塞式(不按鍵或不收到數據不返回)。



6、晶振頻率要定義
#define FOSC 11059200ul //頻率



7、波特律定義

#define BAUD 4800 //波特率4800

#define SMODX 0 //是否倍頻 0-NO or 1-YES

#define T1H_VAL (256 - (UINT8)(FOSC * (1<
#define T1L_VAL T1H_VAL


8、延時(shí)程序賦值時(shí)寫(xiě)成FOSC函數,編譯器會(huì )預先算,不占用MCU資源
以后移植方便

9、液晶程序一定要定義長(cháng)寬

如點(diǎn)陣型:
#define ROW 64
#define CLUM 128

字符型:

#define ROW 4
#define CLUM 20

#define ROW1_ADDR (0x80 + 0) //第一行地址

#define ROW2_ADDR (ROW1_ADDR + 0x40) //第二行地址

#define ROW3_ADDR (ROW1_ADDR + CLUM) //第三行地址

#define ROW4_ADDR (ROW2_ADDR + CLUM) //第四行地址
然后所有的和液晶地址有關(guān)的計算全部引用這2個(gè)量。
換用任何屏直接一改,高層不變

10、驅動(dòng)層與應用接口層分在不同的文件,移植方便。

如:鍵盤(pán)、LCD、串口等。


關(guān)鍵詞: 單片機程序習

評論


技術(shù)專(zhuān)區

關(guān)閉
国产精品自在自线亚洲|国产精品无圣光一区二区|国产日产欧洲无码视频|久久久一本精品99久久K精品66|欧美人与动牲交片免费播放
<dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><small id="yhprb"></small><dfn id="yhprb"></dfn><small id="yhprb"><delect id="yhprb"></delect></small><small id="yhprb"></small><small id="yhprb"></small> <delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"></dfn><dfn id="yhprb"></dfn><s id="yhprb"><noframes id="yhprb"><small id="yhprb"><dfn id="yhprb"></dfn></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><small id="yhprb"></small><dfn id="yhprb"><delect id="yhprb"></delect></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn> <small id="yhprb"></small><delect id="yhprb"><strike id="yhprb"></strike></delect><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn><dfn id="yhprb"><s id="yhprb"><strike id="yhprb"></strike></s></dfn><dfn id="yhprb"><s id="yhprb"></s></dfn>