1. 程式人生 > >單片機關鍵字sfr和sbit的理解

單片機關鍵字sfr和sbit的理解

來源 常量指針 ora 個人 reg 語言編程 關鍵字 tps spec

在單片機C語言編程中,擴充了兩個關鍵字sfr和sbit。
sfr(Special Function Register特殊功能寄存器的縮寫),sbit(特殊功能寄存器位),與定義一般的int、char型變量不同,這兩個字定義的並不是變量,而作為特殊功能寄存器的引用,或許可以叫做別名。
單片機頭文件<reg51.h>中定義了21個特殊功能寄存器,並且都是8位寄存器,而部分寄存器的每個位又用sbit進行了定義:

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;
sfr IE = 0xA8;
sfr IP = 0xB8;
sfr SCON = 0x98;
sfr SBUF = 0x99;
sfr是定義一個8位的寄存器,sbit是定義位寄存器,個人認為可以把這種定義理解為定義一個常量指針始終指向0x80這個特殊寄存器,即如下定義方法;
const unsigned char *PP = 0x80;
當然,這種定義方法不完全符合上面的說法,而且*PP被限制了寫操作的,即PP所指向的地址被認定為常量,而PP任然是個變量,事實上除了使用sfr和sbit進行定義外,其他定義方式被認為是不安全的而被限制了寫入操作。最後發現定義指針的時候只有定義數組時:
char a[];
地址指針a才是一個常量指針,而其他指針都是變量;
---------------------
作者:Lorain_Lynies
來源:CSDN
原文:https://blog.csdn.net/lorain_lynies/article/details/52013611?utm_source=copy
版權聲明:本文為博主原創文章,轉載請附上博文鏈接!

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

單片機關鍵字sfr和sbit的理解