搜索
bottom↓
回复: 9

keil c编程疑问

[复制链接]

出0入0汤圆

发表于 2012-8-16 20:16:29 | 显示全部楼层 |阅读模式
今天在写数控电压源的程序,专门写了个小程序测试中断执行的时间是否正确,但是遇到很奇怪的问题:
这是源代码,让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声明的位置还有限制???

阿莫论坛20周年了!感谢大家的支持与爱护!!

知道什么是神吗?其实神本来也是人,只不过神做了人做不到的事情 所以才成了神。 (头文字D, 杜汶泽)

出0入0汤圆

发表于 2012-8-16 20:24:31 | 显示全部楼层
百度“bit和sbit区别”

出0入0汤圆

发表于 2012-8-16 20:27:29 | 显示全部楼层
sbit这类定义寄存器的语句不能出现在函数里,只能在函数外声明,你可以打开头文件 来看看

出0入0汤圆

发表于 2012-8-16 20:53:04 | 显示全部楼层
sbit 是位声明,把这个“位”起一个容易识别的名字

出0入0汤圆

发表于 2012-8-17 07:16:08 | 显示全部楼层
>........暂时没看过sbit放函数里面的.............

出0入0汤圆

发表于 2012-8-17 07:43:23 | 显示全部楼层
但我不明白的是...


you don't understand what sbit is.

出0入0汤圆

 楼主| 发表于 2012-8-17 08:24:17 | 显示全部楼层
millwood0 发表于 2012-8-17 07:43
you don't understand what sbit is.

sbit是对特殊功能寄存器的某一位进行声明的。只能放在函数外面吧。

出0入0汤圆

发表于 2012-8-17 08:37:45 | 显示全部楼层
bit是定义一个位变量,它的意义相当于int、char类似,而sbit是位申明,只是将一个寄存器中的某一位换了一个名,它的意义相当于#define类似。

出0入0汤圆

发表于 2012-8-17 08:46:55 来自手机 | 显示全部楼层
sbit没见过有放里面的
位定义好像不能放在函数里面

出0入0汤圆

 楼主| 发表于 2012-8-17 14:59:27 | 显示全部楼层
Lu.Shi 发表于 2012-8-17 08:37
bit是定义一个位变量,它的意义相当于int、char类似,而sbit是位申明,只是将一个寄存器中的某一位换了一个 ...

醍醐灌顶。。。
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片。注意:要连续压缩2次才能满足要求!!】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-7-23 22:11

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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