我们都知道在写程序时,头文件是必不可少的,可是我们却往往忽视了头文件原理,所以我就来讲讲它具体的深层原理究竟是什么?!
一、命名
以IAP15F2K61S2芯片为例
不同芯片所实现的功能和内部结构是有区别的,所以头文件就会有差异,为了方便查找,就会命名不同 芯片的名字,以名字来区别芯片的作用和功能。
例如、STC,IAP和IRC的区别就是EEPROM是否能当作FLASH来用。
主要的是2K指的是SRAM大小为2048个字节,61为ROM大小为61K等等
二、内部结构(SFR)
RAM是分为内扩RAM和内部RAM
内部结构中最需要理解就是内部RAM其中的SFR。
编程所用到的特殊功能寄存器就是SFR,也就是编程中头文件所定义好的寄存器,例如P0,P1等
SFR是在内部RAM中,地址是与高128位RAM共用的。
值得注意的是:寄存器地址只有被8整除时才可以位寻址!否则就不可以
我在刚开始学习的时候也是非常困惑?!这是为什么?
后来学习后,得知
一个8位的单片机,这意味着MCU中的寄存器大小是8位的。如果一个寄存器地址可以被8整除的话,它地址的后三位就一定为0!那我们就可以利用这三位·(bit2,bit1,bit0)来干点别的事,(bit2,bit1,bit0)表示的范围是0~7,即寄存器内部的8bit空间,这样我们把固定为0的这后三位利用起来表示寄存器内部的位偏移的话,这个寄存器就变成可以进行位操作的寄存器了
也可以比作74H138译码器,3位转8位,这里就相当于用最低3位(都为零用不到)来寻找我们需要的一位地址!
三、头文件
编程大都需要有头文件的参与,否则将是非常艰难的编程体验。
可以看到我们SFR的地址,根据指针对其经行寻址后定义,但是这会非常难以理解并且不易读
所以在头文件中做的事情就是把地址定义为我们可以理解的寄存器名称
例如
定义0x80为P0,并且把不同位给单独定义,这样就可以方便编程和理解。