zoukankan      html  css  js  c++  java
  • 单片机新结

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

    所以最后也难以深入学习,充其量就是熟悉了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来写出逼近精确的延时代码的。

  • 相关阅读:
    详解MathType中如何插入特殊符号
    详解如何将MathType嵌入word中
    MathType公式编辑器快捷键操作
    MathType初级教程:怎么安装MathType
    AOPR密码过滤器
    教您如何在Word的mathtype加载项中修改章节号
    在word文档中如何插入Mathtype公式
    详解MathType中如何更改公式颜色
    静态缓存和动态缓存
    ThinkPHP U函数生成URL伪静态
  • 原文地址:https://www.cnblogs.com/chenwu128/p/2315165.html
Copyright © 2011-2022 走看看