完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
1.1 单片机概述
1.1.1 啥叫单片机 您有时候也许会听到周围的大神们常常说道这样的字眼,像什么“单片机”、“单片机开发板”、“单片机学习板”之类的,我第一次听到“单片机”三个字的时候曾天真的以为单片机就是一台很高深莫测的机器,也许长得很像一辆卡丁车,也许就像一部手机吧。但是很快就发现了自己被骗了,其实“单片机”还不如直接叫“单片”,因为他确确实实的就是一个孤单的小芯片。 那时候我经常怀着一份好奇,到底单片机是个什么东西,于是免不了的就往图书馆跑跑,结果不要紧,一眼望去《单片机基础教程》《51单片机接口技术》《单片机原理》《51单片机设计实例》。。。我勒个去,满满的一屋子都是关于单片机的书,随便的抽出这么几本,发现不是讲一些基本理论让人看了一头雾水,就是摆一堆乱七八糟的电路原理图不知所云的。唉,就没有一本通俗点的书告诉我单片机到底是个啥吗? 好吧,下面慢慢地告诉你,它到底是个啥。 根据经验,姑且以为初入门的亲们往往有着两个误区,这两个误区说大不大说小不小,但是当亲们成为大神之后再回看当年这两个错误,就会哭笑不得。来看看这两个想法你有没有过呢? 1.单片机是一块板子,上面有好多的芯片。 2.各种芯片工作是纯靠板子上的电路完成的。 这两个问题是不是有点似曾相识呢?如果没有,那恭喜你,你已经比很多学生入门的时候要聪明很多啦~ 首先第一个问题,第一段已经说了,单片机就是一个孤单的芯片,那块大大的电路板叫做开发板,上面除了单片机(最小系统电路),还有各种芯片、数码管、蜂鸣器、继电器巴拉巴拉的。虽然单片机芯片的样式、大小不同,什么直插式啦,贴片式啦,什么20引脚、40引脚啦,那都是浮云,重点是单片机就是一个片,而他的伟大之处正在于此,一个庞大的检测和控制的核心,往往就是这小小的一个片儿。据知情人爆料,一个飞思卡尔单片机就有着控制一架波音747的能力,是不是有一种“哇塞”的感觉呢? 那么第二个问题,一个功能到底是怎么实现的呢?肯定不是纯电路结构啦,其实我们可以简单地理解为,单片机就是一个大脑,它通过识别和控制引脚电平的变化来工作。我们结合下图一起来看一下。 那是一个电阻,串联着一个发光二极管,您可以把它理解成一个灯泡,现在我想把这个灯泡点亮,需要怎么办?用打火机吗?肯定不行!只要稍微懂点电子知识的大家都知道,只需要在右面加一个正电源,比如5V,左端加一个0电压,俗称“地”,OK,一个点灯的项目就完成了。 接下来我对上图做一个改装。把“地”去掉,取而代之的是一块长方形芯片,再扩展成如下图所示的样子。 没错,中间的那个长方形的东西就叫单片机,假如你想让灯L亮起来,只需要让P1.4那个地方(学名叫管脚)作用等同于“地”即可,你想让灯L灭掉只需要让P1.4管脚作用等同于“+5V”电源,而这些我们都可以通过编写程序来实现,具体怎么编写程序这是后话暂且不表。各位再看P1.0管脚,目前的情况是,P1.0管脚通过了一个电阻直接连到了+5V电源,如果我这个时候按下了按键S,此时P1.0管脚会被短路直接接地,这个特性很有意思,单片机的P1.0管脚可以通过感应自身是高电平(高电平是数字电子技术中的术语,在上图中就是代表+5V电源电压)还是低电平(同高电平一个道理,在上图中代表“地”)来判断您是否按下了S,有了这个功能我就可以实现一个很有生活气息的小项目:通过按键控制一个灯的亮灭,当P1.0检测到有按键按下时就让P1.4转换一个电平状态,从而达到控制灯泡L亮灭的目的。这就是一个简单的测量与控制系统。很多人在没学习单片机的时候可能会认为,按键部位通过一条线连接到P1.4处,然后按下按键灯就会亮。不知道你有没有这样认为过呢?这样虽然从原理图上看起来是没错的,但是单片机就悲催的毫无作用了……所以说,单片机就是可以控制一个引脚输出高/低电平(电源电压或者地)并可以检测一个引脚输入了何种电平的芯片。要实现这些功能,就需要我们亲自动手编写程序并且将程序送给单片机来实现,单片机就是凭着可以由用户来编写智能程序来实现各种功能而笑傲整个电子江湖,臭美去吧! 1.1.2 学习单片机 为啥要学? 单片机重要之处在于它的开发目的是将计算机的应用推广到智能仪表、数据采集、自动测试、工业自动化领域中,让非计算机专业的工程技术人员能容易地掌握计算机应用系统的设计、组装和调试。 与通用计算机如PC机相比,单片机结构简单,只要外加一些扩展电路及必要的通道接口,就可以构成各种计算机应用系统。 再说点接点地气的话,就像一开始提到的那样,单片机是电子爱好者初学者们入门的一个不二捷径,而且,相当的“不二”! 怎么学? 不编程永远学不会单片机! 单片机是门学问呀,怎么学?想做题海战术?呃,您老给出道题看看。检验出真知,学单片机只能靠实践。怎么实践?编程! 就像人体会检测身体状况并做出反应一样,单片机功能也是如此。你的胃空了,你的大脑会识别传来的信号,然后输出“饿”的信号让你察觉。相似的,按键按下,某个管脚的电平置低,单片机识别电平变化并操纵连接LED的管脚置低电平。大脑有一套天生的系统,会识别,知道识别到信号变化后进行怎样的操作。但是单片机怎么知道如何做呢?那就是靠你下载到里面的程序啦~ 胃空了大脑会让你感觉饿,腿抽筋了大脑会让你觉得疼。那开发板上每个芯片也像身体的不同器官,有不同的信号变化和对应的不同操作。因此你要学习对不同芯片的程序的编写。 编程说难也难,说容易也容易,编程的根本目的就在于控制单片机,由您来给单片机发口令,让它执行各种任务,比如你对它喊“让灯亮!”,它就老老实实的让灯亮,再对它喊“睡大觉”,它就得心甘情愿的去睡大觉!只不过我们对单片机发口令的时候不是真的靠“喊”,而是靠“写”,写它能认识的文字。懂点单片机的发烧友应该都有这个体会,编程有一个经常要用到的关键东西:寄存器。 寄存器是一个神奇的东西,顾名思义,寄存器,寄存器,寄存东西的各种神器,你可以把单片机理解成一个大盒子,而寄存器就是这个大盒子中的一个个排列整齐的小盒子,小盒子里当然可以存东西,寄存器里面就是存放口令的地方,一个寄存器在单片机里对应一种功能,您对单片机编写程序基本上都要对寄存器进行操作,它像一个个的箱子。小盒子里面还可以有小小盒子,比如一个小盒子又分为8个小小盒,寄存器也是一样的,有的有8个空,有的有16个,通过往里面放1或者0,单片机就会改变它的工作状态。比如在飞思卡尔单片机里,向PTB管脚的方向寄存器PTBDD里放1,管脚就成为输出管脚,放0则成为输入管脚。在AD转换的程序中,寄存器的值还可以控制时钟分频、触发方式、中断开关等,有一个老师这样跟我们说“单片机编程就是玩寄存器”,谦虚的我们一般会接上一句“编程就是被寄存器玩”,都无所谓啦。具体如何编程,且听下文分解。 1.1.3 世界上有多少种单片机 要问世界上有多少种单片机,这个问题恐怕和问世界上有多少种手机是一个意思,单片机多的数不胜数,各自都有各自的功能特点。比较主流的单片机类型有以下几种。 1、Motorola单片机 Motorola公司曾经是世界上最大的单片机生产厂商,产品覆盖8位、16位、32位单片机领域,现在Motorola公司的单片机行业已经由Freescale公司接管。我们平时接触到的QG8 、JM60等单片机就是出自Freescale旗下。Motorola单片机的运行速度快、高频噪声低、抗干扰能力强,特别适合在工业领域或其他恶劣环境下运行。M-Core架构的32位单片机在性能和功耗方面甚至超过了ARM7. 2、Microchip单片机 在8位单片机领域,Microchip公司是市场份额增长最快的单片机生产厂商,其CPU率先采用RISC结构,运行速度快,性价比也很高,适合用于生产量大、价格敏感、档次一般的产品。 3、Intel单片机 同胞们,我们通常所说的51单片机实际上有STC-51和AT89S51两种,其中著名的STC-51系列单片机就是STC公司以Intel公司在1980年推出的8位单片机MCS-51内核生产的,它能够利用串口来直接烧写程序所以被广泛使用,因为是80年诞生的所以这一系列中最著名的单片机就起其名曰“8051”。后来Intel公司又推出了16位单片机,性能更强,适用于要求较高的场合。 4、三星单片机 三星公司以生产存储器芯片著称,但在存储器市场供大于求的形势下,它也涉足参与单片机行业的竞争了。三星公司里比较有名的单片机有KS51和KS57系列4位单片机,KS86和KS88系列8位单片机,KS17系列16位单片机和KS32系列32位单片机。三星公司走的思路是引进发达技术,生产与之兼容的单片机产品,以价格优势取胜。比如在4位单片机上采用NEC的技术,8位单片机上引进Zilog公司的Z8技术,32位单片机购买ARM7内核,还有DEC、东芝公司的技术等。三星公司的裸片具有非常强的竞争力。 5、Zilog单片机 Zilog公司的旗舰产片就是Z8单片机了,它采用多累加器结构,有较强的中断处理能力,开发工具物美价廉。单片机以18引脚封装为主,主要面向低端应用场合。 6、Atmel单片机 同胞们,不得不提的AT89S51单片机就诞生于Atmel公司,说51单片机的粉丝量居世界首位一点都不为过,尤其在学生领域里的受欢迎程度就更不用提了。Atmel公司是世界上最著名的高性能、低功耗、非易失性存储器和数字集成电路的一流半导体生产公司。它最令人瞩目的就是它的EEPROM电可擦除技术和闪存(Flash,也就是您手中的优盘)技术等。Atmel公司的单片机独具特色而又性能优越,它在计算机外围设备、通信设备、自动化、工业控制、宇航设备、仪器仪表和各种消费类产品中有着广泛的应用前景,其生产的AT90系列是增强型RSIC架构、内含闪速存储器的单片机,它有一个和51一样如雷贯耳名字——AVR。目前AT89S51的生命力依然旺盛,目测这种51热还会一直延续下去。 7、NEC单片机 NEC单片机自成体系,以78K系列8位单片机生产量最高,它的发展思路主要是服务大客户,并投入相当大的技术力量为大客户开发产品。比如九安公司电子血压计的主要CPU就基于NEC平台。 8、华邦单片机 华邦单片机也属于8051内核类单片机,它们的W78系列与标准的8051兼容,W77为增强型51系列,对8051的时序作了改进,在同样的时钟频率下,其CPU速度提升了2.5倍,更重要的是具有了在线系统编程(In-System Programming,ISP)的功能,这种能力对程序调试来说具有划时代的意义。 9. 等等等等。。。。 选择单片机和选择手机的道理也一样,看你需要实现什么功能了,有的单片机没什么功能,有的就集成了AD转换、I2C、SPI等模块,如果只是控制个灯泡之类的,51单片机足够用了,如果需要测量信号或者需要和其他芯片通信那就选择带有AD转换和通信功能的单片机,下图是一些常见单片机的实物展示图。样子其实都差不多,长得跟小蜈蚣似的。 再引申一下。刚才说的是单片机控制一个灯,其实单片机不止能控制灯,它能控制很多电子器件,如LED数码管、蜂鸣器、液晶、继电器、还有各种数字的或者模拟的芯片等等等等。我们将这些器件都和单片机连到一起然后焊接到一块电路板上,这就构成了一个单片机开发板,或者又叫单片机学习板,目前市场上流行着很多单片机学习板供初学者学习,他们的样子大都大同小异,类似于下图。 在国内,目前最流行的单片机有51单片机,AVR单片机,飞思卡尔单片机等等,不用担心不同的单片机使用起来会有很大的不同,其实不同的单片机就像不同的手机一样,最简单的手机只能打电话,发短信,后来的手机可以照相,上网,听音乐,你会使用一款手机就应该也会很快入手其他款手机,这跟单片机是一样的。它并不神秘,记住“我们是用单片机。不是做单片机”。后文中讲到单片机编程时,基本上都是借助于51单片机,需要说明的是目前比较流行的AT89S52、AT89C52和STC89C52都是51内核单片机,AT89S52除了性能提升和具有ISP下载功能外,他们没有本质区别、驱动能力也相当接近,所以大家约定俗成的将它们统称为“51单片机”。 跟大家分享一个小技巧,有时候我们不想花钱买芯片怎么办?这就需要和生产厂家申请样片了,登陆芯片公司的网址一般都会有申请样片的网页,试着填写一下,往往一个月之内就能收到样片。 1.1.4 要掌握的基础知识 (1)编程语言 关于使用的编程语言,单片机编程语言高手会使用汇编语言,就是比较高深那种,新手一般使用C语言就足够了,学习C语言请到网上找一些C语言编程的入门书稍微看看即可,一般教学视频里都会详细教给你。 如果您学过C++那就会给你省很多时间,只不过单片机中的C语言和您在电脑上用C++编程有两点不同之处,一定要注意。 ①C语言中定义变量一定要在函数的最前面定义,如 Void main() void main() { { int a; //正确 … … char b; int a; //这样就错误,是不是挺矫情的? … … char b; } } ②单片机程序最后一定要进入一个死循环。 单片机死循环的理念和我们在电脑上利用VC6.0编写程序时的理念大相径庭。因为在电脑上CPU不允许你做死循环,那是大忌,电脑可不想让自己处于死循环的类死机状态。但是单片机就不同了,它一定要进入到一个死循环里,举一个例子,比如我们用单片机来编写一个家用热水器的程序,功能是这样: 当水的温度低于80°的时候,热水器处于加热状态。 当水的温度达到100°的时候,热水器处于保温状态。 单片机需要做的就是时时刻刻的检测水的温度,根据水的温度来调控内部加热器的工作状态,那问题就来了,假如单片机的程序和电脑上C++一样也是运行一遍就完的话,它只会检测一遍水的温度,以后水的温度无论变成什么样跟它都没有任何关系了,听着似乎很悲壮的一个爱情故事。这个时候我们就需要将“检测水温”的程序放到死循环里,让他不停的检测,一遍又一遍的做出判断,然后做出相应的控制,不用担心它会累死,这是上天赋予它的基本使命,就算累死,也得干! 常用死循环程序 for( ; ; ){… //这里面写主程序 …}或 while(1){… //这里面写主程序 …} (2)位和字节、数制 位和字节在单片机里是特别重要的两个概念。 位(bit):指的是取值只能为0或1的一个二进制数值位。记作b 字节(byte):由8位二进制位组成,通常用作计算存储容量的单位。记作B。我们常说的B,K,M,G,T之间有如下的转换关系: K(kelo),1K=1024B=210 M(mega),1M=1024K=220 G(giga),1G=1024M=230 T(tera),1T=1024G=240 数制:数制也称计数制,是用一组固定的符号和统一的规则来表示数值的方法。单片机中的数制主要涉及10进制、2进制、16进制。编程的时候更多的是2进制和16进制之间的转换,3种数制之间的转换关系如下表所示: 10进制(默认数制) 2进制(声明方式0b或0B) 16进制(声明方式0x或0X) 之所以说位和字节的概念重要是因为它们和上文提到的“寄存器”息息相关,一个寄存器通常情况下就是一个字节(有的单片机一个寄存器是两个字节),一个字节对应8位,一个寄存器在单片机里都对应着一种功能指令,我们通过向寄存器里写二进制数来控制单片机。 明白了位、字节、数制的概念后再对寄存器举一个例子: 51单片机姓P1的管脚一共有8个,分别叫P1^0、P1^1、P1^2、P1^3……P1^7,我们想让P1^1、P1^3、P1^5、P1^7输出低电平,P1^0、P1^2、P1^4、P1^6输出高电平,则只需要向控制P1输出状态的寄存器“P1”中写二进制数0b01010101(0b代表后面的数为二进制数,8位字节最高位代表P1^7,最低位代表P1^0,1代表高电平,0代表低电平),编程的时候由于单片机只认16进制,所以写成C语言就像下面这个样子 P1=0x55; 对,就是这样一句简单的代码就能让单片机实现功能了。 未完待续。。。 |
|
|
|
只有小组成员才能发言,加入小组>>
2514 浏览 0 评论
1092浏览 2评论
703浏览 1评论
456浏览 0评论
200浏览 0评论
341浏览 0评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-24 22:20 , Processed in 1.314609 second(s), Total 81, Slave 62 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号