OpenEdv-开源电子网

 找回密码
 立即注册

扫一扫,访问微社区

正点原子新作:阿波罗STM32F767&F429&探索者STM32F4开发板&赶快来下载资料哦。

查看: 169|回复: 7

请问为什么另一个c文件中定义的全局变量在main.c中调用不了?

[复制链接]

  离线 

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-7-19
在线时间
14 小时
发表于 2017-11-2 22:03:54 | 显示全部楼层 |阅读模式
20金钱
我最近在做小车,用定时器调制PWM脉冲控制速度,控制占空比的变量在motor.c中有定义,我主函数中想去改变这个变量的值来改变占空比控制电机的速度
下面这种写法是可以的
1.PNG 2.PNG 3.PNG 4.PNG


但是这种这一种写法就不行,在主程序里面只要给ZKB赋值ZKB就一直保持为0
11.PNG 22.PNG 44.PNG

请问为什么在main函数中调用其它c文件中定义的变量就会出错呢?
[C] 纯文本查看 复制代码
#include "Motor.h"

//extern ZKB;

void main(void)
{
	MotorInit();
	
	while(1)
	{
		PWM_change();
	}
}

#ifndef	__MOTOR_H_
#define	__MOTOR_H_

#include <reg52.h>

#define uchar	unsigned char 

//#define		GoForward	{ Left_Ctrl = 1; Right_Ctrl = 1; Left_IN1 = 1;	Left_IN2 = 0; Right_IN1 = 1; Right_IN2 = 0;}
//#define		Stop		{ Left_Ctrl = 0; Right_Ctrl = 0; }
//#define		TurnLeft	{ Left_Ctrl = 1; Right_Ctrl = 1; Left_IN1 = 0;	Left_IN2 = 1; Right_IN1 = 1; Right_IN2 = 0;	}
//#define		TurnRight	{ Left_Ctrl = 1; Right_Ctrl = 1; Left_IN1 = 1;	Left_IN2 = 0; Right_IN1 = 0; Right_IN2 = 1;	}

#define		GoForward	P2  = 0XAF
#define		Stop		P2 &= 0XF3
#define		TurnLeft	P2  = 0X9F
#define		TurnRight	P2  = 0X6F

sbit	Left_IN1  = P2^7;
sbit	Left_IN2  = P2^6;
sbit	Left_Ctrl = P2^3;

sbit	Right_IN1 = P2^5;
sbit	Right_IN2 = P2^4;
sbit	Right_Ctrl= P2^2; 

void	MotorInit(void);
void    PWM_change(void);

#endif


#include "Motor.h"
#include "delay.h"
uchar	counter;
uchar	ZKB;
uchar	ZKB_UpperLimit;

void    PWM_change(void)
{
	uchar i;
	for(i=0;i<200;i++)
	{
		ZKB=i;
		delayms(2);
	}
	for(i=200;i>0;i--)
	{
		ZKB=i;
		delayms(2);
	}
}

void	MotorInit(void)
{
//PWM为500Hz,单周期2MS,设置20级调速,每次中断函数处理时间为100个单指令周期
	
	EA = 1;
	ET0 = 1;
	
	TMOD = 0x02;			//定时器0自动重载
	TH0 = 0x9C;
	TL0 = 0x9C;
	TR0 = 1;
	
	counter = 0;
	ZKB_UpperLimit = 200;
	
	ZKB = 0.5 * ZKB_UpperLimit;
}

void	Motor_INT()	interrupt	1
{
	counter++;
	if (counter <= ZKB)
	{
		GoForward;
	}
	
	if (counter > ZKB)
	{
		Stop;
	}
	
	if (counter >= ZKB_UpperLimit)
	{
		counter = 0;
	}
}

最佳答案

查看完整内容[请看2#楼]

A.c文件 A.h文件 main.c文件
回复

使用道具 举报

  在线 

21

主题

497

帖子

1

精华

金牌会员

Rank: 6Rank: 6

积分
2081
金钱
2081
注册时间
2014-8-13
在线时间
364 小时
发表于 2017-11-2 22:03:55 | 显示全部楼层
本帖最后由 mack13013 于 2017-11-3 00:20 编辑

A.c文件
[C] 纯文本查看 复制代码
//A.c 
#include A.h
int nTmp = 0;


A.h文件
[C] 纯文本查看 复制代码
//A.h
extern int nTmp;


main.c文件
[AppleScript] 纯文本查看 复制代码
//main.c
#include A.h
//这里可以用nTmp了


回复

使用道具 举报

  离线 

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-7-19
在线时间
14 小时
 楼主| 发表于 2017-11-2 22:07:50 | 显示全部楼层
不知道我描述清楚没
回复

使用道具 举报

  离线 

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-7-19
在线时间
14 小时
 楼主| 发表于 2017-11-2 22:08:03 | 显示全部楼层
@正点原子 求助原子哥
回复

使用道具 举报

  离线 

1

主题

5

帖子

0

精华

新手上路

Rank: 1

积分
48
金钱
48
注册时间
2016-5-20
在线时间
12 小时
发表于 2017-11-2 22:46:20 | 显示全部楼层
extern 数据类型 变量名,会不会因为在main.c声明时没有加数据类型,
回复

使用道具 举报

  离线 

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-7-19
在线时间
14 小时
 楼主| 发表于 2017-11-3 13:19:18 | 显示全部楼层

谢谢。。。。
回复

使用道具 举报

  离线 

11

主题

34

帖子

0

精华

初级会员

Rank: 2

积分
78
金钱
78
注册时间
2017-7-19
在线时间
14 小时
 楼主| 发表于 2017-11-3 13:19:37 | 显示全部楼层
justin2 发表于 2017-11-2 22:46
extern 数据类型 变量名,会不会因为在main.c声明时没有加数据类型,

好的,谢谢。
回复

使用道具 举报

  离线 

27

主题

164

帖子

0

精华

高级会员

Rank: 4

积分
572
金钱
572
注册时间
2016-6-10
在线时间
130 小时
发表于 2017-11-8 21:24:58 | 显示全部楼层
没加数据类型啊,其他没毛病
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则




QQ|联系我们|手机版|官方淘宝店|新浪微博|微信公众平台|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2017-11-20 21:48

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表
/* */