单片机小白(14):点亮第一个LED的程序分析

-回复 -浏览
楼主 2021-10-31 13:27:15
举报 只看此人 收藏本贴 楼主

本文由jzj1993原创,转载请注明来源:http://www.paincker.com/mcu-primer-14

本篇我们将分析上一篇所写的程序代码。未来学习单片机的大部分精力,我们也将放在程序代码的编写上。但是不用担心,我会非常详细的介绍每个程序的编写思路和各种注意事项等。

之前我们写的程序如下:

#include

sbit LED = P1^0;

void main()

{

    LED = 0;

    while(1);

}


头文件

第一行包含头文件,这个和C语言编写HelloWorld时的#include 一样。头文件reg52.h中定义了单片机的一些寄存器,如P0~P3等。至于什么是寄存器,将在原理篇中具体介绍,现在我们只要把它想象成C语言中常说的内存就好了。有兴趣的读者可以右击reg52.h打开头文件看一看。


C51的变量类型

这里我们使用的语言是C51,和标准C语言相比,最主要的特点就是多出来两种变量类型:sfr和sbit。sfr和char一样是一个8位数据类型,表示一个8位的寄存器。例如头文件reg52.h中就有一句sfr P1 = 0x90,它定义了寄存器P1。由于P1是IO口寄存器,所以对P1赋值,则相应的, IO口P1将输出对应的高低电平。而sbit则是一个1位数据类型,只有0和1两种值,它对应寄存器中的一个位。


于是在第二行里,我们定义了sbit型变量LED,并设置LED对应P1的最低位bit0。此时变量LED就和IO口P1.0关联起来。执行赋值语句LED = 0,IO口P1.0就会输出低电平,于是我们电路中的LED就会亮起来了。是不是非常神奇呢?在原理篇中,我会一步一步讲解单片机是如何实现这种功能的。


位寻址

在其他的很多单片机中,我们只能读写整个P1寄存器,而不能直接定义类似sbit这种对应寄存器一位的数据类型,另外51单片机里面有些寄存器也只能整个8位一起读写。这种直接读写一个寄存器位的特性被叫做位寻址功能。

又是一个很难理解的概念,同样,还是需要了解原理篇才能很好的理解它,现在完全不用担心,我提这个就是想让初学者对此提前有个大体印象。毕竟很多知识都是慢慢积累的,如果把大量这样的小知识全部放在原理篇中一并介绍,反而难以接受。


主函数的特点:没有参数和返回值

读者应该已经看到了无参数且无返回值的void main()函数,以及倒数第二行的while(1)语句,并可能疑惑不解。没错,主函数没有参数也没有返回值,倒数第二行的这句是一个死循环,程序永远也不会退出。这和计算机上的程序有很大的不同。下面简单的说明一下这样做的原因何在,更深入的原因,则需要读者看完原理篇后才能理解透彻。


在计算机中,我们开机时看到的启动界面是操作系统,如Windows、Linux等,我们编写的程序则是在操作系统的环境下运行的。程序执行时,相当于系统调用main函数,所以系统可以向main函数传递参数,也可以获取main函数执行结束时的返回值,程序执行结束后,会重新回到操作系统环境下。而在这里,我们写的程序是直接运行在单片机上的,不依赖操作系统。我们程序中的main函数不会被操作系统调用,因此通常它不需要参数,也不需要返回值。事实上,main函数有些情况下是被启动代码调用的,而启动代码是汇编语言写的,还记得上一篇中提到的启动代码么?


主函数的特点:死循环,不会执行结束

在计算机中,我们写的程序执行结束会回到操作系统环境下。而在单片机中,一旦单片机上电复位,就会执行我们写的main函数,直到断电。而如果main函数执行结束,将发生不可预知的结果。


实际实验时,STC单片机会复位并重新开始执行程序,或许只是个巧合,因为官方的芯片手册中并没有明确说明这一点。本着严谨的科学态度,我们不利用这种未经官方确认的特点来开发我们的程序。程序的可靠性是非常重要的,这一点要引起重视。


试想如果你用单片机开发的是医疗相关的产品,或者是控制一些大型机器等,一旦发生意外,后果难以想象。即使你开发的是普通的产品,如果总是出现奇怪的故障,也足以让用户抓狂。因此这一点要引起读者注意。所以,单片机的程序是不应该执行结束的,因此最后必然是一个死循环,这样才能保证单片机系统的可靠性。


总结

于是我们总结出通常情况下51单片机程序的几个特点:

1、包含REG52.H,该文件中定义了P0-P3接口等信息(sfr型和sbit型)。

2、单片机主函数没有参数,没有返回值(当然写成int型也不会报错,但是没必要)。

3、单片机主函数末尾会有个死循环,不会退出。

相关阅读:

单片机小白系列(一) 单片机的前世今生

单片机小白系列(二)爱上单片机的一万个理由

单片机小白系列(三) 偶遇51单片机

单片机小白系列(四) 模拟电路、传统数字电路与单片机

单片机小白系列(五) 集成电路、封装相关知识

单片机小白系列(六) 单片机最小系统——麻雀虽小,五脏俱全

单片机小白系列(八) 用面包板搭建实验电路

单片机小白系列(九) 用万用焊板搭建实验电路

单片机小白系列(十) 单片机程序下载相关知识

单片机小白系列(11) 购买成品开发板

单片机小白(12):Proteus仿真软件简介

单片机小白(13):点亮第一个LED——好的开始,成功的一半

本文转自网络,版权归原作者,如果您觉得不好,请留言联系我们删除!

广告

关于立创商城

立创商城(WWW.SZLCSC.COM)成立于2011年,致力于为客户提供一站式电子元器件线上采购服务,成交量全国领先。自建9200多平米现代化元器件仓库,现货库存超50000种,集团电子全产业链自营服务涵盖:在线EDA(LCEDA)+行业领先的PCB打样/中小批量+元器件商城+钢网制造+SMT贴片+电子设计教育及方案。作为一家品种齐全、自营库存、质量有保障的电子元器件垂直商城,立创商城所有元器件均从原厂或代理商正规渠道采购,保证原装正品,为您提供专业的一站式电子元器件采购服务。

我要推荐
转发到