日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當前位置:首頁 > 單片機 > 單片機
[導讀]#include // 引用52包文件sbit P0_0 = P0^0; // 定義P0第0個管腳sbit P0_1 = 0x81;// 定義P0第1個管腳sbit P0_2 = 0x80^2; // 定義P0第2個管腳void main(){P0_0 = 0; // 點亮P0第1管腳連接的LEDP0_1 = 0;P0_

#include // 引用52包文件

sbit P0_0 = P0^0; // 定義P0第0個管腳

sbit P0_1 = 0x81;// 定義P0第1個管腳

sbit P0_2 = 0x80^2; // 定義P0第2個管腳

void main()

{

P0_0 = 0; // 點亮P0第1管腳連接的LED

P0_1 = 0;

P0_2 = 0;

}

為什么用三種方式設置引腳都可以呢,這是因為P0口可以按位尋址,STC單片機的特殊功能寄存器布局如下:

從上圖可以看到,P0口是處在可位尋址區(qū),可位尋址的特性就是這樣,以sbit P0_1 = 0x81代碼為例

sbit關鍵字指定了后面的變量是要位尋址,賦值P0_1 = 0x81,系統(tǒng)會找到寄存器地址0x80,然后再找對應的位,同理,SCON對應的地址是0x98也是處在可位尋址,也是可以直接賦值位,如下代碼

#include // 引用52包文件

sbit P0_0 = P0^0; // 定義P0第0個管腳

sbit P0_1 = 0x81;// 定義P0第1個管腳

sbit P0_2 = 0x80^2; // 定義P0第2個管腳

sbit TCON_0 = TCON^0;

sbit TCON_1 = 0x89;

void main()

{

P0_0 = 0; // 點亮P0第1管腳連接的LED

P0_1 = 0;

P0_2 = 0;

TCON_0 = 0;

TCON_1 = 0;

}

細心的朋友會發(fā)現,在reg52.h中定義了 sfr SP = 0x81;那么,為什么代碼中sbit P0_1 = 0x81和sfr SP = 0x81不沖突呢,這不是sfr和sbit關鍵字的區(qū)別了,系統(tǒng)會自動根據不同的關鍵字處理不同的操作,舉個簡單的例子,你和鄰居家都有8個柜子,你家的門牌號是0x80,鄰居家的是0x81

sbit P0_1 = 0x81就好比是先找到你家的地址0x80,再找到你家的第一個柜子的位置,即0x80 + 0x01 = 0x81,而sfr SP = 0x81則僅僅是只到鄰居家的地址;

有了上面的理解,我們可以在代碼里驗證一下,當增加代碼sbit SP_0 = SP^0; 后編譯 提示 light.c(8): error C146: 'SP': invalid base address,根本就編譯不過去,也就是說,系統(tǒng)不可位尋址區(qū)是不能按位訪問的,

#include // 引用52包文件

sbit P0_0 = P0^0;// 定義P0管腳1

sbit P0_1 = 0x81;// reg52.h中定義了 sfr SP = 0x81;

sbit P0_2 = 0x80^2;

sbit TCON_0 = TCON^0;

sbit TCON_1 = 0x89;

//sbit SP_0 = SP^0; // 提示 light.c(8): error C146: 'SP': invalid base address

void main()

{

P0_0 = 0; // 點亮P0第1管腳連接的LED

P0_1 = 0;

P0_2 = 0;

TCON_0 = 0;

TCON_1 = 0;

SP = 0x81; // 可以給SP直接賦值 這時SP地址中的數據是0x81

}

要點:

1.位尋址可以直接操作地址中的某一個位中的數據


本站聲明: 本文章由作者或相關機構授權發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內容真實性等。需要轉載請聯(lián)系該專欄作者,如若文章內容侵犯您的權益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀
關閉