3-《电子入门趣谈》第一章_一切从单片机开始-1.2赋予单片机生命

2019-04-15 15:27发布

data/attach/1904/rppcy36ml2jga3ho2qet5apak3kx970k.jpgdata/attach/1904/t7ecdoxgdw67pwjgfhtrltutcy4qlbsl.jpgdata/attach/1904/70phcfx24i0cag8tetfa792wzccijpnx.jpgdata/attach/1904/iy97er06wdsd1xe51ocfdwln1dpqaczq.jpgdata/attach/1904/dt5ne8ospmny9h9njdvaj8ktb647fxlz.jpgdata/attach/1904/47e7toqzdcz9uryvzew4p06strlpbxg4.jpgdata/attach/1904/ihurxpvziuj91ay2mqibrnbd70sli9s7.jpgdata/attach/1904/ecrt9lczn375ay4l2rtda4ziuqa25m15.jpgdata/attach/1904/mh4o257hjhrlgkoeb7wxaeftk1o90ry8.jpgdata/attach/1904/51wszzkwuad3cptwzpcjks9k4s5quk3i.jpgdata/attach/1904/ijm38ya9ns7xgpzek1tt2bj9ax2jd12p.jpgdata/attach/1904/9z162sgldxl0ja2z85jjosliz6b0deyz.jpgdata/attach/1904/922td2k494c2zqte926eezd7qd51zolw.jpg     发现了一个问题,需要请教CSDN的老博主们了。就是在上传文章的时候,我是直接从word里复制过来的,但是悲催的是复制过来的格式就乱了,基本上首行缩进全都米有了,需要重新敲。还有就是图片根本复制不过来,需要一张一张的上传进来,巨费时间,挺麻烦的。不知道各位老博主们有没有什么好的解决办法没?     另外我要为自己的博客做一个广告啦:我会尽量在一个月内把所有《电子入门趣谈》的内容更完,然后会把主要精力放在《Android驱动程序开发实例精讲》的更新上。希望能得到大家的支持!~_~ 1.2 赋予单片机生命    这一节,我们先来设个坛做个法,给单片机招个魂,让它活起来! 1.2.1 单片机最小系统
51 最小系统电路图                                  51用万用板手焊出来的最小系统         利用PCB制作的最小系统       所谓单丝不成线,孤木不成林。一个单片机再怎么牛气,也得给它配备上一些必要的外围电路它才能活起来,也就是需要给单片机搭建一个能够正常工作的最小系统它才能正常工作。如上图所示。 单片机通常插在底座上,要注意的是单片机的摆放位置,千万不要头脚颠倒,VCC接成了GND,后果会不堪设想的!               以下是最小系统各模块的一些说明。 (1)电源     单片机是个电器,人干活要吃饭,单片机干活要吃电。单片机的供电电源通常都会有一个供电范围,比如2V~7V,常用到的经典电源大小有5V和3.3V。51单片机电源就是5V,在电脑上调试时可以由USB口或电源线供电,真正工作时要外加5V电源,至于你是用电池、开关电源还是接个什么东西,随便啦。JM60型号的飞思卡尔单片机供电也是5V,而QG8则是3.3V。     电源接在单片机右上角的VCC管脚上,相对的是左下角的地GND管脚。正常情况下,开发板上所有芯片,包括单片机的供电都是由电源提供,所有芯片负责供电的管脚都与单片机的VCC管脚相连。     上图中的Header是一个双管脚排针接头。外界电源插在上面后,系统上所有标注VCC的地方就会通电了。细心的话您还会发现电源和地之间还加了一个0.1uf的小电容,作用是防止电源受干扰发生什么突变之类的,这也是电容的一个妙用。关于电容的其他妙用,大家请参照本书第二章。 (2)晶振     如图所示,单片机的XTAL1和XTAL2管脚连接的是单片机的晶振系统。     作者本人非常喜欢“晶振”这个名字,相比全称“石英晶体振荡器”听起来更有一点文艺范,而且它长得也挺可爱的,下图是一些常见晶振的样子。晶振就是单片机的心脏,由于逆压电效应,在交变电压的作用下产生机械震荡,当外加电压频率达到晶体固有频率后产生谐振,就好像人的心脏在“噗噗”地跳动,大家可以这样理解,晶振每振一下,单片机就进行一次运算,一般来说晶振频率越高,单片机越牛气,就类似于电脑的主频。晶振常用频率比较多,大家百度即可,51开发板上有11.0592M和12M常用的两种晶振,但是51单片机自动12分频(跳12下计一次),因此工作频率约为1M,飞思卡尔单片机虽然晶振是8M,不再分频,工作频率实实在在的就是8M。相比之下还是叹一声,飞思卡尔厉害呀。                          还有一点,飞思卡尔的晶振在单片机内部,可别看51单片机体积大,它的内部没有晶振,它的心脏是长在体外的!像上图的最小系统图,必须要在体外给51单片机配一个晶振它才能正常工作。 尽管飞思卡尔单片机有内部晶振,大家仍然可以外接一个其他频率的晶振,通过编程是可以实现内外部或者外部两个晶振的切换的,以后等大家都成了高富帅,科技上的小霸王,还是建议大家购买内部就集成晶振的单片机,因为稳定性高啊。   (3)下载口     远看像个单片机,近看还是单片机,你说它是单片机,但它就是没程序。 虽然单片机的“智慧”有时足以让人脑自愧不如,但是没有程序,它就是废物一个。而程序即使再好,下载不到单片机里那也是白瞎。通过下载口我们就可以把电脑里的程序下载进去。另外有的下载口还可以顺道供个电。 您可能会纳闷儿,程序是从单片机的哪个管脚进去的呢?需要说明的是,如果是STC单片机,有ISP功能,只要连P3.0和P3.1两根线,用MAX232和电脑串口连起来就能下载程序。但如果是一般的单片机就要连P0、P2、P3口。其中两个作地址线,一个作数据线,还要连几根辅助线。因此没有ISP功能的单片机要下载程序需要专门的编程器。程序下载器和专门的下载软件都是单片机开发商配送的,初学者也没有必要深究。 (4)复位电路     所谓复位也就是传统意义上的“恢复出厂设置”,好多时候比如单片机程序跑乱了,编程者就得需要让单片机复位一下,让单片机重新开始运行程序。51单片机的RST管脚接高电平时单片机就会复位,如上图所示的复位电路,按下S1时就会使单片机复位。 (5)P0口排阻     在51单片机的P0口上要加一个排阻,而且还要通电源。乍一看也许您不太明白为啥要这样做,P1~P3口为什么没加。这和单片机内部结构有一定关系,P1~P3的IO口内部都是如下图所示的一个三极管控制的集电极电路,当b为高电平时候,三极管导通(三极管的开关作用请参看第二章),P1~P3口的IO口实际就会输出低电平,当b为低电平时,三极管截止,IO口此时又会直接通过一个限流电阻R和电源Vcc相连,输出高电平,一般来说R很大,所以单片机的输出电流很小,通常情况下连个灯都点不亮,这个特点要记住,后面设计电路的时候会用到。     但是P0口比较特殊,它是“集电极开路”,如下图中间的图所示,集电极上并没有接任何东西,这样一来即使三极管截止,P0的I/O口也仅仅是连接了一根悬空的导线而已,没有任何作用。假如我还想让单片机P0口正常的输出高电平,该咋办?就得像下图所示自己在外面配一个“上拉电阻”了。排阻配电源其实就是这么个作用。也许您又会问,为啥偏偏P0口这么矫情,当然有它的道理,只不过涉及到D触发器、多路开关、与门输出等数字电子技术的相关理论,目前对于大家来说也没必要研究这么细,知道P0口的这个特点就足矣了。           (6)供电系统。     一般来说,给单片机提供约5V电源,它就可以正常工作了。所以Header接头直接接一个电池组即可,但是有一点需要说明的是,这只是单片机工作的一个最小系统,所以我们没有给它提供稳压结构,在一个完整且稳定的系统中,稳压结构是非常必要的。所谓稳压就是让VCC处在一个定值上,单片机在工作了一段时间之后,电池组肯定要耗电,它提供的电压就会降低,电压不足对某些芯片来说比杀了他们还难受,又或者,如果你要做一台小车,电机需要9~12V的电源,而单片机一类的芯片只需要5V,电压过足对于某些芯片来说也不如直接杀了他们(而电压过足的情况又最常见),咋办?这时候就需要让12V的大电压通过一个稳压芯片然后输出一个稳定的5V,再给芯片供电就可以了。常见的稳压芯片有LM78或79系列,以LM7805为例,它的电路原理图如下图所示:   1.2.2 开发环境      正如VC++要在VC环境中编程一样,单片机也有自己的编程环境,51单片机编程用Keil,AVR单片机用ICC_AVR或者IAR_AVR,凌阳单片机FortisIDE,飞思卡尔单片机CodeWarrior等,下图是Keil的编程环境,Keil软件是一个基于windows的开发平台,它能为多款单片机进行编程开发,它集成了C编译器、宏汇编器、链接/重定位器、HEX文件转换工具等模块,它的界面环境和操作方式都非常好,它的粉丝数量全世界数不胜数。接下来我们跟着下面的步骤说明一下该软件的开发过程。 第一步:新建工程。     打开Keil软件,选择菜单栏中的“Project”——“New uVision Project”输入工程名称,保存到指定文件夹。弹出“Select Device for Target”对话框,选择需要开发的单片机型号,单击确定,如下图所示。     若弹出询问是否复制标准8051 Startup Code到当前目录,单击“是”。 第二步:修改工程设置。     选择“Project”——“Optionsfor Target”弹出工程设置对话框。大部分的开发环境设置选项都在这个工程设置对话框的选项卡中。 (1)“Device”选项卡主要用于在器件库中选择使用的器件型号。也可以对器件属性进行修改。 (2)“Target”选项卡主要用于设置目标CPU的存储器特性以及时钟频率。比如单片机的外接晶振频率为12MHz,就将Xtal(MHz)那改成12.0即可。 (3)“Output”选项卡主要用于设置开发环境的输出文件选项。这里一定要注意把“Creat HEX File”复选框的勾打上,编译的时候就会生成HEX文件了,这个文件可以直接下载到单片机里。 (4)“Listing”选项卡主要用于设置开发环境生成的列表文件。 (5)“C51(CX51)”选项卡主要用于进行条件编译、代码优化等级、定义预处理符号以及其他一些编译器设置。 (6)“A51(AX51)”选项卡主要用于设置宏预处理器、条件汇编等。 (7)“LX51 Locate”选项卡主要用于设置选定CPU链接与重定位选项。 (8)“LX51(Lx51)Misc”选项卡用于设置BL51(Lx51)的其他选项。 (9)“Debug”选项卡主要用于调试选项的设置。 (10)“Utilities”选项卡主要用于闪速存储器烧写工具的选项与设置。     这10个选项卡除了第2项和第3项需要按情况稍微改动一下设置之外,其他选项卡中先保持默认即可。 第三步:创建源代码并加入到工程     单击“File”——“New…”创建一个源文件,另存为后缀名为“.c”的文件。在开发环境左侧的“Project”窗口中“Source Group 1”文件夹上单击右键,选择“Add Files toGroup ‘Source Group 1’”,找到之前存好的“.c”文件,单击“Add”按钮完成添加。 第四步:编译与链接程序     编写好了程序代码之后,单击按钮,编译当前文件到目标文件;单击按钮,编译改动的源文件并链接当前工程中的所有OBJ文件,生成绝对目标文件;单击按钮,重新编译改动的源文件并重新链接当前工程中的所有OBJ文件。说实话我们用了这么多年Keil,一直不太明白按钮到底起到一个什么作用?通常情况下,写好程序后只需要单击一次按钮即可,它能把编译(查错)和链接一起完成并且能够生成HEX文件。 软件下方的“Build Output Window”将输出编译和链接信息,如编译是否出错,链接是否完成等。 第五步:下载程序与调试     51单片机的程序下载根据厂商提供的下载器的不同可能会有不同的设置,通常情况下安装一个对应的驱动,配合一个提供的软件,用下载器把单片机开发板和电脑连起来就可以下载程序了。下图是众多下载软件当中的其中一个,其实都差不多,主要包括设置串口号,设置波特率等。     有的安装完驱动后还要在“Debug”选项卡中进行相关设置,高级一些的还具有在线调试功能,通过单击按钮,或从菜单栏中单击“Debug”——“Start/Stop Debug Session”便可进入在线调试状态,咱不止一次说过,在线调试能力非常重要,用户可以通过软件单步运行程序,可以在程序中设置断点,可以在线监视变量、查看存储空间、观察外设状态等。     编程语言有汇编语言和C语言两种,由于C语言通俗易懂,现在的编程多用C语言,在涉及到一些很神奇的寄存器的时候会用到MOV、CLR之类的汇编语句。有人说,我们学的是C++不是C啊,但是一来呢单片机编程用的C很好掌握,上文也提到了C和C++的两点区别,不怕没有学过C,二来C++的精髓即“类”的功能,在单片机里我们基本不会涉及到,所以对C语言编程,不要有太多的担心。     有些同学会问,请问编好的程序下载到单片机里,那程序存在单片机的哪个部位啊?问得好。单片机里的存储空间就是一个一个的字节,可以理解成一个个的小抽屉,这些小抽屉分两类,一类叫ROM(Read Only Memory只读存储器),用于存放指令代码和一些固定数值,程序运行后不可改动,单片机断电再给电后数据不会丢失,单片机写好的代码一般都会下载到这里;还有一类叫RAM(Ramdom Access Memory随机存取存储器),读取速度相当快,用于程序运行中数据的随机存取,比如一些变量,掉电后数据消失,咱们通常所说的电脑内存,都是指的RAM。
未完待续。。。