有些刚开始学习单片机开发的伙伴,可能对单片机的时钟以及单片机的工作原理不太理解,我在这把自己的理解说一下,希望能帮到你。
先谈一下脉冲的问题。如果你学过数字电路,想必是知道74LS273、74LS373这种集成块的。以74LS373为例,集成块如下图所示(外形,以DIP双列直插为例):
内部结构构成(8个D触发器)
D触发器的原理我就不细说了。373有以下引脚:8个数据输入端D1~D8,8个输出端Q1~Q8,一个数据输入锁存端LE,一个数据允许输出端OE。
373 的工作方式是:
1、当数据允许输出端OE为高电平“1”时,所有输出端Q1~Q8呈现为高阻状态。此时无论数据输入端D1~D8上是什么数据以及数据输入锁存端LE的状态。
2、当数据允许输出端OE为低电平“0”,
2.1 数据输入锁存端为低电平“0”时,无论D1~D8上是什么数据,数据都不会被接收、锁存。所有输出端Q1~Q8不受数据输入端D1~D8的影响,保持之前的数据不变。
2.2 数据输入锁存端为高电平“1”时,输入端D1~D8上的数据会立即反映给输出端Q1~Q8。输入端的数据发生变化,也会立即反映给输出端。
这样,当我们适当地给373的数据输入锁存端LE发出
脉冲时,相当于适当地开放数据入口,在数据允许输出端OE适当地输出
这样的脉冲时,相当于适当地开放数据输出。这样,什么时候输入和什么时候输出就实现了控制。说到这里,可能会有人问了:这个373的工作特点和单片机有什么关系呢?别着急哈,耐着性子往下看哈。
单片机(以51单片机为例)的工作方式是:单片机里有一个PC寄存器,这个寄存器里面装的数据是一个指针,就是保存当前程序代码存储器的地址,门牌号。当给单片机上电的时候,在完成复位动作后,PC寄存器里的数据被复位为0,从而指向地址为0 的代码存储单元。这个时候,如果没有脉冲,代码存储器里的数据就没办法取出来,就像如果不给373提供OE脉冲,没法得到373中保存的数据一样。而有了这个脉冲,代码数据可以从程序存储器中取出来送到中央处理单元,中央处理单元会分析这个代码数据,根据指令决定下一步如何动作。如果这个指令是多字节指令,那么当前代码存储器所在地址后面的相应单元里的代码数据也会被提取出来,配合这个指令进行动作。比如常见的汇编语言中,第一条指令为Ljmp Main,是3字节指令,机器码为02 xx yy,这里面的02是Ljmp指令的机器码;xx yy,是绝对地址,是指向Main代码段所在的起始地址。举例如下图所示:
代码存储器地址 代码存储器数据 汇编指令
--------------------------------------------------------------------------------------------------------------------------
0000H~0002H: 020120 Ljmp Main ;跳转到Mian程序处
... ...
... ...
0120H: ... ;Main子程序段起始处
正是因为有了时钟脉冲,单片机才能实现从代码存储器中取出代码,然后根据代码,执行相应的操作。这个时钟脉冲相当于节拍器,使单片机按照一定的节奏去执行代码。脉冲越快,这个执行的节奏也就越快。但是由于设计工艺的问题,这个节奏是有上限的。
这个时钟脉冲,和373的LE、OE是不是很像。事实上,对于8位单片机而言,你可以理解为在单片机里有无数个373这样的寄存器,每个寄存器都有自己的门牌号,就是所谓的地址。用单片机做控制电路,实际上就是在不同寄存器之间进行数据处理、传送。也就是说,我们最终的关注点是数据从哪里来、到哪里去。
虽然现在ARM、RISC架构的单片机大行其道,即便架构不一样,但数据处理的基本原理上是相通的,都是:获取数据、处理数据、送出数据。各种指令在时钟脉冲的控制下,有序地执行着程序。时钟脉冲对于单片机的重要性,就像心跳对人的重要性一样重要。