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结束语
单片机变化发展迅速,但万变不离其宗,只要清楚了它们的基本原理和构造思想,不管它怎么变,都能做到知其然知其所以然。 |