c语言如何调用外部文件的函数调用,keil 中如何调用其他文件的函数
建立一个和这个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文件中
c语言如何调用外部文件的函数调用,keil 中如何调用其他文件的函数相关推荐
- win7搜索文件怎么搜索文件名中带圆括号的文件?
win7搜索文件怎么搜索文件名中带圆括号的文件? System.FileName:~="(" 这样就行. 括号上加个引号 ~= 是包含的意思, ~< 是以什么为开头, = 是 ...
- R语言如何从外部读取数据到R中
R语言可以从键盘,文本,excel,access,数据库,专业处理软件sas 一.使用键盘的输入 mydata<-data.frame(age=numeric(0),gender=charact ...
- vbs文件放在java工程中如何调用_Eclipse软件导入Java工程文件的操作方法。
Eclipse软件怎么导入Java工程文件?有些在学习Java编程的用户虽然会创建工程,但是对于怎么导入工程文件却不清楚,下面教大家如何在Eclipse软件中导入Java工程文件. 解决方法: 1.在 ...
- pythonstaticmethod调用外部变量_在Python中,是否可以从staticmethod引用实例变量?
我知道以前有人问过这个问题,但我发现自己碰到了一个最适合使用staticmethod的情况,但也需要在这个类中引用一个实例变量.例如,假设我有以下类:class ExampleClass(object ...
- java 怎么调用js代码_在Java中直接调用js代码
JDK1.6版添加了新的ScriptEngine类,允许用户直接执行js代码. 在Java中直接调用js代码 不能调用浏览器中定义的js函数,会抛出异常提示ReferenceError: " ...
- ipython下怎么运行py文件_在IPython中执行Python程序文件的示例
简单使用了一下之后,我觉得如果有机会(公司里面编码是极不自由的,也无所谓,我在公司不做数据分析),我肯定是更喜欢使用IPython作为我的Python shell环境了.简单的接触发现了不少我喜欢的功 ...
- html中异步上传文件实现示例,HTML_html中异步上传文件实现示例,复制代码代码如下: form actio - phpStudy...
html中异步上传文件实现示例 复制代码代码如下: 复制代码代码如下: 这是html中最常见最简单的表单提交方式,但是这种方式必须会切换页面,也许有些时候我们希望可以在同一个页面与服务器进行交互,并不 ...
- python 复制替换文件_在Python中复制和替换文件
python 复制替换文件 The python language provides a built-in module "shutil", which offers numero ...
- MDK keil中如何调用malloc函数
默认调用malloc函数出错现象 这是因为我们没声明下C的标准库 解决如下 (1)使用的代码文件中需要包含头文件 <stdlib.h> (2)在工程的属性设置中需要把 Use MicroL ...
最新文章
- python和sass区别_CSS 的预处理程序(Sass、LESS、Stylus 等)分别都有哪些优缺点?...
- 【jetson nano】 aarch64安装pycharm pytorch cuda
- OpenRTSP的使用
- 自定义组件--创建mxml组件
- Ballast,一种精准控制 Go GC 提高性能的方法
- 软件测试基础知识整理(详细版)
- Conficker.AE病毒局域网扫描工具
- 家庭购药新指南:2020-2021年中国家庭常备药上榜品牌榜单公布
- 解决:Intellij idea导入MyEclipse Web项目时,服务器搭建运行正常,但无法访问WebRoot下的页面
- 0基础可不可以学大数据
- cascading基本概念
- CyberCat赛博猫,进阶版AXIE
- VC2010 中 MFC 的改进导致 XTP 停靠窗体无法显示的解决方法
- 查看思科交换机出厂时间
- scratch 有趣的加减法
- 电子学会2020年9月青少年软件编程(图形化)等级考试试卷(一级)答案解析
- 【Python】未知来源的Python 2020期末考试试题,大家可以来答题学习了
- 【Flutter】Dart 数据类型 List 集合类型 ( 定义集合 | 初始化 | 泛型用法 | 初始化后添加元素 | 集合生成函数 | 集合遍历 )
- 二本大一新生拒绝摆烂,2个月后的觉醒
- centos7:麒麟开源堡垒机的搭建部署
热门文章
- 谷歌紧急更新,Chrome 今年第二个零日漏洞曝光
- 韩国成功研发变色龙软体机器人;曝新iPhone将推出摄影版“人像模式”;Android 12 Beta 4发布|极客头条...
- 超过 1 亿 Android 用户的数据遭泄露!
- 把斯坦福大学土地租出去?特曼坦言:目的就是赚钱
- WebAssembly 将成为互联网的终结?
- 中国自主可免费使用的一站式 IoT 集成开发环境 RT-Thread Studio 发布!
- 英特尔发布边缘软件中心,抢滩 650 亿美元智能边缘市场!
- 手把手带你深入解析静态分派 动态分派原理 | 原力计划
- 结束 Java、Python 之战,如何学习所有编程语言?
- 想从远程办公进入 toB 蓝海?它可以,你未必