新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > keil 中如何調用其他文件的函數

        keil 中如何調用其他文件的函數

        作者: 時間:2016-11-10 來源:網絡 收藏
        建立一個和這個C文件同名的H文件,把這個C文件中的函數都包含到這個H文件中就ok!

        例如:有這樣一個serial.C文件:

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

        /********************************************************************************
        *程序名稱:serial.c
        *程序描述:單片機串口通信,所用單片機為Philiph的P89C52*2
        *編 制:LZS
        *備 注:編譯器keil C51 V7.06;時間2008.2.11;版本V1.0
        * 定時計數器T1作為波特率發生器
        * 波特率為4800;接收采用中斷方式;發送采用查詢方式
        *********************************************************************************/
        #include "reg51.h"

        /**********************************************************************
        *函數名稱:void Init_SerialComm(void)
        *函數描述:串口初始化
        *入口參數:無
        *出口參數:無
        *備 注:
        ***********************************************************************/
        void Init_SerialComm(void)
        {
        TMOD=0x20; //定時計數器T1工作在方式2,8bit自動重裝
        TH1=0xEB;
        TL1=0xEB; //波特率為1200;晶振頻率為9.6MHZ
        SCON=0x50; //串口工作在方式1
        PCON=0x80;
        EA=1;
        ES=1;
        TR1=1;
        }


        /*****************************************************************************
        *函數名稱:void UartSendChar(unsigned char ch)
        *函數描述:向串口發送一個字節的數據
        *入口參數: unsigned char ch
        *出口參數:無
        *備 注:無
        ******************************************************************************/
        void UartSendChar(unsigned char ch)
        {
        SBUF=ch;
        while(TI==0);
        TI=0;
        }


        /*********************************************************************************
        *函數名稱:void UartSendString(unsigned int *p,unsigned int string)
        *函數描述:向串口發送strlong個字節的數據
        *入口參數:unsigned int *p 指向發送數據的指針,unsigned int strlong發送數據的字節數
        *出口參數:無
        *備 注:無
        **********************************************************************************/
        void UartSendString(unsigned char *p,unsigned int strlong)
        {
        unsigned char tmp=0;
        for(tmp=0;tmp{
        UartSendChar(*(p+tmp));
        }

        }

        /*************************************************************************
        4.bcc異或校驗法(block check character)
        實現方法:很多基于串口的通訊都用這種既簡單又相當準確的方法。
        它就是把所有數據都和一個指定的初始值(通常是0)異或一次,最
        后的結果就是校驗值,通常把她附在通訊數據的最后一起發送出去。
        接收方收到數據后自己也計算一次異或和校驗值,如果和收到的校驗
        值一致就說明收到的數據是完整的。校驗值計算的代碼類似于:
        unsigned uCRC=0;//校驗初始值
        for(int i=0;i

        適用范圍:適用于大多數要求不高的數據通訊。

        應用例子:ic卡接口通訊、很多單片機系統的串口通訊都使用。
        ********************************************************************************/

        它對應的頭文件如下:

        #ifndef __serial_H__
        #define __serial_H__

        void Init_SerialComm(void);
        void UartSendChar(unsigned char ch);
        void UartSendString(unsigned char *p,unsigned int strlong);
        //static void UartIntrruptService(void);

        #endif

        這樣就可以用#include來包含調用這個C文件中的函數了哦!呵呵!for example:

        #include "serial.h"
        #include "reg52.h"
        #define uchar unsigned char
        #define uint unsigned int
        #define InBufferLong 20
        uchar counter;
        uchar trdata[InBufferLong];
        uchar checksum;
        uint i;
        bit Read_Flag=0;

        /***************************************************************************************
        *函數名稱:int main(void)
        *函數描述:主函數
        *入口參數:無
        *出口參數:無
        *備 注:無
        *****************************************************************************************/

        int main(void)
        {


        Init_SerialComm();
        while(1)
        {

        if(Read_Flag==1)
        {
        UartSendString(trdata,InBufferLong);
        Read_Flag=0;
        }
        }
        }

        /****************************************************************************************
        *函數名稱:void UartIntrruptService(void)
        *函數描述:串口中斷服務函數
        *入口參數:無
        *出口參數:無
        *備 注:無
        *******************************************************************************************/

        static void UartIntrruptService(void) interrupt 4 using 3
        {

        if(RI)
        {
        RI=0;
        i=SBUF;
        if(i>127)//當接收到的數值大于127時
        {
        counter=0;
        trdata[counter]=i;//把接收到的數值保存在trdata[0]
        checksum=i-128; //和校驗等于接收到的數值-128
        }
        else
        {
        counter++;
        trdata[counter]=i;
        checksum^=i;
        if((counter==(InBufferLong-1))&&(1)) //接收滿并且checksum=0時
        {
        Read_Flag=1;
        counter=0;
        }
        }
        }


        }
        在這應注意:1.被調用的C文件中只包含頭文件即可,每個函數都使用局部變量

        2.所有的全局變量都在主C文件中定義

        3.中斷要放到主C文件中



        關鍵詞: keil調

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 五华县| 沧州市| 平泉县| 喜德县| 新巴尔虎左旗| 晋江市| 贞丰县| 通辽市| 罗源县| 汝州市| 晋宁县| 大厂| 榆中县| 阿拉善左旗| 元谋县| 当雄县| 沙雅县| 桂林市| 紫金县| 广灵县| 共和县| 万年县| 淳安县| 同心县| 云浮市| 高尔夫| 韶关市| 博乐市| 确山县| 石屏县| 常山县| 瓮安县| 西城区| 湖口县| 兴山县| 丹棱县| 隆子县| 安宁市| 红河县| 绥阳县| 丹凤县|