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生产的单片机,因为加入了自己设计的功能选项,陪毁所以就增加了这些寄存器。学过C语言的人,肯定对单片机中的SFR定义的数据类型,有一些困惑。
比如说,在单片机的头文件中,SFR定义的是特殊寄存器的地址:SFR P0=0X80H,这显然说明P0是一个地址常量。既然是地址常量,那么P0就不能再赋值,那么在使用P0寄存器的时候,P0又能直接赋值:P0=0xFF\\1111 1111.
在C语言中,如果P0表示的是指针变量。那么P0就不应该,当做变量名来使用。这就让学单片机的人对SFR定义的变量一头雾水(我也是搞不懂),后来我用自己的想法对SFR进行理解。
SFR P0=0X80H
SFR可理解为:
char P0
&P0=0x80H
这样P0的地址即是一个指针常量,也可以对P0赋值。
评论列表(0条)