新聞中心

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

        單片機程序的一些習慣

        作者: 時間:2016-11-18 來源:網絡 收藏
        對于一些狀態的集合,盡可能使用enum而不是#define 來定義。

        如:

        enum {OFF = 0, ON = 1};

        遠比
        #define OFF 0

        #define ON 1

        好。

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

        第二,程序中少用

        #if

        #ifdef

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



        好了,下面是我的習慣

        1、I/O口輸出電平定義一下,以后萬一I/O電平驅動取反,一改就好。

        //I/O Port Stutes

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

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

        如93C46:

        #define CS93C46 P1_0 //片選信號

        #define SK93C46 P1_1 //時鐘信號

        #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 //讀寫選擇。 低--w ; 高--r

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



        3、鍵盤口要定義輸入口及屏蔽字

        如:
        #define KEYMASK 0x0f

        #define KEYPORT P2


        4、串口用中斷驅動,要帶Buf。



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



        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、延時程序賦值時寫成FOSC函數,編譯器會預先算,不占用MCU資源
        以后移植方便

        9、液晶程序一定要定義長寬

        如點陣型:
        #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) //第四行地址
        然后所有的和液晶地址有關的計算全部引用這2個量。
        換用任何屏直接一改,高層不變

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

        如:鍵盤、LCD、串口等。


        關鍵詞: 單片機程序習

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 石屏县| 花莲市| 信宜市| 盐亭县| 大渡口区| 卢龙县| 定南县| 南部县| 镇康县| 梁河县| 洛南县| 腾冲县| 博湖县| 泰州市| 桦川县| 宁化县| 土默特右旗| 临夏市| 巴楚县| 奉节县| 扬中市| 托克托县| 大城县| 宝鸡市| 灵宝市| 江源县| 绥阳县| 吉林省| 江油市| 涞水县| 鄂州市| 米脂县| 乌拉特前旗| 佛教| 东港市| 桐庐县| 六安市| 昌邑市| 丰城市| 平潭县| 绥化市|