static在51单片机static中几种用法

单片机之静态局部变量static
14:16:55来源: eefocus 关键字:&&&&
上程序:main.c#include #include "Timer.h"/********P1口低有效******************/void main(void){init();//中断初始化while(1){}}&Timer.h&#ifndef _TIMER_H_#define _TIMER_H_&extern void init(void);#endif&Timer.c&#include &int k=0;//占空比unsigned int count=0;//计数unsigned int BOOL=0;//由暗到亮,BOOL=1,由亮到暗&#define max 99#define min 0&#define led_state P1&void init(void){TMOD=1; //定时器0,工作方式1TH0=0 //装入初值200usTL0=0x47;TR0=1; //开始定时ET0=1;EA=1;//CPU开放中断}&void inter(void) interrupt 1{ int temp_k=0;/*如果定义成局部变量,则必须定义成,静态局部变量是在编译时赋初值的,只赋初值一次,以后每次调用函数时不再重新赋初值而只是保留上次函数调用结束时的值。*/TH0=0TL0=0x47;&if(++count>=100) //0-99次不成立,共100次{count=0;if((k<=max)&&(0==BOOL)){k++;if(k>max){BOOL=1;k=} }&if((k>=min)&&(1==BOOL)){k--;if(k<min){BOOL=0;k=} }&temp_k=k;}&if(temp_k>0){led_state=0x00;temp_k--;}elseled_state=0} &&&&备注:C程序设计教程 谭浩强 P171-174仔细看看关于静态局部变量几点注意:1.静态局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值;2.静态局部变量属于静态存储类别,在静态存储区内分配存储单元。在程序整个运行期间都不释放。而自动变量(即动态局部变量)属于动态存储类别,占动态存储区空间而不占静态存储区空间,函数调用结束后即释放;3.对静态局部变量是在编译时赋初值的,即只赋初值一次。自动变量赋初值是在函数调用时进行,每调用一次函数,重新给次初值;4.如果定义局部变量时不赋初值的话,则对静态局部变量编译时自动赋初值0(对数值型变量)或空字符(对字符型变量),而自动变量如不赋初值,则它的值是不确定的;5.静态局部变量在函数调用结束后仍然存在,但是其它的函数不能引用它。因为他是局部变量,只能被本函数引用;6.三种局部变量存储位置不一样:自动变量存储在动态存储区,静态局部变量存储在静态存储区,寄存器变量存储在CPU的寄存器中。&需要用到静态局部变量的情况:1.需要保留函数上一次调用结束时的值;2.如果初始化后,变量只被引用而不改变其值,则这时用静态局部变量比较方便,以免每次调用时重新赋值。&&三种局部变量:auto变量static局部变量register变量
关键字:&&&&
编辑:什么鱼
引用地址:
本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。
微信扫一扫加关注 论坛活动 E手掌握
微信扫一扫加关注
芯片资讯 锐利解读
热门关键词
大学堂最新课程
汇总了TI汽车信息娱乐系统方案、优质音频解决方案、汽车娱乐系统和仪表盘参考设计相关的文档、视频等资源
热门资源推荐
频道白皮书
何立民专栏
北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。51单片机中bit类型默认值是多少_百度知道
51单片机中bit类型默认值是多少
void EX0_ISR (void) interrupt 0 &#47;&#47;外部中断0服务函数{
&#47;&#47;接收红外信号处理
&#47;&#47;是否开始处理标志位if(startflag)
if(irtime&63&&irtime&=33)&#47;&#47;引导码 TC9012的头码,9ms+4.5ms
irdata[i]=&#47;&#47;存储每个电平的持续时间,用于以后判断是0还是1
startflag=1;
我有更好的答案
BIT只是定义一个标志位,可以用到逻辑判断。在RAM中的可位寻址空间中,一般用作程序判断的标志位。没有默认值这一种说法的,或者理解为状态不确定,必须要对它所定义的变量初始化。
采纳率:68%
查找单片机复位(reset)部分相关资料,会告诉你单片机复位之后每个引脚还有寄存器的值
一般默认为0
那这个函数中if语句是怎么判断的?(函数已经补充~)
if(startflag)
就是if(startflag==1)
为您推荐:
其他类似问题
51单片机的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。【图文】第5章 51单片机实现数字电路_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
第5章 51单片机实现数字电路
阅读已结束,下载本文到电脑
想免费下载本文?
登录百度文库,专享文档复制特权,积分每天免费拿!
你可能喜欢51单片机C语言变量定义_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
享专业文档下载特权
&赠共享文档下载特权
&10W篇文档免费专享
&每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
51单片机C语言变量定义
&&本文详细的介绍了51单片机用C语言编程时定义的变量,不同的定义方法所访问的存储地址是不样的。
阅读已结束,下载本文需要
想免费下载本文?
定制HR最喜欢的简历
你可能喜欢static变量与static的用法
1static修饰局部变量
C函数中变量分为局部变量与全局变量;全局变量是在函数外申请的变量,其存储在全局数据区,其生命周期是整个程序运行的周期,局部变量是在函数中申请的变量 通常情况下存储区域是堆栈,变量是在进入函数时在堆栈中申请的,函数退出后变量将会被释放,其生命周期是函数运行的时间,再次进入函数时必须重新申请,重新初始化。使用static修饰局部变量后局部局部变量将变为局部静态变量,存储区域变成全局静态数据区,生命周期是整个程序的运行周期,局部静态变量在第一次进入函数时初始化,函数推出时其不会被释放,但是其作用域仍然是函数区域,退出函数后将不能使用该变量,再次进入函数后可以继续使用该静态局部变量,且其会继续保留之前的值。
2 static修饰全局变量
全局变量本来的存储区域就是全局数据区,其生命周期是整个程序运行的周期,使用static修饰后变成静态全局变量,但是并不影响其存储区域与生命周期,但是全局变量与静态全局变量的作用于是不一样的,全局变量可以在同一个源程序的其他文件中访问,但是使用static修饰后的静态全局变量不能在其他文件中访问,只能在当前文件访问。
3 static修饰函数
与修饰全局变量类似,没有使用static修饰的函数,可以在同一源程序的其他文件中访问,但是使用static修饰后函数,称之为静态函数,将不能在其他文件中访问,只能在当前文件访问。
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!}

我要回帖

更多关于 单片机static 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信