• 单片机新结


    也算是用过一段时间的单片机,但是当初也就是熟悉了一些模块的使用,对于单片机的工作原理并不是很了解。

    所以最后也难以深入学习,充其量就是熟悉了C51的编程,要想了解一个MCU的工作原理,了解汇编是很有必要的。

    而在编程过程中,最重要的就是时序!无论是进行存储器的读写,还是进行通信,只有时序匹配了,才可以写出

    高效的少bug的代码。而这些恰恰是需要掌握最基础的东西才能达到的。于是重新学了下MCS51,有了一些新的理解。

    指令的属性:指令长度和执行时间。

    指令长度就是存储在ROM中所占的ROM空间,编译器把程序汇编后,会给出这个程序的大小,这个值就是存储

    这个程序要占用的ROM空间(当然是以二进制的形式存储的)。 而与ROM关系密切的寄存器就是PC,

    PC虽然是用来指向ROM地址的。虽然它的作用是用来指向下一条指令,但是它的值并不总是加一指向下条指令的,

    PC的增量是与指令长度有关的。首先看下3字节指令MOV 30H,#20H 在ROM中存储的。  

    显然,这条指令占3字节的空间,而执行下条指令时PC为PC+3。 

    要注意的是,最小指令周期是等于一个机器周期的,而不是一个时钟周期,单周期指令NOP执行时间为一个机器周期。

    当然,每条指令的周期是确定的。读指令操作和ALE信号有关,在ALE有效时才执行一次读指令操作。

    ALE(address locked enable)信号在不是用来所存外部RAM地址时,它的周期是振荡时钟的6分频。

    (如果是单指令双周期指令,那么4次取值操作只有第一次是有效的)

    寄存器(指针)SP、DPTR和PC

    PC的作用就是ROM的地址计数器。

    SP总是指向堆栈(应该是栈吧,堆和栈是两个不同概念的RAM)的栈顶的,而堆栈在内部RAM中,所以SP是RAM的地址计数器。

    DPTR可以指向外部RAM(写操作),也可以指向ROM(查表指令)。

    在写单片机控制单个模块的代码时,并不困难。难的是如何把多个模块架构在一起,可以协同工作,而无模块当机现象。

    其实,当做一个单片机控制系统时,写代码就要从操作系统的层次来设计程序的框架,即裸奔时的程序框架。 

    另外,经常用到延时程序。但是,C代码是很难做到精确延时的,因为对于不同的延时代码写法,编译器的反汇编代码总会不同。

    这时就要牺牲定时器或者嵌入汇编来做到精确延时。但是对于不懂汇编又不想牺牲资源的来说,

    还是可以用C51来写出逼近精确的延时代码的。

  • 相关阅读:
    摘抄博文
    html5中getContext()方法和CanvasRenderingContext2D对象详解
    三十四、Android Spinner控件之键值对用法
    二十七、Android之GPS定位详解
    J2EE用监听器实现同一用户只能有一个在线
    三十二、Android上传文件至服务器
    二十六、Android WebView缓存
    三十九、Android原理 不需要关闭后台运行程序
    三十七、android sqlite3详解
    struts2之注解权限控制
  • 原文地址:https://www.cnblogs.com/chenwu128/p/2315165.html
Copyright © 2020-2023  润新知