本节书摘来自华章出版社《迷人的8051单片机》一书中的第3章,第3.4节,作者高显生,更多章节内容可以访问云栖社区“华章计算机”公众号查看。

3.4 程序

3.4.1 程序的构成

C程序的构成是由一个main函数和若干个其他函数构成的,以下我们用一个实际的例子来说明C程序的构成。

#include<reg52.h>        //8051单片机的头文件
void main()        //定义主函数,返回值为空
{unsigned char num;    //定义变量numP0=0xFE;        //让P0.0口输出低电平,P0.1~P0.7保持高电平while(1)        //让程序在此循环{num++;            //变量num的值自加}
}

在上面的程序中,第一行“#”是预处理命令行起始符号,“include”是预处理命令,表示程序在这里引用了来自另外一个地点的文件,“include”用于将该文件中的程序行放到本程序中使用。“reg52.h”是C51编译器提供的增强型8051单片机的头文件,用于对8051单片机的寄存器进行规范化定义。

程序的第二行是一个函数。我们知道,C语言是一个模块化的语言,它的主要部分就是由多个具有特定功能的函数构成的。“main”函数和C语言中其他函数在结构上是一致的,但它的名称是固定的“main”,即“主函数”的意思。在一个C源程序中,有且仅有一个主函数,无论主函数位于源程序的什么位置,程序执行时都从主函数开始。

主函数的返回值为“空”,而且没有输入参数。在“main”函数的函数体中,首
先定义了一个变量num,之后是一个赋值语句,意思是给寄存器P0赋值为十六进制的“FEH”,函数中的每一个程序行都以分号“;”结束。接下来的程序行是一个while 语句,它是一个循环语句,用来控制程序段(即循环体)的重复执行,这里程序的目的是让变量num的值不断自加。单片机的程序都是一个趋于无限的死循环,程序中使用while(1)这样的写法的目的是使程序在此进入持续的循环状态。

分析程序的运行过程,主函数是程序运行的开始。程序从主函数的函数体第一行开始执行,直至while循环之前,这一部分在每次系统复位后会顺序执行一次,程序中变量的声明、系统的初始化等可以放在这一部分运行。之后,程序进入由while语句构成的主循环中。这部分语句在程序运行时会无限地循环执行,适用于软件查询标志位、扫描按键和数码管等需要不间断访问的部分。主函数的运行过程如图3-5所示。

3.4.2 程序的注释

为了便于理解程序,可以在程序行的适当位置加入注释。注释有两种,一种是单行注释,即在需要注释的文字前面加入两个斜杠,其格式为:
// 注释的文字
另一种是多行注释,即在要注释的段落开始位置加入一个斜杠和一个星号,在段落的结束位置再加入一个星号和斜杠,具体格式为:

/* 注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  注释的文字  */

被注释的文字在编辑器中是以绿色显示的,在对程序进行编译时,被注释的文字不参加编译,也不会干扰程序的运行。经常对程序代码进行注释是一个好习惯,它不但可以帮助别人理解你的代码,也给日后自己的阅读带来方便。

3.4.3 局部变量和全局变量

变量的有效性范围称为变量的作用域,C语言中所有的量都有自己的作用域,变量说明的方式不同,决定了其作用域也不同。按作用域范围不同,C语言中的变量可分为两种,即局部变量和全局变量。

1. 局部变量

局部变量也称为内部变量。局部变量是在函数内部进行定义和说明的,其作用域仅限于函数内部,离开该函数后再使用该变量是非法的。例如:

void delay(unsigned int t)
{unsigned int x,y;for(x=t;x>0;x--){for(y=2650;y>0;y--){}}
}

在面的delay函数内部,定义了两个变量x和y,这两个变量在delay函数内部使用是合法的,或者说变量x和y的作用域仅限于delay函数内部。C程序中允许在不同的函数中使用相同的局部变量名,但它们代表不同的对象,调用时会分配不同的内存单元,互不干扰。另外,在主函数中定义的变量也是局部变量,只能在主函数中使用,主函数中也不能使用其他函数中定义的变量。

2. 全局变量

全局变量也称为外部变量,它是在函数的外部定义的变量。全局变量不属于某一个函数,而是属于某一个源程序文件。全局变量的作用域是整个源程序,在函数中使用全局变量,同样需要先定义后使用。例如:

#include<reg52.h>                    //8051单片机的头文件
unsigned int  NUM;                //定义全局变量NUM用于显示
void  display(unsigned int K);            //数码管显示函数声明
…
int main(void)
{… while(1){…display(NUM);                //扫描数码管}
}
void  display(unsigned int K)
{unsigned char NUM4,NUM3,NUM2,NUM1;        //定义四个局部变量…
}

在以上的代码中,变量NUM是一个全局变量,它的定义位置是在函数的外面,因此它的作用域是整个程序,NUM这个变量在程序的任何地方调用都是合法的。全局变量经常用来作为函数间数据的传递。在display函数的内部定义的变量NUM1~NUM4则是局部变量,它在display函数内部,也只能在该函数内部使用。

《迷人的8051单片机》----3.4 程序相关推荐

  1. 《迷人的8051单片机》---3.2 语句

    本节书摘来自华章出版社<迷人的8051单片机>一书中的第3章,第3.2节,作者高显生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 3.2 语句 C语言用语句 ...

  2. 《迷人的8051单片机》---- 1.2小元器件有大智慧

    本节书摘来自华章出版社<迷人的8051单片机>一书中的第1章,第1.2节,作者高显生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 1.2 小元器件有大智慧 ...

  3. 《迷人的8051单片机》----第2章 神秘的半导体 2.1 二极管

    本节书摘来自华章出版社<迷人的8051单片机>一书中的第2章,第2.1节,作者高显生,更多章节内容可以访问云栖社区"华章计算机"公众号查看. 第2章 神秘的半导体 大自 ...

  4. 《迷人的8051单片机》——导读

    前 言 在单片机的"江湖"中,8051单片机历来都是兵家必争之地.这是因为8051单片机有着悠久的历史和最为庞大的用户群,很多时候它已经成为8位单片机领域的一种行业标准,众多器件都 ...

  5. 在 Linux 下开发和下载8051单片机程序

    在 Linux 下开发和下载8051单片机程序 在 Linux 下需要用 sdcc 开发8051单片机程序,用 stcgal 这个 python 程序将编译好的8051单片机程序下载到裸机上. sdc ...

  6. c语言ad采样程序思路,单片机AD采样程序及其寄存器讲解

    描述 ad采样的步骤:首先将外部的信号,通过电路或者已有的AD芯片转换成 主CPU能接受的电压 信号.但是此电压信号必须转换成8.10 .12位或更高位数的数字才能进一步做计算.另外转换成位数多少表明 ...

  7. 基于 8051单片机的线跟随小车

    线跟随小车是一种跟随线的机器,它可以是黑线或白线,线路跟随器感应到线路并越过它.在此项目中,如果感应到白线,会往白线的一侧转弯,直到没有感应到白线,再继续前进. 线跟随小车的原理 线跟随器的概念与光有 ...

  8. idata 单片机 新唐_【nuvoton新唐8051单片机】NuTiny-SDK-N76E003开发板

    型号:NuTiny-SDK-N76E003 内核架构:8-bit 产品简介: N76E003为新唐高速1T 8051 单片机系列产品,提供18 KB Flash ROM.可配置Data Flash与高 ...

  9. 如何通过8051单片机与片外存储器的连接来解决8051片内RAM和ROM容量不够用的问题

    系列文章目录 上期文章回归: <你真的熟悉8051单片机的引脚功能及其使用吗?> 提示:读本文前可先阅读上期文章回归下51单片机的引脚,以便更好的阅读本文. 文章目录 系列文章目录 前言 ...

最新文章

  1. git简介及使用方法
  2. Groovy开发语言
  3. android串口通讯奇偶校验,串口通讯奇偶数校验及CRC校验如何使用详解
  4. docker挂载的目录无法读写
  5. matlab-robtics学习笔记
  6. [2021.1.31多校省选模拟12]随机变换的子串(线段树维护分治/字符串/自动机思想)
  7. IPMITool driver
  8. lvs+keepalived+nginx+tomcat高可用高性能集群部署
  9. sql server 中后缀为.mdf的文件是干什么用的??
  10. 利用fidder发送request
  11. c语言编译音乐简谱,单片机音乐曲谱_单片机c语言音乐简谱代码
  12. 云原生 - 阿里云 SLB、CDN、SCDN、DCDN 区别在哪?如何选择?
  13. linux vim删除单个字符串,LINUX vim替换字符串指令
  14. [OpenCV+VS2015]火焰检测算法(HSI判据)
  15. 简易cad导出pdf程序源码
  16. 用计算机键盘方法是,键盘一键打开计算器的方法
  17. 速读原著-TCP/IP(网络文件系统)
  18. 离线强化学习(Offline RL)系列2: (环境篇)D4RL数据集简介、安装及错误解决
  19. 创建华为云服务器实验报告,华为云正式发布云端实验室,真正实现云服务实验云上做...
  20. IE浏览器无法打开HTTPS解决办法

热门文章

  1. 人工智能和物联网:智慧城市的交通管理
  2. IBM强化Watson对商业语言的理解能力—AI辩论一些关键技术首次商业化
  3. Yann LeCun力挺观点:算法对AI提升不大,奇点仍然很遥远
  4. AI 与区块链:两大热门技术,会碰撞出什么样的火花?
  5. AI在行动:改变科学界的人工智能
  6. BagNet超越 AlexNet,在ImageNet 上实现最先进结果!
  7. String字符串位置移动
  8. 如何完全卸载 mysql 数据库
  9. BMP文件的读取与显示
  10. Android开发实践:在任意目录执行NDK编译