学单片机之前要学什么?C语言和单片机有什么关系?
学习单片机之前要学什么?提起这个就想起我当年开始学习单片机的血泪史了。
08年我加入学校的电子实验室,为08年的全国电子大赛做准备。
08年的电子大赛分类3类,硬件设计类、单片机软件类、产品的调试动手类。
现在的大赛应该有所改动。
我选择的是软件类,选择这个的原因是我觉得这个更加的神秘,就是这个神秘感让我对软件更加的有兴趣。
刚开始真的是一窍不通,我买了一本C语言书,独自学习了2个月,做了3本笔记,然后又学习了1个月的数字电路,到这个时候,我都快奔溃了,3个月过去了,还是啥都不懂!
这个时候我已经做好放弃的准备了,最后想想:自己选的路,跪着也要走完。
正好那段时间每天也闲得,就抱着边玩边学的态度,说出来你可能不信,不知不觉就把单片机的IO口、定时器、中断、串口通讯这些学会了。
那一刻,我就在想原来单片机开发也没有这么神秘!哈哈!
回顾一下自己的这个学习过程,到现在还是非常的难忘,相信很多的伙伴们可能还和我当年一样,坚持了一段时间,没有进展,一直处于一个入门前期的困惑当中。
其实单片机就是一个工具,在学习这个工具之前还是需要有别的知识作为铺垫。
比如说基本的数字电路基础和简单的C语言编程基础。
一、电路基础和C语言基础要学习的内容
1.数字电路基础需要学习什么?
掌握电阻、电容,三极管的基本用法,掌握单片机的高低电平的概念基本上就差不多了。
最好的学习渠道就是开发板的原理图,把开发板原理图搞懂基本上就能做一些项目了。
2. C语言编程基础
C语言基础的学习,必须要掌握一些基本的语法,和变量的定义。
具体的学习路径,可以到小破站找无际单片机编程比较系统全面,也是针对单片机来讲的。
学完单片机、电路基础、C语言的知识以后,就可以开始着手做一些项目了,前期先通过小项目开始,比如说电子时钟啥的。
二、C语言和单片机有什么关系?
通过前面的讲解,相信大家已经有一点概念了。
下面再给大家深入讲解下C语言和单片机的关系。
单片机支持C语言和汇编来编写程序。
1. 通过C语言来编写
C语言编写的程序,最终需要通过keil工具编译成单片机可以识别的.hex文件的过程:
C程序源码->C编译器->汇编代码->汇编编译器->机器码(.HEX 或.BIN)
2.通过汇编来编写
单片机的程序早期都是汇编代码,汇编代码最接近硬件底层的低级语言,运行的效率比较高。
但汇编语言很很多比较明显的缺点:不方便阅读,移植性差,开发难度大等,随着技术的不断进步,大家就开始逐步的的使用C语言来代替汇编语言,(比较低端的芯片还是需要汇编来开发)。
所以,一般产品开发都是使用C语言,汇编一般是用来做很小的产品,或者单片机的启动文件。
单片机C语言编程,心得都在这里了
这个8*8按键程序的过程中,不管是在自己写还是参考别人程序的过程中,发现自己对C语言有些基本知识点和编程规范有很多不懂的地方,有些是自己以前的编程习惯不好,有些就是基础知识不扎实的表现,所以总结出来。
一、.件与.C文件的关系:
迄今为止,写过的程序都是一些很简单的程序,从来没有想到要自己写.件,也不知道.件到底什么用,与.C文件什么关系。只是最近写键盘程序,参考别人的程序时,发现别人写的严格的程序都带有一个“KEY.H”,里面定义了.C文件里用到的自己写的函数,如Keyhit()、Keyscan()等。
经过查找资料得知,.件就是头文件,估计就是Head的意思吧,这是规范程序结构化设计的需要,既可以实现大型程序的模块化,又可以实现根各模块的连接调试。
1、.件介绍:
在单片机C程序设计中,项目一般按功能模块化进行结构化设计。将一个项目划分为多个功能,每个功能的相关程序放在一个C程序文档中,称之为一个模块,对应的文件名即为模块名。一个模块通常由两个文档组成,一个为头文件*.h,对模块中的数据结构和函数原型进行描述;另一个则为C文件*.c ,对数据实例或对象定义,以及函数算法具体实现。
2、.件的作用
作为项目设计,除了对项目总体功能进行详细描述外,就是对每个模块进行详细定义,也就是给出所有模块的头文件。通常H头文件要定义模块中各函数的功能,以及输入和输出参数的要求。模块的具体实现,由项目组成根据件进行设计、编程、调试完成。为了保密和安全,模块实现后以可连接文件OBJ、或库文件LIB的方式提供给项目其他成员使用。由于不用提供源程序文档,一方面可以公开发行,保证开发人员的所有权;另一方面可以防止别人有意或无意修改产生非一致性,造成版本混乱。所以H头文件是项目的详细设计和团队工作划分的依据,也是对模块进行测试的功能说明。要引用模块内的数据或算法,只要用包含include指定模块H头文件即可。
3、.件的基本组成
/*如下为键盘驱动的头文档*/
#ifndef _KEY_H_ //防重复引用,如果没有定义过_KEY_H_,则编译下句
#define _KEY_H_ //此符号唯一, 表示只要引用过一次,即#i nclude,则定义符号_KEY_H_
/////////////////////////////////////////////////////////////////
char keyhit( void ); //击键否
unsigned char Keyscan( void ); //取键值
/////////////////////////////////////////////////////////////////
#endif
C语言和单片机C语言有何差异?
想学习单片机的同学可以关注、私信我或者在评论区回复我要入门。很多想入门单片机的同学都会先学习C语言再入门单片机,但是学着学着发现明明同样都是C语言,为什么单片机C语言和我当初学的C语言有差异呢?
单片机c语言相对于普通C语言增加了一些基本的指令,还有变量的赋值是16进制,当然单片机c语言只牵涉到普通c语言非常基础部分。
主要的差异具体体现在:
1、单片机中C的语法一般都对 ANSI C有些扩展,及一些特殊写法如C51扩展的 data xdata bit sbit一类的,还有一些中断程序写法 void int() interrput 1一类的。
2、C是一门高级语言,它需要经过编译成汇编语言机器才能读懂,所以每个平台的编译器编译成对应平台汇编的程序,每个平台的汇编不一样,当然编译器也不一样。 DOS上的TC2 TC3 WINDOWS上的VC 8051的C51都有自已的编译器。具体区别是由编译器决的,只能参考对应的编译手册,即使同种平台不同的编译器对C的扩展也有不同。
3、单片机c语言编程是基于C语言的单片机编程。单片机的C语言采用C51编译器(简称C51)。由C51产生的目标代码短、运行速度高、存储空间小、符合C语言的ANSI标准,生成的代码遵循Intel目标文件格式,而且可与A51汇编语言PL/M51语言目标代码混合使用。
4、C只是一种高级语言。它除具有一般高级语言的功能特性外,它可以很好的操作底层的硬件接口。在C语言的基础上,如果你把一些单片机的端口或特殊功能寄存器加于定义,使用的时候会更加方便,写语句的时候,直接直观的编写。这样就差不多是单片机C语言。
本期先分享到这里,想要进群学习单片机编程的同学可以私信我,回复“我要入门”,与我们一起成长,喜欢的可以点个赞关注我们!C语言是我们入门嵌入式单片机所学习的一门语言,也是IOS开发、单片机开发等应用上具有重要应用的一门语言,虽然C语言与单片机C语言、C++、C#等有或小或大的差异,但他们的编译机理、表达形式基本都是大同小异的!
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。