您的位置 首页 电源

keil 中怎么调用其他文件的函数

建立一个和这个C文件同名的H文件,把这个C文件中的函数都包含到这个H文件中就ok!例如:有这样一个serial.C文件:/*******************…

树立一个和这个C文件同名的H文件,把这个C文件中的函数都包括到这个H文件中就ok!

例如:有这样一个serial.C文件:

/********************************************************************************
*程序称号: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文件中

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/dianyuan/275780.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部