1.实验用STC单片机内部结构:
由于本人在此时并没有学习“模电和数电”,因此有些电路图就不在详细分析,现在来说一下,上述芯片内部结构是如何读取代码的。
1.RAM:数据存储器,全称为:Random Access Memory,中文名称:随机数据存储器,是寄存器类型,它的作用是存储代码中的数据,不过注意“掉电”后,PAM中存储的数据就会销毁,一般是通过左侧“RAM地址寄存器”来操作访问,代码中定义的局部变量和全局变量都会存储到RAM
2.ROM:只读存储器,全称:Read-Only Memody,存入ROM的代码只能访问,不可以修改,不过”掉电“之后,ROM中的代码,不会消失,在单片机中ROM就是“程序存储器”——flash.注意:单片机无法直接读取C语言文件,需要先转换成.HEX文件,在存储到ROM
3.PC:程序计数器,他的作用是:执行完一行代码过后,如果是顺序执行,则自动+1,PC的本质是指针,在复位操作会指向程序的第一行代码;如果是存在跳转语句,比如调用子函数,则需要在代码中写明PC的下一个指向,同时,为了记录当前位置,PC会将当前地址“压入”堆栈指针,当执行完子函数之后,再将堆栈指针的地址弹回来,继续顺序执行下面代码,所以他的作用非常重要
4.WDT:“看门狗”,全称:Watch Dog Timer,这是一个计时器,需要定期“喂狗”,若未在定期”喂狗”,或者是检测到“程序代码跑飞”,WDT会让程序复位,从头开始执行,会导致下边程序无法读取到。
5.晶振频率:晶振频率是计算机中“时间单位”的作用,类似于日常生活中的“秒,分钟”,用晶振频率来将编译后的代码划分成一块一块的,来分别读取。
5_2补充晶振:晶振全名叫做“晶体振动器”,将其比作成“心脏”,乐队的“节拍器”毫不为过,因为他的作用,就是来给单片机运行提供一个“节奏”,单片机需要一个节奏来协调统一各部件的工作,否则就会乱套,也有可能导致程序的跑飞,同时晶振频率影响代码运行速率。
6.具体一段代码如何被读取运行:
- PC找到代码运行所在行,然后将Flash固化Add指令传给Control Uint,来译码分析指令,这里Control Uint是借助PC指针指向指令并读取的,PC的本质就是个指针
- 同时地址生成器会把生成的物理地址,传给RAM地址寄存器,然后找到RAM 30H地址所存储的数据
- 将数据传送到TMP1,TMP2,在ALU(逻辑算法单元)进行运算,并将结果返回到ACC中存储
4.PC自增,继续执行下一条指令
7.程序跑飞:指代码由于软件或者硬件上的原因,并没有按照所想要的顺序执行,而执行了无关的代码,这是WDT就会采取措施,即让程序复位。