摘要:单片机越来越多的受到电子产品研发人员和我国高等技术类学校的应用与重视。本文在多年实际经验的基础上,从单片机结构、逻辑思维、和微观理念方面着手,详细介绍了如何学好单片机这门应用技术的几点经验之谈。
引言
单片机诞生于20世纪70年代。所谓单片机是利用大规模集成 电路技术把中央处理单元(Center Processing Unit,也即常称的CPU)和数据存储器(RAM)、程序存储器(ROM)及其他I/O 通信口集成在一块芯片上,构成一个最小的计算机系统,再加上了中断单元,定时单元及A/D转换等更复杂、更完善的电路,使得单片机的功能越来越强大,应用更广泛[1]。现在更多单片机的发展已经进入了嵌入式系统时代, 由于制造工艺的进步,有如 VHDL、RTOS、CPLD 、FPGA、DSP、ARM 等这一系列可编程器件的体积越来越小、成本越来越低,而功能是越来越能满足人们的需要。自上世纪 80年代以来,单片机技术在我国各个控制领域得到了广泛应用,各个世界 半导体公司都非常看好中国这个庞大的市场而纷纷到中国来投资建厂,如在苏州就有日本的瑞萨、松下、美国的快捷等半导体公司在中的生产厂地。同时面对这一技术的不断发展,我国大部分高校都已经把单片机方面的课程作为学生的必修课,这为我国近些年来的科技、工业控制等方面的发展培养了大量人才,而且社会对此方面的人才需求还在不断的增加。面对如此情况,作为在校学生,又该从何学起?如何学好这门课程呢?又怎样才能不让自己学了等于没学呢?本文在多年实践的基础上,介绍自已的一些感受和经验。
1理解单片机的结构
对于一个初学者,最迷糊的就是对单片机芯片里面的结构的理解,小小的一个芯片为何能完成如此神奇的功能。
第一次从事电子方面的工作,也总对那黑黑的芯片里面感到不可思意的神奇。直到有一天,在检修一台日本二手电子市场里买来的程控交换机时,发现里面有一块黑东西上的黑胶已经裂开,把它撬开一看,里面就是一块电路板,上面焊满了密密麻麻的电子零件。终于有点明白,原来芯片也可以这样做成。当然当时所见的那块电路板是不能被称之为芯片的,那只是日本的电子制造公司为了防止别人抄袭而把整个电路板密封起来或其它原因,只引出几个的引脚与其它电路连接。不过它可以让人联想到芯片的基本结构与此相类似,如果把那些内眼看得见的电子零件再缩小一千倍或更小以至于能把所有电子零件做在一个硅片上,那也就成了名副其实的芯片了。我们不防以图1所示的电路及电路板来做一个生动形象的介绍。该图是一个直流马达可以正反两个方向转动的电路,做成电路板并焊好电子 元件后,经测试没有问题就可以用黑胶(通常采用酚醛树脂等材料)把所有电子元件封起来,只留六个引脚来与外部电路连接,这样看起来就好像是一个芯片。 知道了一般芯片的原理,同样可以更进一步想象单片机为什么会执行逻辑运算等功能,这就牵涉到数字电路和模拟电路的知识。其实不管一个单片机的功能是如何的强大,其只不过是把许多以微米,甚至是纳米为单位级的数字的和模拟电子器件组成。为了形象的来说明单片机内部的结构原理,这里不访举如图2所示的跑马灯电路来阐述。图中电路表明的最终目的是让LED依次轮流被点亮。首先是通过计数器对输入脉冲计数,从0到15共16个脉冲为一个轮回,也即计数器的输出依次为二进制的0000B到1111B,再由四-十六译码器把计数器的结果解码输出,即依次置Y0到Y15由高电平变为高电平。当某一输出为高电平时,经过反向器后,与此线路相连接的LED的阴极被拉为低电平从而点亮该发光二极管。这样一来,计数器和译码器就相当于单片机里的处理器与PC地址寄存器了,与译码器输出脚相连的线就相当于地址线,与LED负极相连的输出线就相当于数据线,每一条“地址线”都与8根“数据线”有一个交叉,每一个交叉就相当于存储单元的每一个位。在这些交叉处是否要连通就相当于把程式烧录到存储器(ROM)里。最后总体来看就相当于一个只有16个地址的8位单片机。如果把LED换成图中数码管,改变图中的二极管连接,在“单片机”通电和输入时钟脉冲后,就可以不停的来显示数字了。 另外,要做到对单片机内部结果真正的了解,还必须得先要有很扎实的电路基础、模拟电路、数字电路等方面的知识,否则可能就是空中楼阁。
2理清逻辑思维
学习单片机是最重要的一点就是不能糊涂,不能把逻辑关系搞得乱七八糟。对于初学单片机时,要学会把一个程式的逻辑性关系用流程图的形式清楚的表示出来。至于用来编写程式的单片机的语言是很简单的,不要把它想象得很神秘,不管是汇编语言、C语言、还是更高级的VC++和图示化语言(如 labview),都只不过是把我们清楚的逻辑思维告诉单片机处理器,并指令它将要被如何进行逻辑操作。把单片机的指令看得很重要应该是我们大家在学习单片机时的一个最大的误区,老是担心指令记不住、不会用,这也是学习单片机还没入门、上路的主要表现。其实这样有什么担心的呢,记不住就不要强求好了,把指令放在旁边,当把逻辑关系清理好之后,再来对着指令表确定哪个逻辑关系由哪些指令来完成,当一条指令运用得几次后,根本就用不着担心不知道指令不会用了。退一步讲,即使真的记不得指令,参照书本的指令用法也完全可行,现在的知识量是海量,全把所学的知识死记在脑子里肯定会把脑袋涨破。在写程序时,只要程序的逻辑关系调理清楚了,写起来就好比做简单的翻译工作,把逻辑关系翻译成计算机语言来表示。如下图3和图4是一个简单的键扫描电路和程式流程图,我们根据这个流程图就很快能用目前非常普遍的 C51汇编语言来写出这个程序。
KEY_SCAN:
PUSH A ;保存寄存器A
INC R1 ;
AND R1,00000011B
MOV R2,3
MOVC DPHL,TABLE ;取表首址
MOVC A,@DPHL+R1 ;读取表中数据
AND A,00001111B ;保留低4位
MOV P1,A ;按所取表中数据由P1低4位输出
CALL DELAY_ tiME ;延时
MOV A,P1 ;读取P1端口
AND A,11100000B ;保留P14、P16、P17
LOOP:
RLC A ;左移A一位到位寄存器“C”
JC R1,LOOP1 ;判断位寄存器“C”是否为“0”
CALL KEY_CAL ;调用键码计算子程序
LOOP1:
DJNE R2,LOOP ;判断是否已移3位
POP A ;恢复寄存器A
RTI ;本次扫描结束
KEY_CAL: ;键码计算子程序
… … …
RTS
DELAY_TIME: ;延时子程序
… … …
RTS
TABLE: ;键扫描输出表
DB 11111110B
DB 11111101B
DB 11111011B
DB 11110111B 3对微观世界的想象
曾经在设计电路板时,为了让线路中的电流能流畅的通过线路,为了所设计的电路板能满足各种测试条件下的安全标准,如UL标准要求最长的 电源地线不能过 0.02欧姆(其测试条件是在20A的电流情况下测量它的功率P=I2R)。如果假如是0.02欧姆,通以20A的电流,那这条线路的发热功率将会是 8W。把电流看作是我们宏观世界里的水,线路就好比一条水沟。要让水在水沟里怎么流,这理所当然是很容易控制的了。如水在急转弯的地方会起漩涡,会对急转达弯的沟的对面产生冲击。同样在电路板上的线路如果存在急转弯的情况,电流也会引起涡流,也会对线路的拐点处有一个冲击作用而产生辐射。这样一来,在理解了这一原理之后,每一次电路板的设计完成之后,所有的测试都能一次通过。可见把微观世界想象成宏观世界相类似的事物或过程是非常有帮助的。现代电子世界,特别是微电子,要想看清他的真面目,只有在高清昕度的显微镜下才能看到他的外形,可是即使了解了它的外形,也只不过是知其然而不知其所以然,它的工作过程根本无法看得到。
现在单片机结构越来越复杂,集成度越来越高,存储量越来越大,将来还可能采用分子级电子晶体管呢。它的运行速度也是如此的越来越快,现在已经是采用纳秒级来定义它的运行时间了,最长的运行一条指令的时间最多不过一两个微秒,简直就是比一闪而过还要少好多好多。既然我们可以在空间上利用放大镜把外形放大后来了解,那么同样可以在时间上把时间拉长来解。不访把一微秒当作时一分钟或一小时来理解,这样我们就不难理解CPU就如人一样在处理某一条指令。比如指令 “MOV A,01H”就是CPU把数据01H送到A累加器,在这个运送的过程就如人搬运东西的过程,这个过程的处理时间就是CPU处理一个指令的时间,通常称之为指令周期。有些时候单片机会出现对某个操作处理的时间不够,如进行数据采集时,被采集的信号相对于单片机处理时间比较快就会出现数据遗失的情况,这就要求单片机的运行速度更快。如果没有这处微观时间的概念,就很难理解怎么会出现这种情况。
4结束语
单片机变化发展迅速,但万变不离其宗,只要清楚了它们的基本原理和构造思想,不管它怎么变,都能做到知其然知其所以然。
|