P0~P3、PSW、ACC等这些寄存器在sfr中的地址,是intel设计MCS-51单片机时就定下的。后来许多厂家生产51单片机时都沿用了这定义,以保证程序的兼容性。\r\n至于如下的寄存器\r\nsfr CLK_DIV = 0x97; //为STC单片机定义,系统时钟分频\r\nsfr P0M1 = 0X93;\r\nsfr P0M0 = 0X94;\r\nsfr P1M1 = 0X91;\r\nsfr P1M0 = 0X92;\r\nsfrP2M1 = 0X95;\r\nsfrP2M0 = 0X96;\r\n是STC生产的单片机,因为加入了自己设计的功能选项,所以就增加了这些寄存器。
sfr是用于定义特殊功能寄存器的。
sfr P0=0x80是指整一个P0(P0^0-P0^7)都在0x80地址。
你仔细看另外的特殊寄存器的地址定义啊,一看就明白了。如下取了一小段:
#ifndef __REG52_H__
#define __REG52_H__
/* BYTE Registers */
sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;
sfr PSW = 0xD0;
sfr ACC = 0xE0;
sfr B = 0xF0;
sfr SP = 0x81;
sfr DPL = 0x82;
sfr DPH = 0x83;
sfr PCON = 0x87;
sfr TCON = 0x88;
sfr TMOD = 0x89;
sfr TL0 = 0x8A;
sfr TL1 = 0x8B;
sfr TH0 = 0x8C;
sfr TH1 = 0x8D;
……
以上,看到了没有?
0X81是SP的地址,0X82是DPL的地址。
如果你再仔细点,就不会有这种疑问了,呵呵。
继续加油,祝你更大的进步!
sfr定义了P0端口对应的物理地址为0x80,相当于给0x80地址的内存区域(寄存器)取别名P0。
c51单片机sfr的介绍就聊到这里吧,感谢您花时间阅读,谢谢。
本文标签:c51单片机sfr