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

當(dāng)前位置:首頁 > 單片機 > 單片機
[導(dǎo)讀]C51的P0,P2口做外部擴展時使用,其中XBYTE [0x0002],P2口對應(yīng)于地址高位,P0口對應(yīng)于地址低位。一般P2口用于控制信號,P0口作為數(shù)據(jù)通道。XBYTE定義的是外部地址,這樣才能和接到你的IO口上的器件通信在一般的讀寫

C51的P0,P2口做外部擴展時使用,其中XBYTE [0x0002],P2口對應(yīng)于地址高位,P0口對應(yīng)于地址低位。一般P2口用于控制信號,P0口作為數(shù)據(jù)通道。

XBYTE定義的是外部地址,這樣才能和接到你的IO口上的器件通信

在一般的讀寫外部RAM的程序中,經(jīng)??吹竭@樣的句子:

XBYTE[address]=data寫數(shù)據(jù)
data=XBYTE[address]讀數(shù)據(jù)1

外部總線由3組總線組成,數(shù)據(jù) 地址 控制,我們常常一般就叫他外部總線,既然是有3組不同的信號,那么他們是怎么協(xié)調(diào)工作的呢?一般情況CPU有特殊的外部數(shù)據(jù)訪問指令如你這里講51的MOVX指令(在C語言中他會編譯成這個指令)在執(zhí)行這個指令的時候3組線是協(xié)調(diào)工作

mov dptr,#1000h

mov a,#55h

movx @dptr,a

上面3調(diào)語句的C語言可以表示如下

#defineW_DATAXBYTE[0x1000]

W_DATA=0X55;

在使用外部總線的時候,數(shù)據(jù) 地址和控制信號是直接按照規(guī)定的時序輸出高低電平的,所以不用你管,當(dāng)然你必須要滿足時序工作如何理解#define XBYTE ((unsigned char volatile xdata * ))
8051 特有的內(nèi)存型態(tài)

code以 MOVC @A+DPTR 讀取的程序內(nèi)存
data可以直接存取的內(nèi)部數(shù)據(jù)存儲器
idata以 Mov @Rn 存取的內(nèi)部數(shù)據(jù)存儲器
bdata可以位尋址(Bit Addressable)的內(nèi)部存儲器
xdata以 MOVX @DPTR 存取的外部數(shù)據(jù)存儲器
pdata以 MOVX @Rn 存取的外部數(shù)據(jù)存儲器

特殊資料型態(tài)

bit一般位(bit)變量
sbit絕對尋址的位(bit)變量
語法
sbitmy_flag=location;(location 范圍從 0x00 ~ 0x7F)
范例
sbitEA =0xAF;
或是配合 bdata 宣告的位(bit)變量
charbdatamy_flags;
sbitflag0 =my_flags ^ 0;
(注意 sbit 前不可以加 static)

sfr特殊功能緩存器(Special Function Register)
語法
sfrmy_sfr=location;(location 范圍從 0x80 ~ 0xFF)
范例
sfrP0=0x80;
指定絕對地址的變量
在單一模塊內(nèi)可以使用下面的語法宣告
[memory_space]typevariable_name_at_location
范例
pdatacharmy_pdata_at_0x80;
如果該變量必須為多個模塊所使用(Global Variable)則以
抽象指針(Abstract Pointer)的方式在標(biāo)頭檔(Header File)定義較為方便。

#definevariable_name*((data_type *)location)
范例
#definemy_pdata*((char pdata *)0x80)
(注意 char 與 pdata 的順序)
ABSACC.H 提供了下列方便的宏(Macro)定義。
#define CBYTE ((unsigned char volatile code *) 0)
#define DBYTE ((unsigned char volatile data *) 0)
#define PBYTE ((unsigned char volatile pdata *) 0)
#define XBYTE ((unsigned char volatile xdata *) 0)
#define CWORD ((unsigned int volatile code *) 0)
#define DWORD ((unsigned int volatile data *) 0)
#define PWORD ((unsigned int volatile pdata *) 0)
#define XWORD ((unsigned int volatile xdata *) 0)

隱藏的初始化程序
80C51 在電源重置后(Power On Reset)所執(zhí)行的第一個程序模塊并不是使用者的主程序
main(),而是一個隱藏在 KEIL-C51 標(biāo)準(zhǔn)鏈接庫中稱為 startup.a51 的程序模塊。
startup.a51 的主要工作是把包含 idata、xdata、pdata 在內(nèi)的內(nèi)存區(qū)塊清除為 0,并
且初始化遞歸指針。接著 startup.a51 被執(zhí)行的仍然是一個隱藏在 KEIL-C51 標(biāo)準(zhǔn)鏈接庫
中稱為 init.a51 的程序模塊。而 init.a51 的主要工作則是初始化具有非零初始值設(shè)定的
變量。
在完成上述的初始化程序之后,80C51 的控制權(quán)才會交給 main() 開始執(zhí)行使用者的程序。
#define XBYTE ((unsigned char volatile xdata *) 0)
定義XBYTE 為 指向 xdata 地址空間unsigned char 數(shù)據(jù)類型的指針,指針值為0
這樣,可以直接用XBYTE[0xnnnn]或*(XBYTE+0xnnnn)訪問外部RAM了

注意:xbyte是一個宏定義在absacc文件中,編程時要在前面加一個#include 這個頭文件


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