新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 淺談單片機c語言模塊化編程-附ds1302時鐘芯片驅動程序

        淺談單片機c語言模塊化編程-附ds1302時鐘芯片驅動程序

        作者: 時間:2016-11-20 來源:網絡 收藏
        單片機c語言編程中,模塊化編程顯得非常重要。我覺得,模塊化恰恰體現了c語言很好的可移植性。嵌入式編程中,硬件模塊區分非常明顯,所以驅動程序用模塊化編程顯得十分方便簡潔。
        報錯原因,修改了不能修改的變量。

        本文引用地址:http://www.104case.com/article/201611/318723.htm

        C51中為了節省ram資源,數組用code定義在rom中,這樣定義數組就不能重新賦值。

        自己對著例程一條一條的看。真心表示沒有發現錯誤。最后把函數一個一個替換成例程中的。最終確定在ds1302_write_byte中。發現了一個很奇特的事情。錯誤是因為fou循環,我用for(i=0;i<8;i++)替換成為for(i=8;i>0;i--)解決了問題。

        extern可以置于變量或者函數前,以表示變量或者函數的定義在別的文件中,提示編譯器遇到此變量和函數時在其他模塊中尋找其定義。另外,extern也可用來進行鏈接指定。

        使用模塊化編程的時候,在.h里聲明了數組。.c文件直接使用數組,在連接時會出現錯誤multiple public definition。

        在.h文件用extren聲明數組,在.c文件聲明賦值。錯誤解決。

        附ds1302時鐘芯片驅動程序

        void ds1302_write_byte(unsigned char d)
        {

        unsigned char i;
        ACC=d;
        for(i=0;i<8;i++)//改成i=0;i<8;沒有現象。。為嘛呀。。。
        {
        io=ACC0;
        //delayus(1);
        sck=1;
        //delayus(1);
        sck=0;
        ACC=ACC>>1;
        }
        }

        void ds1302_write(uchar ad,uchar dat)
        {
        rst=0;
        sck=0;
        rst=1;
        //delayus(1);
        ds1302_write_byte(ad);
        ds1302_write_byte(dat);
        sck=1;
        rst=0;
        }
        unsigned char ds1302_read_byte()
        {

        unsigned char i;
        for(i=0;i<8;i++)
        {
        ACC=ACC>>1;
        ACC7 =io;
        sck=1;
        //delayus(1);
        sck=0;
        //delayus(1);
        }
        return (ACC);

        }
        unsigned char ds1302_read(unsigned char add)
        {
        unsigned char ucdat;
        rst=0;
        sck=0;
        rst=1;
        //delayus(1);
        ds1302_write_byte(add);
        ucdat=ds1302_read_byte();
        sck=1;
        rst=0;
        return ucdat;
        }


        void ds1302_init()
        {

        ds1302_write(0x8E,0x00);

        }




        評論


        技術專區

        關閉
        主站蜘蛛池模板: 霞浦县| 婺源县| 电白县| 临江市| 康保县| 钟祥市| 清新县| 松潘县| 页游| 阳原县| 柳河县| 汾西县| 虹口区| 高邑县| 乌什县| 贡觉县| 沅陵县| 武穴市| 界首市| 武川县| 广汉市| 庆元县| 镇远县| 龙江县| 元阳县| 桐乡市| 横山县| 阿城市| 肃北| 岱山县| 四川省| 门头沟区| 什邡市| 平凉市| 苍山县| 宣恩县| 宁津县| 福清市| 阿拉善右旗| 曲松县| 八宿县|