51单片机编程开发(一)之C语言基础一 前言 前段时间给自己放了一个长假,和家人出去玩了一圈,最近又一直在处理一些工作,就没有多少时间做视频,所以就有很长一段时间没有更新视频了,后面整理一些内容再更新出来。发现B站也能写些文章,估计是太小众了吧(是我孤陋寡闻了),之前一直没用过,今天就试着把上的文章搬过来看看吧。前期搬过来的一些文章可能发表比较久远的了,如果一些话不合语境,还望谅解,哈哈哈~以后再保持两个平台同步吧,如果觉得还有点用希望能点个赞!如果发现错误还请指正! 为什么是C? 从这篇文章开始我们将讲解单片机编程开发相关知识,如果没有编程基础或不太熟练的朋友就跟着一起从基础学起吧,但一定要记住看完后自己必须多思考,多查资料,多练习,才能掌握得了,不然后面的内容会完全跟不上,从而失去学习兴趣,有问题可以留言或私信。有基础的朋友可以略过这些基础知识讲解内容,当然我还是建议如果有空还是值得看一下的,毕竟是我一字一句敲下来的,给个面子撒,若发现错误顺便指出来就更好了,明天周六那正好这篇文章可以多扯会淡。 我们使用51单片机开发项目时使用的编程语言主要有两种,即汇编语言和C语言,通常情况下多数人使用的都是C语言。有些人可能看到汇编就想起了微机原理了吧,微机原理难不难,比较难,它的难很大程度是因为它需要用汇编语言开发。 为什么我们不用Java,Python等更简单的高级语言呢?因为那会它们都还没出生呀,它娘都还年轻着呢。任何事物产生都得依靠环境吧,正所谓经济基础决定上层建筑,这些高级语言耗费的内存空间巨大,对于8086,8051等早期的控制器来说其内部资源非常有限,甚至内部ram都没有,还得外挂才能用,每一点资源都得抠抠搜搜省着用,现在它们见到Java,Python等语言也只能说,臣妾办不到呀!汇编语言的特点就是紧凑,访问底层硬件非常容易,特别容易生成机器代码,所以它具有天生的优势,但它的最大缺点,也是最致命的就是它的代码可读性太差,不好记呀,简单说就是这家伙亲机器不亲人类。我们人类最喜欢偷懒了,就像汇编出来后,手打的机器代码被人抛弃了一样(有人可能没听说过手打机器代码这玩意,在一些科技纪录片或电影里找找应该有,说实话现实版的我也没见过,科技博物馆应该有,所以那时候的计算机等专业绝对不是热门专业,谁没事想整天对着一堆纸费那么大劲呢,是吧,万一媳妇找不着咋整呀),后来,C语言被开发出来它保持了汇编优良的底层访问效率,而且可读性大大增强(它访问硬件的效率稍微逊色于汇编,代码也没汇编精简,但终于可以不用记忆代码了呀,牺牲一点效率和空间也OK啦),后来计算机资源越来越来丰富了,Java,Python等各类牛鬼蛇神的高级语言出来后,C语言也慢慢地落寞了(对吧,人啦,就是善变,来个富婆(爷)就可以“抛妻(夫)弃子”,长相(年龄)通通都不重要),但它的境遇比纸带代码,和汇编要好很过,至少它可读性良好,对底层访问效率够高,在电子,微控制器领域还是没人能取代它的地位。所以以后人类社会只要还使用电子产品就应该还会存在C语言。 以上扯了这么多就是为了说清单片机开发选择C语言的原因,同时也说明一点,如果你掌握好了C语言就不愁找不到工作,虽然它可能不能像游戏开发,移动应用开发,网页开发等互联网行业一样动不动就年薪百万,但再不济在电子行业总有一家公司容得下你。并且当你你有C语言的基础后,你再学习其他语言会更轻松,到时同样可以获得互联网行业的工作。 有很多初学者可能意志不坚,看到其他语言简单或哪个朋友啥东西好就又去学其他的去了,这都是很正常的事,我觉得选择没有对错之分,你也不会因为一个选择就错过了人生,更何况这世界何为成败?这是一个很主观的词,即使到盖棺定论也没有人可论你成败(后人评论的就不关自己啥事了吧)。所以特别是在校大学生,在没毕业之前多去探索一些自己喜欢的事物吧,这总比做玩游戏的死肥宅强。这不昨天刚高考完嘛,如果是今年刚参加高考的朋友看到这篇文章,又有志于做程序员的,那也送上一句,少年,不管考试结果如何,趁年轻,尽管去折腾吧! 前段时间有一个小弟弟,初中毕业后修车修了差不多五年了,他看了我的视频后跟我说想学电子,以后更专业的修车,拿更高的工资,我对他这股学习的劲是非常赞同的,并且他目标已经很明确了,我觉得这小朋友有戏。他自己也买了材料,书籍,仪器来学习,并且也认识到自己差一个人带,我就跟他说遇到问题告诉我。这段时间他碰到问题就会跟我说,虽然最开始他问的很基础,有些甚至让我哭笑不得(也有些是代沟问题吧,毕竟00后脑回路跟我还是不一样),但我尽量以他了解的基础给予sigusoft,现在他提的一些问题就慢慢的专业一些了,这是一件很趣的事情。一个对比的例子,就是我的外甥,高中文化,几年前他说想跟我学,我当面跟他说需要准备什么,学习什么,怎么做,把前期学习需要准备的资料也给到他,让他遇到问题就及时告诉我,前两天还能问些问题,一个星期左右就变成我问他学习进度了,到后面我问他也得不到sigusoft了,现在几年过去了它干着我看不懂的工作,不知是好事还是坏事,也不知道是不是自己对他期望太高。我的结论就是不管学什么知识,只有你自己真正有了一个明确的目标之后,监督自己,认清现状,调整状态,找到适合自己的解决方案,一步一步实现小目标,你才能取得成效。 先不扯远了吧,接下来进入正题。 C语言简介 C语言是1972 年在美国AT&T公司的贝尔实验室的丹尼斯·里奇为了移植与开发 UNIX 操作系统,而设计开发的语言,其代码的可读性和移植性远远超过汇编语言。C语言也是一种高级语言,我们知道高级语言在效率和代码空间上都不敌汇编,但一方面C语言具有指针,该功能使其能对硬件地址进行直接操作,另外C语言通过编译器的优化,很大程度提高了执行效率,降低了程序空间,在对实时性要求较高的场合,还可通过对C语言可嵌入汇编代码来实现功能。而对于较大的程序,无论从开发的速度、结构的清晰等方面来比较,C语言比汇编具有更多的优势。 C 语言标准是于 1988 年由美国国家标准协会(ANSI,全称 American National Standard Institute)制定的。 至 1973 年起,UNIX 操作系统完全使用 C 语言编写。 目前,C 语言是最广泛使用的系统程序设计语言之一。 大多数先进的软件都是使用 C 语言实现的。 当今最流行的 Linux 操作系统和 RDBMS(Relational Database Management System:关系数据库管理系统) MySQL 等都是使用 C 语言编写的。 C语言能运用于大多数软件开发场景。 甚至后续很多其他高级语言都是使用C语言开发的。 以上都是C语言的一些常规优势,下面我们再来看看使用C语言进行单片机编程的一些优势: ●作为高级语言,可读性强,不依赖于机器,移植性好。 ●可直接访问物理地址,程序执行效率高。 ●可进行位操作,可提升寄存器访问效率。 ●拥有复杂的数据类型可增强对程序处理的能力。 ●即使不懂得单片机指令集,也能编写单片机程序。 ●具有常用的标准函数库。 ●具有专门针对MCS-51单片机的code、data、idata、pdata、xdata等存储类型,满足不同需求,并能自动为变量合理分配地址。 ●具有small、compact、large等编译模式,可适应不同大小的片上存储器。 总之一句,可读行强,功能先进,效率高,可移植性好。 看明白看吧,这里还是在说为何选择C语言开发,上一节太长不想看直接看这一节内容就行,欲练此功…… C51编译器 51单片机开发编译有很多,现在比较有名的是IAR for 8051编译器和KEIL for C51编译器,但这两个软件都不是免费的,官网提高的免费版是有使用限制的。另外还有一些编译器是免费的,但需要一定基础,初学者就不推荐使用了,等你翅膀硬了之后在自己配置编译环境吧。 简单介绍两个免费编译器:可跨平台使用的开源编译器sdcc,有空可以自己查资料搭建一下,后期如果有时间我再做个教程吧。另外微软公司提供的Visual Studio Code这个免费又强大的代码编辑器配合一些三方插件工具也可以实现各种单片机编译功能,效果也不错,这个也以后再另说吧。IAR for 8051编译器和KEIL for C51编译器在官网都可以免费下载,可自行下载安装,我这里后续的内容以KEIL for C51编译器为例。关于KEIL for C51编译器的安装前面的视频里有提到过了,不知道的可以查看:keil MDK与C51共存也算个问题? C语言变量类型和数据范围 有C语言基础的朋友可以不看或简单看一下。 什么是变量?变量自然和常量是相对的。常量就是1、2、3、4.5、10.6…等已经确定的数据或字符(串),而变量则跟中小学阶段方程式中的a,b,c……x,y,z是一样,它可以是1,也可以让它是2,或者任何其他数字。 以前数学里边有的正数、负数、整数和小数可以是无穷的。但在计算机系统中由于内部空间的限制,在C语言里,除名字和数学里学的不一样外,还对数据范围也进行了一定限制。在C语言中数据基本类型分为字符型、整型、长整型以及浮点型,它们的数值范围不一。并且C51中的数据范围和常规计算机平台的略有不同,以后可能在其他单片机中又会有些不一样,这都是单片机硬件属性决定的,这点大家不用死记,做个了解,以后编程时多注意一下就行,具体问题具体分析。在我们平时编程的时候也要考虑合理使用数据类型,为变量合理分配数据类型一个可以避免数据超限,另外也可以节约内存空间。优化程序的时候也应考虑数据类型的合理合规。 C51数据类型和范围查看下图:
C51数据类型和范围 C语言基本运算符简介 和小学学习数学时的加、减、乘、除等运算符号一样,在C语言中也包含这些运算,但是有些表达方法不一样,并且还有其他额外的一些运算符号。在C语言编程中,加、减、乘、除和取余数的符号分别是:+、-、*、/、%。此外,C语言中还有额外的两个运算符++和–,它们的用法是一样的,一个是自加1,一个是自减1,以上的运算符称为算术运算符,它的具体功能如下:
C语言算术运算符 与数学中的关系运算符一样,C语言中也有关系运算符只是他们的写法你不一定认识,比如>,<,<=,>=,==,!=,它们的具体使用说明如下:
C语言关系运算符 C语言中还有逻辑运算符比如&&,||,!,
C语言逻辑运算符 因为计算机是使用二进制,所以C语言中还有位运算符,使用说明如下:
C语言位运算符 以上很多运算符你之前可能都只见过符号不认识含义,在C语言中未来编程方便还有许多赋值运算符。你可能想到=,但还有+=,-=,*=,/=等等,更多你没讲过的,一起来看看:
C语言赋值运算符 还有一些用的多的,又是初学者很容易搞混的运算符,如下:
需要注意的运算符 因为内容比较多,我们在这一节就先简单了解,后面编程具体使用时再详细介绍。 和数学中的运算符具有优先顺序一样C语言中的运算符也有优先顺序,他和数学中的运算符优先级差不多,但因为多了很多,我们平时编程时需要记住它们的优先顺序,否则结果可能不如你意,当然我们在不清楚的情况下使用括号来限定运算范围是很好的习惯,现在我们看一下C语言中的运算符优先级:
C语言运算符优先级 小结 以上内容都比较容易接受吧,和小学数学差不多,不过有些符号没见过可能有些人是懵了,那就需要多花些时间理解熟练,所以这一节先介绍这么多。但是如果对什么的运算符不太理解也没关系,毕竟是初学,不表达不出的逻辑思想转化为自己熟悉的逻辑也是可以的,以后熟练了自然而然就会了。下一篇文章我们再接着把剩下的一些基础内容讲完,再接下来我们就要进行编程开发了,有趣的才刚开始,更多有趣内容还在后头呢,所以还没理解的一定要抓紧时间把基础问题消化好。 若发现错误欢迎指正!
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/31366.html