在给一些单片机初学者解答问题的时候,我发现了一个现象,可能是因为受到电脑上学习C程序设计的影响,很多人会写出类似这样的程序:
[cpp] view plain copy#include
void main()
{
P1=0x00;
}
或者是这样的程序
[cpp] view plain copy#include
int main()
{
P1=0xab;
return 0;
}
如果是在电脑上运行类似这样的程序,程序执行结束,控制权交给系统,有返回值的返回给系统,是完全可行的,但是在单片机上就不一样了,对于不依靠操作系统的单片机程序,main函数就是操作系统,应该是不能终止运行的,而应该是一个while(1)死循环。
没有加while(1)的程序执行结束会出现不可预知的结果(具体要根据汇编语言PC指针指向的位置判断),也就是程序跑飞。
虽然实际上用的时候STC单片机会循环执行程序(执行结束单片机复位,所有变量重置),但这个在芯片手册中并没有给出官方说明,所以并不一定总能如此。
单片机程序执行终止,这样就会大大降低可靠性。试想你的单片机在控制一台大型机器,如果发生不可预知的结果,后果很严重;如果你的手表是单片机,程序停止运行会怎样?就停止显示了;如果电脑的操作系统运行终止(关机除外),也会出现问题。
所以单片机的程序必然是一个死循环,一般都会有while(1),另外不需要有返回值,形如下面两种情况。
[cpp] view plain copy#include
void main()
{
P1=0x00;
while(1);
}
[cpp] view plain copy#include
void main()
{
while(1) {
P1=0x00;
}
}
关键字:单片机 编程 主函数
引用地址:
单片机编程初学者之主函数的特点
推荐阅读最新更新时间:2024-03-16 16:17
基于单片机的LED路灯模拟控制系统的设计与实现
0 引言 LED照明系统具有省电、轻巧、寿命长、高耐久性等特征,近年来已经越来越多地应用于路灯照明系统中,其趋势是取代目前广泛采用的高压汞灯的路灯照明。 针对目前比较先进的LED路灯控制系统进行了模拟路灯控制系统设计,实现了整条支路的LED路灯定时控制开关灯、自动开关灯、独立控制开关灯及故障报警等多项功能。对1 W LED路灯单元可调恒流驱动电源,可以按照设定要求调节LED输出功率大小,实现调光功能。 1 系统硬件设计 1.1 系统总体设计 为了能够真实地模拟实际LED路灯的控制,设计了模拟路灯控制系统。控制系统结构如图1所示,该系统主要由输入显示装置、支路控制器和2个单元控制器模块组成。支路控制器主要用来对整个模拟
[单片机]
单片机嵌入式系统在远程电网监测系统中的应用
摘要:介绍应用UBICOM公司的SX52BD单片机构建用于远程电网监测的嵌入式系统的具体方案,使基于单片机的测控设备可以方便地连接到以太网,实行电网参数的远程网络监控。
关键词:电网监测 嵌入式系统
为了保证电网的安全运行,了解电网运行状况,需要对电网的各种运行参数(如三相电压、电流、有功功率、无功功率等)进行实时监测。嵌入式远程电网监测系统将现代计算机、通信、网络及自动化技术融为一体,对配电网进行远程监测、协调和控制,从而优化配电网络。利用以太网的丰富资源及UBICOM公司高速单片机SX52BD构建分布式以太网嵌入测控系统是一种低成本、高可靠且快捷的技术方案。
1 系统结构
系统结构如图1所示。监控中心工作人员可通过以太
[传感技术]
AT89S51单片机实验系统的开发与应用
目前单片机应用已渗透到各个领域,单片机技术的发展也因此日新月异。作为实践性很强的应用型学科,单片机研发及教学离不开实验。传统的单片机实验系统需要频繁拔插烧写单片机芯片来编程,依赖于仿真机调试,实验成本高且效率低,已不适应现代科技开发需求。如何充分合理利用单片机的性能,方便用户高效学习与开发产品成为当前的研究热点。 单片机在电子产品中的应用已经越来越广泛,并且在很多学校也开设了相关的课程。通过对在校学生的调查,以及网络上收集到资料的综合分析,得知:目前无论是社会上还是在校学生,学习单片机的人数呈不断增加之势,对于单片机实验板的需求也不断增加。但是由于目前多数实验板价钱较高,实验项目不适于初学者学习。所以,开发出一套价格低廉,易
[单片机]
51单片机—IIC—EEPROM(CAT24WCXX)—03
今天没事做,突然想起来了IIC,所以决定回顾一下下,呵呵,忘记了不少,所以打算写出来,便于以后记忆。。。 ,这里的例子就拿CAT24WCXX的EEPROM来解释吧~~(我也是边写文章,边写代码~~~累啊) 一、IIC总线简介 1.IIC总线的主要特点 IIC总线是一种简单、双向二线制同步串行总线。 (1)总线只有两根线,既串行时钟线(SCL)和串行数据线(SDA),这在设计中大大减少了硬件接口 (2)每个连接到总线上的器件都有一个用于识别的器件地址,(注意,器件地址由芯片内部硬件电路和外部地址引脚同时决定,这样就避免了~~你懂得)从而建立了简单的主从关系,从而每个器件都可以作为发送器,也可以作为接收器。 (3)同步时钟允许
[单片机]
STC89c51单片机的定时器2
定时器T2的功能比T1、T0都强大,但描述它的资料不多,可能是使用得比较少的缘故吧。它是一个16位的具有自动重装和捕获能力的定时/计数器,它的计数时钟源可以是内部的机器周期,也可以是P1.0输入的外部时钟脉冲。T2的控制寄存器的功能描述如下: TCON2(T2的控制寄存器),字节地址0C8H: 位地址 0CFH 0CEH 0CDH 0CCH 0CBH 0CAH 0C9H 0C8H 符号 TF2 EXF2 RCLK TCLK EXEN2 TR2 C/T2 CP/RT2 各位的定义如下: TF2:定时/计数器2溢出标志,T2溢出时置位,并申请中断。只能用软件清除,但T2作为波特率发生器使用的时候,(即RCLK=1或TCLK=1
[单片机]
如何自学单片机编程
目前 单片机 对于工科学生而言就会象电路基础原理一样成为基础课。 其实不是单片机难学,而是不知道怎么入门。请大家记住一句话“单片机不是学出来的,而是玩出来的”。下面结合自己自学单片机的体会,和大家一起来“玩”单片机。准备好了吗?我现在开始教大家如何学习单片机。 第一步:先读通一本教材 唉!?太没创意了吧,还要看书?不错,第一步还是要通读一遍教材,这样我们才能站在巨人的肩膀上。读了一遍什么感觉,一个字晕。着很正常,不然你就看不到这篇文章。很多人在晕了之后就泄气了,或者换教材,接着晕,直至晕倒。不过,现在告诉大家我们要向酒鬼学习,晕了不要紧,嘴上一直说“没醉”,至少有可以多喝半斤。所以信心很重要。 第二:晕着脑袋实践 第一步我
[单片机]
AT89c51与AT89S51单片机的区别
AT89S51 是一个低功耗,高性能CMOS 8位单片机,片内含8k Bytes ISP(In-system programmable)的可反复擦写1000次的Flash只读程序存储器,器件采用ATMEL公司的高密度、非易失性存储技术制造,兼容标准MCS-51指令系统及80C51引脚结构,芯片内集成了通用8位中央处理器和ISP Flash存储单元,功能强大的微型计算机的AT89S51可为许多嵌入式控制应用系统供给高性价比的解决方案。 AT89S51具有如下特点:40个引脚,8k Bytes Flash片内程序存储器,128 bytes的随机存取数据存储器(RAM),32个外部双向输入/输出(I/O)口,5个中断优先级2层
[单片机]
51单片机控制步进电机-让电机转起来
摘要: 本节介绍用简单的方式,让步进电机转起来。其目的之一是对电机转动有直观的感受,二是熟悉整个开发流程 本系列教程必要的51单片机基础包括IO口操作、中断、定时器三个部分,相关基础教程网上很多,可以自行学习 一、软件清单 需要用到的软件有keil5编译软件、STC程序烧录软件 二、控制原理 根据TB6600驱动器原理,向PUL口发送脉冲,每发送一个脉冲,电机就转一步。通过单片机延时的方式,切换PUL口电平产生脉冲,从而控制电机转动。 三、程序代码 //毫秒延时函数 void delay(unsigned int z) { unsigned int x,y; for(x=z;x 0;x--) for(y
[单片机]