让你重拾信心的单片机入门,小哥带你了解

24a5911c13b4b800905201d70a62d726.png

\\\插播一条:

自己在今年整理一套单片机单片机相关论文800余篇

论文制作思维导图

原理图+源代码+开题报告+正文+外文资料

想要的同学私信找我。

a43c138517e04d665f897f23460e8899.png

电子编程入门到工程师--重拾信心-单片机一篇入门

这一节写单片机一篇入门,拭目以待,必有惊喜!。

不入门的根本理由?

·简略问题复杂化,

·复杂问题简略化,

·头脑迷糊没框架,

·没头没尾似散沙。

劝退的单片机框架:

7f0e4e97bcc17bef2bb858899d285ee6.png

我们的单片机框架:

9bb14f4cbb0a55ad8be1f6e556739b95.png

此时个人、工业化领域的PC、单片机、PLC是电子工程师接触最多的器件。

个人计算机(简称PC),此时的笔记本、台式机、平板、智能手机应该都隶属于PC序列,单片机应属于另一序列。以单片机/CPU为内核,规范化、模块化、特化应用其实就是我们常说的PLC(大局部用于工业领域), PLC这一节不探讨。

b7e207b99bda6617525b121f63933d56.png

2f6eff94c0881e55c7b476bf5daf4abb.png

现实中上单片机是把类似于个人计算机的内存、cpu、固态盘、输写输出接口简化功能集成到一个芯片中。

单片机和个人计算机工作原理是类似的。

个人计算机CPU从固态盘/硬盘调入程序和数据进行计算,其次把计算结果存回固态盘/硬盘。

单片机CPU从闪存(程序存储器)调入程序和数据进行计算,其次把计算结果存回闪存。

但是在实战中发现CPU运算速度非常快,固态盘/硬盘/闪存的速度跟不上,严重影响效率。

后来增加了内存这个器件,内存和CPU是一样的处理速度。程序和数据提前调入到内存中进行存取动作,最后保存时才写入固态盘/硬盘/闪存。

所以CPU和固态盘/闪存之间增加的内存是用于大量计算时的缓冲区。

输写输出接口是用于挂接输写设备、输出设备,只是在单片机内部计算不做输出是没有什么用途的,必需输出控制一些设备或者显示出来才行。输写接口就是我们去控制单片机或者单片机检测一些东西预留的接口。

以上我们能够知道,单片机入门的重点:

·了解闪存是怎么样存储程序和数据的

·CPU是怎么样调入调出数据进行运算的

·内存的数据是怎么样存取的

·输写输出接口怎么样控制的

8b06b41e6002dd81acd2ef337b49a390.png

上一节我们点亮LED灯,大局部都觉得简略,其次我们一直学单片机编程、硬件电路,有心人会觉得总是浮在空中,现实中就是把复杂问题简略化。

只有我们能够理清点亮LED这段程序的流程,一级级的深层下去一直到硬件电路是怎么样支撑这一行程序的,那么立刻就对嵌入式软硬件有了深层的了解。

我们大局部人怎么学的?

知其然不知其所以然,以为懂了,其次学会了控制LED,其次控制三极管,再去钻研串口,但对内部原理不去深究,一旦出错,就不会排查,假如长时长的攻克不了问题,就成了从入门到放弃。

千鸟在林不如一鸟在手,我们就以LED点亮为例深层程序与硬件内部彻底学通它。其次你的程序框架和硬件框架就能够建设起来,再进修会有如神助。

用什么符号不重要,用什么句子不重要,重要的是你用它们做到了什么!

某些人自称为“程序猿”,现实中上在他们的领域,角色定位非常的高大上,这帮人现实中是在做造人的工程。女娲娘娘的名讳自然要尊重的,所以程序员真实的代号应该是"程序蛙"。

为什么叫做“程序蛙”?

df8fa51dff5aaddba2608980d794ee17.png

以上图片从这里来

程序蛙会造人,我们来看下面一段最基本程序。

setup_init() //初始设置 只能执行一次

{

  人出生设定

  黑头发

  黄皮肤

  黑眼睛

  两只手

  两只耳朵

  两条腿

  男

}

loop() //进入高档小盒前的循环 重复执行

{

  吃喝拉撒睡

  行动坐卧走

  没事泡妹子

  临时抱佛脚

}

这样我就用程序造了个人出来。游戏里面的人物就是程序员造的,能跑能闹能砍人,如现实我们一样,不过我们是吃五谷杂粮保持loop(),他们要耗费电能。

我们proteus仿真程序也是控制了一种生物,这种生物名字就是单片机(MCU)。

/* Main.ino file generated by New Project wizard

 * Main.ino 文件通过一个新工程向导生成

 * Created: 周三 1月 1 2020

 * 创建日期:2020/1/1 星期三

 * Processor: Arduino Uno

 * 处理器: Arduino Uno

 * Compiler: Arduino AVR (Proteus)

 * 编译器: Arduino AVR (Proteus)

 */

int led=13; //创建一个整型变量,名字led,然后让它等于13.

void setup() //初始化函数,大括号内部写初始化代码

 { // put your setup code here, to run once:

   //输入你的初始化代码在这里,仅运行一次:

 pinMode(led,OUTPUT); //设置单片机的13端口(led口)为输出模式

 digitalWrite(led, HIGH); //使单片机13端口输出高电平

 }

void loop() //这个无限循环函数 写循环的代码 此次未用

 { // put your main code here, to run repeatedly:

   //主要的代码写在这里,循环执行

 }

上面这个程序就是我们上一节拿来控制LED的。此时是不是有感觉了。 把单片机看成一个人,led看成手电筒,我们程序完成的现实中就是人控制手电筒翻开的过程。

此时我们深层程序内部去了解...

int led=13;

led 是一个变量,那么变量是什么?

此时我们回顾小学知识:) 总共有4个苹果,两个小朋友分,你用来2个,还剩几个? 总共有4个苹果,两个小朋友分,你用来1个,还剩几个?

△+2=4; △=4-2=2; △+1=4; △=4-1=3;

△在这里代表还剩下几个苹果,问题变化了,这个值也变了。 到了初中、高中,我们还是运用 x y 代替△。 到了大学,我们要明白任何符号都能够代替△,也就是剩下几个苹果。

我们一般把一个未知量的公式叫做一元函数 x+1=3 两个的叫做二元函数 x+y=3

变量现实中就是一个中间计算过程的替代符号。

为了计算方便,讲解方便,隐藏机密,我们须要变量。

int led 我们找了led这个符号,来代表整数类型的变量。

整数类型? 继续温习小学知识,这个其实也挺重要的,大局部人同学毕竟还是须要进行下一代造就的:)

7cd11e6162ee202088897d74c1ab3618.png

我们看科幻电影,机器人已经能到达人的智力,但现实是还差很远,一个简略整数问题,假如不给它明确定义好,它就会计算出错,例如怎么样让计算机确定整数的范围,加减乘除之后是不是超过计算才能了?

范围从-100 ~ 0 ~ +100 还是-255 ~ 0 ~ +255 这是个大问题 我们看到 int led=13 这一句,int在不同容量的计算机中代表的整数数量是不一样的。

整型数依照位数划分,能够分为8位、16位、32位、64位等。其表示的范围如下。

整型数 范围

int8 -128 ~ 127

uint8 0 ~ 256

int16 -32768 ~ 32767 (3万多)

uint16 0 ~ 65535 (6万多)

int32 -2147483648 ~ 2147483647 (21亿多)

uint32 0 ~ 4294967295 (42亿多)

int64 -9223372036854775808 ~ 9223372036854775807 (922亿亿多)

uint64 0 ~ 18446744073709551615 (1844亿亿多)

我们写一个单片机程序时,要明确定义变量类型,现实中上不同的编译器,不同的计算机,int代表的范围是不一样的,一定要特别注意此问题,所以此时一般用int8 int32 明确代替int。 另外这个也不是越大越好,你用一个变量来代表99乘法表的结果。int64 就属于宏大的浪费,用uint8 这个整数类型就能够。由于你每建设一个变量,现实中必然会占用单片机的一局部存储空间,当用了大数的变量,空间很容易就会被占满了,其他程序就没地方写了。

除了注释和已经固化的硬件指令,所有我们用软件初始编写程序,每个字符,每个语句,每个变量,每个指令都占用存储器空间,所以资源是有限的,所以写程序特别是单片机程序一定秉承简洁够用清晰的原则。

上面一段不了解没关系,此时我们看计算机怎么把int led=13执行的。

为什么说复杂问题简略化,看起来简略int led=13; 假如深究你可能碰到以下问题:

·[ ? ] 二进制是什么?怎么表示?

·[ ? ] 十六进制是什么?怎么表示?

·[ ? ] 二进制、十进制、十六进制怎么互相转换?

·[ ? ] 汇编语言是什么?反汇编?

·[ ? ] 机器指令是什么?

·[ ? ] 寄存器是什么?

·[ ? ] 堆栈是什么?

·[ ? ] 内存是什么?

·[ ? ] 闪存是什么?

·[ ? ] EEPROM是什么?

·[ ? ] C语言语句与汇编语言怎么样转换的?

·[ ? ] 汇编语言与机器指令怎么样对应的?

·[ ? ] 机器指令怎样存储在闪存区域的?

·[ ? ] ......

看起来上面挺复杂的,但是我们把问题拆解出来一个一个搞明白就不难, 另外这些知识是一劳永逸的,学会一次,以后就是反复用的问题。

有时候看起来难的学法其实是容易的,总是浅尝即止的进修方法恰恰是给自己挖坑。

先来感受下,明确复杂问题了解的太简略了,我们是怎样飘起来的,其次没法双脚着地的进修:)

8b82d45c5a7dbde9533f3ce5ef84ba08.png

对照上面的问题自问下你能搞懂几个问号,图中的A、B是怎么样一一对应,那个是地址,那个是数据?是怎样存进去的?是不是感觉到了复杂:)

知乎起名是向导,崇尚框架论,明确框架,我们再进修有了方向才能做到有的放矢。

学单片机与学射箭其实也没什么差别。

有的放矢,的就是宗旨(箭靶),支靶、弯弓、射箭是流程。怎么样射箭是方法。有弓箭是条件,箭靶多大,多大的弓是规范/规则。

1b4a4c43ba1c581b2ade00f1adcd6922.png

以上框架可代用于大部分场合。

2834362e581f62f6bd072495697e3860.pngf7f86e312a259a90f214db56636cc86e.pngf7105d8d22228c04982c22309c252653.png

声明:

想要学习单片机的朋友 ,做毕业设计的同学,关注我们,口令小哥,与导师一起学习成长,共同进步,还有更多资料领取。

说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~

-END-

*本文系网络转载,版权归原作者所有,如有侵权请联系删除

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

单片机一哥

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值