原创 单片机小结

2010-8-28 22:35 1071 2 2 分类: MCU/ 嵌入式

经过一段时间的学习,对单片机内部结构、内部资源、及汇编语言有了一个比较全面的认识。为了不至于以后忘记了,还能找回来,记下来好!方便自己,也方便别人参考。

     
先说一下单片机的工作过程:上电复位后PC的内容送AR,(程序计数器PC
初始值为0X000H,即指向复位入口地址,还有中断入口地址,程序应该写在0X0030H之后)(一般情况下)PC的值是自动加1的(只有当遇到跳转指
令时,它改变PC的值),经AB、地址译码器选中ROM00H单元,在读指令的控制下读出00H中的指令,送DB、送DR经IR译码后,微操作控制线路改
变,执行命令及处理数据。书上说微操作控制线路发出执行这条指令的各种控制命令。我认为微操作控制线路改变了,因为只有电路的物理结构发生了改变电路功能
才会变,可编程就是能通过执行预先设计的指令来改变电路的结构,从而改变电路的功能。————物理的东西是死的,是没有意识的,所以说是低级的,是有规律
的,是完全可以控制掌握的。

-     
内部存储器,编程时可使用的内部硬件资源,单片机工作时对当前处理的数据是存放在内存中的。80C51内部共有256个存储单元,又可以分为低128单
元,高128单元。其中低128单元可以使用的数据存储单元,按用途又可以分为3个区。通用寄存器区、位寻址区、用户RAM。前32个单元设计成4组8个
通用寄存器编号R0~R7,规定在任一时刻CPU只能使用其中的一组,称为当前寄存器组,可以通过PSW中的RS1、RS0位的状态组合来决定,这样这8
个东西就可以用同一个名字独立使用四次。这在保护现场时用得着。高128单元是特殊功能寄存器,是有专门的功能定义的(书上有详细介绍)。


      
说到保护现场不得不谈堆栈,堆栈就是为了保护现场和断点设计的。堆栈先进后出,就这么简单。但我真正理解她没比和追MM一样付出的时间和精力少,首先你得清楚为什么要设计这样一个东西,如果没有她,子程序的调用是怎样一个过程呢?在调用子程序前首先必须保护好现场,因为被调用程序返回后还得继续执行调用程序,如果没有保护现场,从被调用程序回来时数据可能受到破坏就不是原来的数据了(保护现场的意义)。还有就是程序计数器PC的值,也要保存好,这样从被调用程序返回时就知道调用程序再从哪里运行下去(保护断点的意义)。—————— 

把PC的值存放在哪里呢?内存中,对!内存中那么多单元可又存入在哪个单元好呢?当然你可以自己设计一个单元来存入PC值,但你不能忘记是哪个单元,这样
就要记住许多的地址。要暂存的数据一但多起来就麻烦了,显然这不是一个好办法。有没有更好的办法呢,当然有,堆栈,可以用堆栈,有了可爱的堆栈就只需要记
住两条指令就可以了。即PUSH
POP,一进一出,(PUSH时PC先加1存入数据,POP取出数据PC再减1,这就是为什么会是先进后出,因为指令动作时是这样设计的)使用时
PUSH,POP,只要成对使用,只要记住是先进后出,就可以了。你就不需要关心数据存放在哪里。而且子程序调用和返回时通过子程序调用返回指令单片机自
动保存PC的值。

      
再说一下中断,为什么又要设计中断呢?,不是越简单越好吗?当然有它存在的理由。单片机的工作过程是按PC的值不断的取指令执行指令,串的方式工作。如果有一个很重要的事件发生,而PC还没有指向它的程序部分,CPU是不能立即响应的。为了让这个笨家伙变聪明能随机应变,就设计了中断源,当有中断事件发生时她就能立即作出反应了。但机器毕竟是机器,是死的。不过人是活的、是聪明的。当我们给单片机作一些约定后使用起来就觉得单片机聪明了。怎样让她自动响应中断事件呢?设计时约定,每一个中断源触发时PC跳到一个对应的地址(即中断入口)而我们使用时又可以在中断入口地址处写一个跳转指令,让它跳到中断服务程序去。这样就能自动响应中断事件呢!由于是串的方式工作,同一时刻只能响应一个中断,当多个中断同时触发时就会发生竞争。
了避免这种现象的出现,设计时是规定了优先权的,权小的靠边站。硬件设计时虽然让它们不打架了,但还没有很好的解决优先顺序。于是又设计了一个优先级,优
先级是可以通过软件改变的。把权小的设置在级大的里面它就牛B起来了。开不开中断,开哪些中断也是可以通过相对应的特殊功能寄存器设置的。


      
定时\计数器,单片机中很重要的硬件资源。它对应中断源,使用时要进行一些必要的设置包括:选择C/T模式、工作方式,赋初值,开计数器,开中断。还要注意先后顺序,要在定时\计数器准备好后再打开中断。虽然有了定时功能但由于计数的脉冲就是晶振的,所以时间是很短的,不过可以通过软件计数的方式把一个标准的时间累加。


     
汇编语言程序的编写,首先你自己得知道怎么解决待解决的问题,编写程序就是要实现让单片机怎么一步一步地实现这个功能。复杂的问题要画程序
流程图,然后根据流程图编写程序,小问题可以直奔主题,再完善其它附加功能和初始程序。这样编写程序时不一定一开始就有一个完整的思路。要知道胖子不是一
口吃出来的,是一口一口的吃出来的,路也是一步一步走出来的,同样的道理程序是可以在调试中一步一步修改出来的。实际上人的思维也是这样一个过程。


 


     
汇编语言是面向机器的能让你了解单片机的工作过程。但解决实际的问题时,那就不管你了不了解原理了,能把问题解决好就牛X,C语言就是面向问题的用C51编程时只要把解决问题的方法用C51编写出来就可以了。所以最后还是要学习C51


        
对汇编语言有了一个理性的认识了当运行C语言编写的程序时,脑子里就有单片机她是怎么完成这个任务的概念了。


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
2
关闭 站长推荐上一条 /2 下一条