keil c编程疑问
今天在写数控电压源的程序,专门写了个小程序测试中断执行的时间是否正确,但是遇到很奇怪的问题:这是源代码,让P1^0处的led以接近一秒的速度闪烁。
//测试程序
# include<reg52.h>
# include<intrins.h>
unsigned char num = 0;
sbit led = P1^0;
/**********************************
函数名:定时器0初始化函数
参数值:
返回值:
备注: 定时10ms
**********************************/
void Init_timer_0(void)
{
TMOD = 0X01;//工作方式1 十六位定时器
TH0 = (65536 -9000)/256; //装初值12MHZ 定时10ms
TL0 = (65536 -9000)%256;
EA = 1; //打开全局中断
ET0 = 1;//打开定时器0中断
TR0 = 1;//打开定时器0
}
/**********************************
函数名:定时器0中断服务程序
参数值:
返回值:
备注: 晶振12MHZ
**********************************/
void Timer_0()interrupt 1
{
TH0 = (65536 -9000)/256; //装初值12MHZ 定时10ms
TL0 = (65536 -9000)%256;
num++;
}
void main(void)
{
Init_timer_0();
while(1)
{
if(num == 100)
{
led = ~led;//状态取反
num = 0;
}
}
}
这个程序能顺利的编译也能让灯闪烁的,但我不明白的是,为什么程序的第四行(sbit。。。)删掉并且放在主函数的第一行编译器就报错呢?难道在keil中sbit声明的位置还有限制??? 百度“bit和sbit区别” sbit这类定义寄存器的语句不能出现在函数里,只能在函数外声明,你可以打开头文件 来看看 sbit 是位声明,把这个“位”起一个容易识别的名字 {:3_57:}>........暂时没看过sbit放函数里面的............. 但我不明白的是...
you don't understand what sbit is.
millwood0 发表于 2012-8-17 07:43 static/image/common/back.gif
you don't understand what sbit is.
sbit是对特殊功能寄存器的某一位进行声明的。只能放在函数外面吧。 bit是定义一个位变量,它的意义相当于int、char类似,而sbit是位申明,只是将一个寄存器中的某一位换了一个名,它的意义相当于#define类似。 sbit没见过有放里面的
位定义好像不能放在函数里面
关于51中浮点数的疑问
Lu.Shi 发表于 2012-8-17 08:37 static/image/common/back.gifbit是定义一个位变量,它的意义相当于int、char类似,而sbit是位申明,只是将一个寄存器中的某一位换了一个 ...
醍醐灌顶。。。{:smile:}
页:
[1]