<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è) > 嵌入式系統 > 設計應用 > keil 中如何調用其他文件的函數

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

作者: 時(shí)間:2016-11-10 來(lái)源:網(wǎng)絡(luò ) 收藏
建立一個(gè)和這個(gè)C文件同名的H文件,把這個(gè)C文件中的函數都包含到這個(gè)H文件中就ok!

例如:有這樣一個(gè)serial.C文件:

本文引用地址:http://dyxdggzs.com/article/201611/317300.htm

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

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


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


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

}

/*************************************************************************
4.bcc異或校驗法(block check character)
實(shí)現方法:很多基于串口的通訊都用這種既簡(jiǎn)單又相當準確的方法。
它就是把所有數據都和一個(gè)指定的初始值(通常是0)異或一次,最
后的結果就是校驗值,通常把她附在通訊數據的最后一起發(fā)送出去。
接收方收到數據后自己也計算一次異或和校驗值,如果和收到的校驗
值一致就說(shuō)明收到的數據是完整的。校驗值計算的代碼類(lèi)似于:
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來(lái)包含調用這個(gè)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;

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

int main(void)
{


Init_SerialComm();
while(1)
{

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

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

static void UartIntrruptService(void) interrupt 4 using 3
{

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


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

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

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



關(guān)鍵詞: keil調

評論


技術(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>