||
应友人之意,在此择抄、浅解单片机的种种,纯属个人见解,权作扫盲之用,看官若是业内人士,可跳过此篇,其中见解存有争义之处,也请予以周正:
单片机(single chip microcomputer)亦称单片微电脑或单片微型计算机,国际上统称为微控制器(microcontrollor, MCU,μC),就是把中央处理器CPU、随机存取存储器RAM、只读存储器ROM、输入/输出端口I/O等主要的计算机功能部件,都集成在一块集成电路芯片上,从而形成一部完整的微型计算机,换而言之,把微型计算机的所有功能部件都集成并封装在一块芯片内而构成一部超微型计算机,就称其为单片机,它是大规模集成电路技术发展的结晶。
简言之,一颗单片机呢,就如同我们家用的一台电脑,只不过相比而言,体积,功能就要小且少很多,且作用的对象也就大相径庭了,但内部的工作原理,组织架构却同出一辙,近年来慢慢渐行的部分嵌入式(后面会慢慢道来)系列单片机,其功能与普通的电脑已不相上比了;所以说,要了解单片机的工作原理并不难(当然并不赞成你拆开自家里的电脑来“研究”),只要你有些许的计算机原理、电子电路等相关方面的基础,且听我下回分解,,,,。不,是娓娓道来,一同前往揭开这单片机的神秘面纱!
随手捻来我们身边的种种物件,其实单片机的身影已到处可见,洗衣机,空调,MP3……,可以说,现如今,单片机已与我们的生活息息相关,纵观电子通讯、家用电器、消费类电子产品、工业控制等等,处处都有单片机的身影;业内现用到的单片机从字长方面来划分,可分为4位、8位、16位、32位4大类,其中前3类占据了单片机市场的主要份额,其产地也大致分为欧美系列,日系,台系列等,说起字长,就不得不提一下,计算机原理中的数进制转换,众所周知,当初计算机发展是依电子学发展而来,其运作的基础就是电平的高低,也就是二进制的0、1(吆),后人便于运作,将其扩充了八进制,十六进制以及通用的十进制,他们之间也都可以遵循一定的规则进行转换,如n个位长就代表是2的n次方,它表达的数字和处理的能力也就随着n的变大向上翻倍;这是题外话,但却是单片机中基础中的基础,了解了这些才有必要看下面的:
后人根据二进制的特点,模仿着电子学中相关的逻辑,把0、1可以发生的关系用AND(与),OR(或),NOT(非)及递进IOR(同或),XOR(异或)等来表达出来,并照着用一些虚拟的电路连接起来,得到了我们所知的数字逻辑电路,依照此呢,我们就可以简单易行的读懂各个部件之间的关系,而不必望着繁琐的模拟电路换算而发懵(若你熟悉模拟电路那是更好),噎,说着,说着我们就像单片机的内部构造靠拢了,其实单片机内部也是由许许多多个数字逻辑电门组成,其为数之多已超出我辈之想象,暂且不用理会这些内部构造(因为我们不是制造单片机的),只要去试着了解它的功能模块,先学会了使用再说;
工作频率(Operating Frequency):指单片机工作的动力来源,如同人的心脏,不同的频率带来不同的速率跟时脉,就好比小孩只能爬行,成人却能快跑,而老人只能蹒跚;
程序存储器(Program Memory)、数据存储器(Data Memory):前者是指能装载用户程序的空间大小,后者呢,代表用户所能分配的物理地址空间范围,其程序指令跟操作数是分开来存放的,分别读取的,称之为哈佛体系结构;用通俗的话来形容二者呢,可说成“心胸有多大,舞台就有多”,“宰相肚里能撑船”;
中断(Interrupts):是几乎所有的单片机都会配置的一项能提高其工作效率的基本功能,当单片机正在执行正常的程序时,出现了某种特殊状况,此时它就需停止当前的程序,转去执行由某种特殊状况所引发的一段特定程序,待这段特定的程序执行完毕之后,再回到原先的程序去执行,这就形成了一次中断过程;好比一大清早,你被闹钟从美梦中惊醒,你就不得不中断继续睡觉这件事,赶紧起床,洗刷上班,去做挣钱糊口这营生,待到日落西山,小有所获,你才可以回来继续完成睡觉这人生终生大事,周而复始,就如同被程序控制的单片机;
I/O Ports:是单片机内部电路与外部世界交换信息的通道,输入端口负责从外界接收,检测信号,如同人的眼,耳;输出端口负责向外界输送由内部电路产生的处理结果、显示信息、控制命令、驱动信号等,如同人的手脚,嘴,端口越多呢,处理能力也就越强,难怪人都想要有三头六臂;
定时器(Timers):是单片机内部可供使用的多组计时功能,其多样性及灵活性远比人类社会唯一的时间要丰富的多,其精准度亦达到ns级,配合捕捉(Capture)/比较(Compare)/PWM(脉宽调制)等模块,从而内部可计时、计数,外部输出不同时间比的控制信号,捕获不同时间间隔的未知信号,其能力可谓人的肉眼所未能企及的;
串行通信(Serial Communications):是指把一个数据字逐位顺序分时进行的传输方式,对单片机而言,可占用较少的引脚资源来获得数据的传递;串行通信的实现,在制式、种类、形式、规范、标准、编码、检错、纠错、帧结构、组网方式、调制方式、主要用途(悠着点,别背过去了)等许多方面,存在着多种类型、变化、选择和解决方案,如PHILIPS的IIC总线,Motorola的SPI接口,美国电子工业协会推荐标准RS-232、RS-422、RS-485接口等等,都是用来实现与通信功能相关的技术和规范;啰嗦这么多呢,其实串口通信就是单片机与外部扩展器件交换数据的一条通道;
A/D(Analog-to-Digital Module)模数转换模块:在各类数字化电子产品中,将连续变化的模拟信号转换为离散的数字信号,以便于单片机能进行计算、处理、存储、控制和显示,如湿度、温度等,以一定的电路转换为对等的电压量,以单片机的参考电压为基准,转换为小于参考电压上限的数字量,可以说,该模块大大拓展了单片机的应用领域,要不,就如同人体,光有躯壳,没有“五感”,将是莫大的痛苦;
指令(Instruction Set):是人们用来指挥单片机按要求完成每一项基本操纵的命令,指令系统中的每一条指令都完成一种特定的操作,将若干条实现简单操作的指令语句,按照一定的规则排列组合在一起,就构成了一个可以完成复杂功能的程序;每一类型的单片机几乎都有其不同的指令系统,且大多为汇编语言的,现如今,已有许多单片机设计公司,在开发用大家熟悉的C语言模块,来漫漫代替专用的汇编语言,也有许多第三方应用软件公司开发的编译环境,可以把用C写的程序编译成单片机所能识别的代码,这样各种编程实例就可以在不同的单片机之间相互移植,其通用性将大大加强,程序开发周期也就大大缩短;
安全监控、降耗设计:这一模块其实是人们为了对付单片机自身某些缺陷而设计的,如掉(低)电复位,看门狗(watch dog timer)复位等,若单片机因未知原因而不按程序设计的思路走下去,也就是可能内部跑飞,这是我们所不愿意看到的,在原先设计的程序段中埋下的一些“清定时炸弹”的指令未执行到(或说没有定时去喂狗,狗急了就要跳墙),就会强迫单片机从头再来执行过,大有置于死地而后生之意境,如同人昏头转向、一头雾水之时,当头棒喝,一瓢冷水,可起到事半功倍的效果;降耗设计呢,其实就是人们为了利用单片机在不干活时让其少吃得饭,如只有时钟计时,则只给其免强能够运行的时脉,或干脆让其休眠(家里的遥控器就是典型),资源短缺,适者生存,连单片机的世界也疯了!
以上所列的种种功能模块,是大多数低端单片机所共有的,当然,也是多数高端单片机所共有的,且将这诸多功能模块加强,扩大化了N多倍,但万变不离其衷,我们只需遵循那些相应模块的功能去规划程序即可,只不过在字长处理,程序架构,指令编译等方面导入许多新鲜的元素,如著名的ARM系列,大多字长已发展到16位,32位,其编程思想也引入嵌入式设计的理念,以事件为对象,用C语言来作为编程语言,且借用前人大多数的免费Linux原代码移植过来,几乎都不用再去考虑底层的物理地址的分配问题了,当然也不用一句句的去堆砌原代码(呵,也不是常人所能堆砌得了的),这也正应验了管理学的一种现象,越是高层的东西,所做的事也就越少,说白了,它们是站在巨人的肩膀上的,真是幸福死了,冲着这大好“钱景”,咱也要大学特练C语言,多多熟悉Linux环境、编程风格,假以时日,咱也ARM一回!
知之甚少,恐言多有失,就此落笔!