\\\插播一条:
今年整理了800多篇单片机单片机相关论文
论文制作思维导图
原理图 源代码 开题报告 正文 外文资料
想要的同学私信找我。
电子编程入门到工程师-重拾信心-单片机入门
本节写单片机一篇介绍,拭目以待,一定会有惊喜!
不入门的根本原因?
·复杂的问题复杂化,
·简化复杂问题,
·头脑模糊,没有框架,
·没头没尾像散沙。
劝退的单片机框架:
我们的单片机框架:
此时,个人和工业化领域PC、单片机、PLC是电子工程师接触最多的设备。
个人电脑(简称PC),此时的笔记本、台式机、平板电脑、智能手机都应该属于PC单片机应属于另一个序列。单片机/CPU作为核心,标准化、模块化、特化应用实际上是我们常说的PLC(大部分用于工业领域), PLC本节不讨论。
在现实中,单片机是类似于个人计算机的内存,cpu、将固态盘、输写输出接口简化功能集成到芯片中。
单片机的工作原理与个人计算机相似。
个人计算机CPU从固态盘/硬盘调入程序和数据进行计算,其次把计算结果存回固态盘/硬盘。
单片机CPU将程序和数据从闪存(程序存储器)转移到计算中,然后将计算结果存回闪存。
但在实战中发现CPU固态盘/硬盘/闪存速度跟不上,严重影响效率。
后来增加了内存器件,内存和CPU处理速度相同。程序和数据提前转移到内存中进行访问,最后在保存时写入固态盘/硬盘/闪存。
所以CPU用于大量计算时的缓冲区,增加固态盘/闪存之间的内存。
输出和写作输出接口用于连接输出和写作设备和输出设备,但在单片机内计算输出是没有用的。输出必须控制某些设备或显示。输出和写作接口是我们控制单片机或单片机检测某些东西预留的接口。
我们可以知道单片机入门的重点:
·了解闪存是如何存储程序和数据的
·CPU如何调出调出数据进行操作?
·如何获取内存数据?
·如何控制输写输出接口?
我们点亮了上一节LED灯,大部分感觉很简单,其次,我们一直在学习单片机编程,硬件电路,感兴趣的人会觉得总是浮在空中,现实是简化复杂的问题。
只有我们能理清亮点LED这个程序的过程,一级深入到硬件电路是如何支持这个程序的,然后立即对嵌入式软硬件有深入的了解。
我们大部分人是怎么学的?
不知道为什么,以为明白了,然后学会了控制LED,其次,控制三极管,然后研究串口,但不深入研究内部原理,一旦错误,就不会调查,如果长时间不能克服问题,就成为从入门到放弃。
千鸟在林中不如一鸟在手,我们就以LED以点亮为例,深度程序和硬件内部可以完全理解。其次,你的程序框架和硬件框架可以建立起来,然后学习就像上帝的帮助。
用什么符号不重要,用什么句子不重要,用它们做什么很重要!
有些人自称程序猿。事实上,在他们的领域,他们的角色定位非常高。这些人实际上正在做一个创造性的项目。女娲娘娘的名字自然应该得到尊重,所以程序员的真实代码应该是"程序蛙"。
为什么叫程序蛙?
从这里来看上图
程序蛙会造人下面最基本的程序。
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个,还剩几个? 总共有四个苹果,两个孩子分,你用一个,还剩多少?
△ 2=4; △=4-2=2; △ 1=4; △=4-1=3;
△这里还有几个苹果,问题变了,值也变了。 在初中和高中,我们仍然使用它 x y 代替△。 在大学里,我们应该明白任何符号都可以被替换△,也就是剩下的苹果。
我们通常称未知量公式为一元函数 x 1=3 两者称为二元函数 x y=3
变量实际上是中间计算过程的替代符号。
我们需要变量来计算、解释和隐藏秘密。
int led 我们找了led代表整数类型变量的符号。
整数类型? 继续复习小学知识其实很重要。毕竟大部分学生还是要做下一代:)
当我们看科幻电影时,机器人已经能够达到人们的智力,但现实还有很长的路要走。一个简单的整数问题,如果不明确定义,就会计算出错误,比如如何让计算机确定整数的范围,加减乘除是否超过计算能力?
范围从-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 -922337203854775808 ~ 9223372036854775807 (922亿亿多)
uint64 0 ~ 18446744073709551615 (1844亿亿多)
我们写一个单片机程序时,要明确定义变量类型,现实中上不同的编译器,不同的计算机,int代表的范围是不一样的,一定要特别注意此问题,所以此时一般用int8 int32 明确代替int。 另外这个也不是越大越好,你用一个变量来代表99乘法表的结果。int64 就属于宏大的浪费,用uint8 这个整数类型就能够。由于你每建设一个变量,现实中必然会占用单片机的一局部存储空间,当用了大数的变量,空间很容易就会被占满了,其他程序就没地方写了。
除了注释和已经固化的硬件指令,所有我们用软件初始编写程序,每个字符,每个语句,每个变量,每个指令都占用存储器空间,所以资源是有限的,所以写程序特别是单片机程序一定秉承简洁够用清晰的原则。
上面一段不了解没关系,此时我们看计算机怎么把int led=13执行的。
为什么说复杂问题简略化,看起来简略int led=13; 假如深究你可能碰到以下问题:
·[ ? ] 二进制是什么?怎么表示?
·[ ? ] 十六进制是什么?怎么表示?
·[ ? ] 二进制、十进制、十六进制怎么互相转换?
·[ ? ] 汇编语言是什么?反汇编?
·[ ? ] 机器指令是什么?
·[ ? ] 寄存器是什么?
·[ ? ] 堆栈是什么?
·[ ? ] 内存是什么?
·[ ? ] 闪存是什么?
·[ ? ] EEPROM是什么?
·[ ? ] C语言语句与汇编语言怎么样转换的?
·[ ? ] 汇编语言与机器指令怎么样对应的?
·[ ? ] 机器指令怎样存储在闪存区域的?
·[ ? ] ......
看起来上面挺复杂的,但是我们把问题拆解出来一个一个搞明白就不难, 另外这些知识是一劳永逸的,学会一次,以后就是反复用的问题。
有时候看起来难的学法其实是容易的,总是浅尝即止的进修方法恰恰是给自己挖坑。
先来感受下,明确复杂问题了解的太简略了,我们是怎样飘起来的,其次没法双脚着地的进修:)
对照上面的问题自问下你能搞懂几个问号,图中的A、B是怎么样一一对应,那个是地址,那个是数据?是怎样存进去的?是不是感觉到了复杂:)
知乎起名是向导,崇尚框架论,明确框架,我们再进修有了方向才能做到有的放矢。
学单片机与学射箭其实也没什么差别。
有的放矢,的就是宗旨(箭靶),支靶、弯弓、射箭是流程。怎么样射箭是方法。有弓箭是条件,箭靶多大,多大的弓是规范/规则。
以上框架可代用于大部分场合。
声明:
想要学习单片机的朋友 ,做毕业设计的同学,关注我们,口令小哥,与导师一起学习成长,共同进步,还有更多资料领取。
说了这么多,大家记得留意下方评论第一条(或者私信我)有干货~
-END-
*本文系网络转载,版权归原作者所有,如有侵权请联系删除