📄 c51编程经验三则.txt
字号:
主题:C51编程经验三则 (转载) [龙啸九天] [429次] 2000-11-15 21:27:31
主题:C51编程经验三则
---------------------------------------------------------------------------
在单片机的开发应用中,已逐渐开始引入高级语言,C语言就是其中的一种。用惯
了汇编的人,总觉得高级语言“可控性”不好,不如汇编那样随心所欲。以下是笔者
在C51编程中的几点经验,希望对初学C51者有所帮助。
一、C51热启动代码的编制
工业控制计算机,往往设有看门狗电路,看门狗动作,计算机复位,这就是热启
动。热启动时,一般不允许程序从头开始,因为这将使测量或计算值复位,导致系统
工作异常。故程序必须判断是热启动还是冷启动。常用的方法是:设定某内存单位为
标志位(如0x7f位和0x7e位),启动时首先读该内存单元的内容,如果它等于一个特定
的值(例如两个内存单元的都是0xaa),就认为是热启动,否则就是冷启动,程序执行
初始化部分,并将0xaa赋予这两个内存单元。
根据以上的设计思路,编程时,设置一个指针,指向特定的内存单元如0x7f,然
后在程序中根据特定内存单元的值判断冷/热启动,程序如下:
void main()
{ char data*HotPoint=(char*)0x7f;
if((*HotPoint==0xaa)&&(*(--Hot
Point)==0xaa))
{ /*热启动的处理 */
}
else
{ HotPoint=0x7e; /*冷启动的处理
*HotPoint-0xaa;
*(++HotPoint)=0xaa;
}
/*正常工作代码*/
}
实际调试中发现,无论是热启动还是冷启动,开机后所有内存单元的值都被复位
为0,实现不了热启动的要求。这是为什么呢?原来,用C语言编程时,开机时执行的代
码并非是从main()函数的第一语句开始的,在main()函数的第一语句执行前要先执行
一段‘起始代码’。正是这段代码执行了内存清零的工作。C编译程序提供了这段起始
代码的源程序,名为CSTARTUP
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -