首页 > 编程知识 正文

单片机内部结构包括(单片机软件分析)

时间:2023-05-04 00:50:10 阅读:104756 作者:3787

我们知道单片机内部有只读存储器、随机存取存储器和并行输入输出端口。那么,除了这些东西,单片机内部还有什么,这些部件是如何连接在一起的?让我们对单片机做一个完整的分析!

看图(1)(这张图太大了,请找本书看。一般来说,有什么关于单片机的书)。从图中我们可以看到,51单片机内部有一个用于运算和控制的CPU,还有四个并行I/O口,分别是P0、P1、P2、P3,存储程序的rom,存储中间结果的RAM,定时器/计数器,串行I/O口,中断系统和一个内部时钟电路。一个51单片机有这么多东西。

通过上图的进一步分析,我们知道读写并行I/O端口只需要将数据发送到对应I/O端口的锁存器,那么如何使用定时器/计数器、串行I/O端口等等呢?单片机中有一些独立的存储单元用来控制这些设备,称为特殊功能寄存器(SFR)。事实上,我们已经触及了P1,一个特殊的功能寄存器。还有什么?看表1

表1

接下来,让我们介绍一些常用的SFR,参见图2。

图2

ACC:累加器,通常用a表示,这是什么东西?从名字就看不出来。它是一个寄存器,不是一个附加的东西。为什么给它起这样一个名字?可能是因为算术单元做运算时其中一个数字一定在ACC里。它的名字很特别,它的身份也很特别。后面我们会学习指令,可以发现所有的操作指令都离不开它。

2.乙:登记簿。做乘除的时候放乘数或者除数,不做乘除的时候随便用。

3.PSW:程序状态字。这是一个很重要的东西,里面包含了很多CPU的工作状态,这样我们就可以知道CPU的当前状态,并进行相应的处理。其功能见表2。

表2

让我们逐一介绍你的目的。

(1)CY:进位标志。051中的算术单元是一个8位算术单元。我们知道,8位算术单元只能表示0-255。如果相加,两个数之和可能超过255,这样最高位会丢失,导致运算错误。我该怎么办?最高位在这里。没关系。

示例:78H97H (0111000 10010111)

(2)交流:半分。

示例:57H 3AH(01010111 00111010)

(3)F0:用户标志位,由我们(程序员)决定什么时候用,什么时候不用。

(4)RS1、RS0:工作寄存器组选择位。我们已经知道了。

(5)0V:溢出标志位。什么是溢出?以后再说吧。

(6)P:奇偶校验位:用于表示ALU运算结果中二进制位数“1”的奇偶性。如果是奇数,那么P=1;否则为0。

例:一次运算的结果是78H(01111000)。显然,1的个数是偶数,所以P=0。

4.DPTR(DPH,DPL):数据指针,可用于访问外部数据存储器中的任何单元。如果不用,也可以作为通用寄存器,我们自己决定怎么用。

5.P0,P1,P2,P3:我们已经知道这是一个具有四个并行输入/输出端口的寄存器。其内容对应于引脚的输出。

6.堆栈指针。

>堆栈介绍:日常生活中,我们都注意到过这样的现象,家里洗的碗,一只一只摞起来,最晚放上去的放在最上面,而最早放上去的则放在最下面,在取的时候正好相反,先从最上面取,这种现象我们用一句话来概括:“先进后出,后进先出”。请大家想想,还有什么地方有这种现象?其实比比皆是,建筑工地上堆放的砖头、材料,仓库里放的货物,都是“先进后出,后进先出”,这实际是一种存取物品的规则,我们称之为“堆栈”。

在单片机中,我们也可以在RAM中构造这样一个区域,用来存放数据,这个区域存放数据的规则就是“先进后出,后进先出”,我们称之为“堆栈”。为什么需要这样来存放数据呢?存储器本身不是可以按地址来存放数据吗?对,知道了地址的确就可以知道里面的内容,但如果我们需要存放的是一批数据,每一个数据都需要知道地址那不是麻烦吗?如果我们让数据一个接一个地放置,那么我们只要知道第一个数据所在地址单元就可以了(看图2)如果第一个数据在27H,那么第二、三个就在28H、29H了。所以利用堆栈这种方法来放数据可以简化操作

那么51中堆栈什么地方呢?单片机中能存放数据的区域有限,我们不能够专门分配一块地方做堆栈,所以就在内存(RAM)中开辟一块地方,用于堆栈,但是用内存的哪一块呢?还是不好定,因为51是一种通用的单片机,各人的实际需求各不相同,有人需要多一些堆栈,而有人则不需要那么多,所以怎么分配都不合适,怎样来解决这个问题?分不好干脆就不分了,把分的权利给用户(编程者),根据自已的需要去定吧,所以51单片机中堆栈的位置是可以变化的。而这种变化就体现在SP中值的变化,看图2,SP中的值等于27H不就相当于是一个指针指向27H单元吗?当然在真正的51机中,开始指针所指的位置并非就是数据存放的位置,而是数据存放的前一个位置,比如一开始指针是指向27H单元的,那么第一个数据的位置是28H单元,而不是27H单元,为什么会这样,我们在学堆栈命令时再说明。

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。