论坛» 嵌入式开发» MCU

仅仅是调换 两个语句的顺序就出错了 求解析!!!!!!!!!

菜鸟
2014-06-20 14:52 1楼

程序如下:仅仅是调换下面这两句的 就会出错了!不知道什么原因!

int i =300;

Timer0_init();


换为:

Timer0_init();

int i =300;

就会出错!

总体程序:

#include
#include


#define uchar unsigned char
#define uint unsigned int


#define N 3100

sbit CLK=P2^0;
sbit EN=P2^2 ;
sbit KEY_en=P2^3;
sbit LED_en=P2^6;

void Timer0_init(void)
{
TMOD=0x01;
EA=1 ;
ET0=1;
TR0=1;
TH0=(65536-N)/256;
TL0=(655636-N)%256;
}


void Timer0(void) interrupt 1
{
TH0=(65536-N)/256;
TL0=(655636-N)%256;
CLK=~CLK;
}


void main(void)
{
int i =300;
Timer0_init();
EN = 0;
LED_en=1;
while(1)
{
if(KEY_en==0)
{
while(i--);
if(KEY_en==0)
{
EN=!EN;
LED_en=!LED_en;
}
}
}
}

专家
2014-06-20 16:04 2楼
这个可能是编译器的问题,要所有的定义变量在最前端,
高工
2014-06-20 17:10 3楼

一般情况下

要先定义,再调用

高工
2014-06-20 21:05 4楼
先定义,后调用,应该这样

int i =300;

Timer0_init();

菜鸟
2014-06-20 21:11 5楼
应该就是编译环境的问题吧!在C语言和51单片机原理里面也没见提过类似的问题!谢谢了
菜鸟
2014-06-20 21:14 6楼
是调用在定义后面的!中断初始化里面没有 用到 i 这个变量 是后面的延时用到的
菜鸟
2014-06-20 21:16 7楼
变量 i 没有在Timer0_init() 调用哦 应该和1楼说的一样 是编译器的问题!
菜鸟
2014-06-20 21:16 8楼
变量 i 没有在Timer0_init() 调用哦 应该和1楼说的一样 是编译器的问题!
高工
2014-06-20 21:25 9楼
编译器的什么问题?
菜鸟
2014-06-20 21:32 10楼
编译器默认所有变量定义在main函数里的最前端。而不是只要在变量引用前定义就可以了。
共14条 1/2 1 2 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册]