c51语法

ads

小科加油站

C51语言概述

1、C51语言


C51语言:是为51单片机设计的一种高级编程语言,属于标准C语言的一个子集。

1)优点:具有可读性强,易于调试维护,编程工作量小的特点。由于允许直接访问物理地址,能直接对硬件进行操作,可实现汇编语言的部分功能,因而兼有高级和低级语言的特点,适用范围广。目前C51语言已成为51单片机程序开发的主流编程方法。

结构化语言,代码紧凑——效率可与汇编语言媲美(但仍不如)

接近真实语言,程序可读性强——易于调试、维护

库函数丰富,编程工作量小——产品开发周期短

机器级控制能力,功能很强——适合于嵌入式系统开发

与汇编指令无关,易于掌握——在单片机基础上上手快

2)缺点:执行效率不如汇编语言

C51语言所编制的源程序不能直接被计算机识别,必须转换成可执行语言(或称目标代码)后才能执行。

先将高级语言源程序全部转换为目标代码,然后再执行的方式叫做编译型执行方式。

C51采用编译型执行方式,产生的目标代码可以脱离C51编程环境独立执行,程序执行速度快,代码效率高。

将源程序边转换,边执行的方式叫做解释型执行方式。


2、C51 VS C语言


相同之处:语法规则、程序结构、编程方法

不同之处:数据结构、中断处理、端口扩展


3、创建C51程序


“新建工程文件”→“选择单片机”→“编辑源程序”→“添加源程序” →“修改工程配置”→“进行程序编译”→“生成可执行文件”。

4、C51的程序结构


·   C51程序的基本单位是函数,一个C51源程序至少包含一个主函数,也可以是一个主函数和若干个其他函数。

·  主函数是程序的入口;

·  主函数中的所有语句执行完毕,则程序结束


举例:LED闪烁控制功能

3、C51的数据结构


1、C51的变量

a) 在C语言编程中,数值可以发生改变的量称为变量。

b)变量的基本属性是变量名和变量值

c)在程序中定义变量,C51编译器就会给这个变量分配相应的存储单元,从而将变量名与存储单元的地址“捆绑”在一起,变量值就与存储单元的内容相对应(若存储单元中放置不同的内容,变量就会有不同的值)。

d)使用变量的过程,就是通过变量名找到相应的内存地址,进而对该存储单元进行数据读取的操作过程。



实际使用变量时要考虑的因素:

a)如果变量要对应更大的数值就需要将多个连续地址的存储单元串联起来以便增加位数,这就涉及到变量的数据类型问题。

b) 51单片机有片内RAM和片外RAM两种数据存储器,这就涉及到变量的存储类型问题。

c)变量与存储单元永久“绑定” 会降低存储单元的利用率,临时分配存储单元的动态方案会降低变量使用的方便性,涉及到变量的存储种类问题。


定义一个变量的完整格式(变量具有4大要素):

〔存储种类〕数据类型〔存储类型〕变量名;


变量定义时还需考虑变量的“作用域”问题。


为提高变量存储效率,比较科学的做法是:

①对于仅有当前使用价值的变量,可以让它用完后“自动”释放占用的存储单元,以便编译器重新进行变量存储空间分配;——auto

②对于具有长期使用价值的变量,可以让它处于“静态”保护下,在程序运行期间都不释放存储单元;——static

③对于需要在多个程序或函数中传递数据的变量,可以让它只在一处进行定义,而在其它程序或函数中声明它的“外部”属性,从而实现该变量的数据共享;——extern

④对于需要频繁改变其值的变量,可让其数值保存在CPU的“寄存器”中,避免反复访问内存,从而获得较高的执行效率。——register


变量的存储类型有4种:

1、自动型(auto)。

       具有auto属性的变量称为自动型变量。自动型变量的作用域是在定义该变量的函数体或语句组内。当函数调用结束或语句组执行完毕时,自动型变量所占用的存储单元就被释放。由于存储单元中的值是随机的,因此自动型变量在赋初值前的值也是随机的。自动型是“存储种类”的默认选项,如果变量定义时“存储种类”项省略,则变量被默认为是自动型的。

2、静态型(static)。

       具有static属性的变量称为静态型变量。静态型变量的作用域是定义它的函数体、程序文件或语句组内。静态型变量具有变量的隐藏性、存储持久性和默认0初值3个特点。

如果希望变量在离开作用域后仍能保持它已经获得的数值不丟失,或者希望变量无法被作用域外的其它同名变量所使用,或者希望变量虽经定义但缺省赋初值时能默认为0,就可在变量定义时用static进行声明。

3、外部型(extern)。

       具有extern属性的变量称为外部型变量。如果变量的定义与使用不在同一个作用域内,则用extern声明后就能将原作用域扩展到声明所在的位置,从而将变量值带到新的作用域内。extern的这一扩展性与static的隐藏性恰好相反。变量做extern声明后可分配固定的存储单元,并在程序的整个执行期内始终有效。

4、寄存器型(register)。

      具有register属性的变量称为寄存器型变量。如果变量在使用中需要频繁地与内存进行数据交换,可以通过register定义将变量的存储单元指定为寄存器。但是随着编译器技术不断优化,现在编译器已能将数据交换过于频繁的变量自动放入寄存器中,因而进行register声明的必要性已不大了。


注意

auto,static和register关键词需要在变量定义的同时进行使用不能单独使用


因此下面的用法是不对的:

int a; (先定义整型变量a)

static a; (企图再对a声明为静态变量)


这样做会被编译器认为是“重新定义”。正确的用法应该是:static int a;


但是,extern却是可以单独进行声明的,它可对已定义过的变量进行作用域扩展,例如:

int b;(在另一程序文件或函数中定义了变量b)

extern b;(将变量b的作用域扩展至此,允许省略变量b的int类型)

变量的定义和变量的声明问题。实际应用中这两者常常被不加区别的随意使用,这是不严格的,因为两者间是有区别的。

变量定义既涉及到变量特性的约定,也涉及到存储单元的分配问题。

变量声明则是仅指出变量的特性,不涉及存储单元的分配问题。

例如上面介绍过的“int a;”称为变量定义,而“extern b;”则称为变量声明。


4、全局变量与局部变量问题


根据C51规则,变量定义语句放置的位置决定了变量的作用域,其中放在程序开始处(即所有函数前面)的称为全局变量,而放在函数内部的称为局部变量。

全局变量的作用域是整个源程序范围,变量值可在程序运行期间始终有效,而局部变量值仅在函数调用期间有效,调用结束后就会失效。

为了合理利用存储资源,需要根据情况灵活采用全局变量或局部变量,一般情况下应尽量选用局部变量。

全球科技热点

1

白鹤滩水电站16台百万千瓦机组通过验收

据三峡集团介绍,近日,白鹤滩水电站最后一台百万千瓦水轮发电机组9号机组顺利通过验收,生产运行单位已具备全面接管9号机组及相关设备的条件。至此,我国自主研制安装的白鹤滩水电站16台百万千瓦水轮发电机组全部通过验收。

白鹤滩水电站位于云南省巧家县和四川省宁南县交界处金沙江干流河段,是三峡集团在金沙江下游建设的四座巨型梯级水电站——乌东德、白鹤滩、溪洛渡、向家坝中的第二级。白鹤滩水电站左右两岸地下厂房共布置16台世界单机容量最大的百万千瓦水轮发电机组,总装机容量1600万千瓦。

2

我国渤海再获亿吨级油气大发现

3月1日,中国海油对外宣布,我国渤海再获亿吨级大发现——渤中26-6油田。该油田为国内最大的变质岩潜山油田,也是我国第一大原油生产基地渤海油田连续三年勘探发现的亿吨级油田,进一步夯实了我国海上油气资源储量基础,对保障国家能源安全具有重要意义。

渤中26-6油田位于渤海南部海域,距离天津市约170公里,平均水深22.1米,构造位于渤海黄河口凹陷与渤中凹陷两大富烃凹陷之间。发现井渤中26-6-2井钻遇油气层累计超过320米,完钻井深4480米,测试平均日产油超270吨,平均日产气超32万方,证实了该油田具有储量规模大、油品性质好、测试产能高的特点。

3

中国风电光伏累计装机突破7亿千瓦

出口总额超过512亿美元,同比增长80.3%——2022年,我国光伏产业在国际市场的表现亮眼。历经多年深耕细作,我国风电光伏产业竞争力大幅提升,光伏组件、风力发电机、齿轮箱等关键零部件占全球市场份额的比重提升至70%。在国内,风电光伏也已成为新增发电装机和新增发电量的主体,2022年占比分别达到78%和55%以上,累计装机突破7亿千瓦,相当于30多个三峡电站。

撰稿 | 陆万衡

排版 | 赖恒毅

审阅 | 王靖妍 张烨

指导教师 | 孙鹏博

 

仪器科学与电气工程学院

官方微信:JLU_CIEE     

投稿邮箱:18204311102@163.com

官方微博:吉林大学仪器科学与电气工程学院




最后编辑于:2024/1/18 拔丝英语网

admin-avatar

英语作文代写、国外视频下载

高质量学习资料分享

admin@buzzrecipe.com