第6次:C51語(yǔ)言程序設(shè)計(jì)課件_第1頁(yè)
第6次:C51語(yǔ)言程序設(shè)計(jì)課件_第2頁(yè)
第6次:C51語(yǔ)言程序設(shè)計(jì)課件_第3頁(yè)
第6次:C51語(yǔ)言程序設(shè)計(jì)課件_第4頁(yè)
第6次:C51語(yǔ)言程序設(shè)計(jì)課件_第5頁(yè)
已閱讀5頁(yè),還剩47頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

四川師范大學(xué)成都學(xué)院騰訊微云:/DSdKRL2013-09-01劉強(qiáng)課件下載課程教學(xué)內(nèi)容緒論第0章計(jì)算機(jī)的基礎(chǔ)知識(shí)第1章單片機(jī)的硬件結(jié)構(gòu)----重點(diǎn)

第2章單片機(jī)的指令系統(tǒng)----了解 第3章單片機(jī)的匯編語(yǔ)言程序設(shè)計(jì)---了解

第4章單片機(jī)的C語(yǔ)言(C51語(yǔ)言)編程----重點(diǎn)第5章單片機(jī)的輸入、輸出口----重點(diǎn) 第6章單片機(jī)的中斷系統(tǒng)----重點(diǎn) 第7章單片機(jī)的定時(shí)器/計(jì)數(shù)器----重點(diǎn) 第8章單片機(jī)的串行接口----重點(diǎn)

第9章單片機(jī)總線與系統(tǒng)擴(kuò)展 第10章單片機(jī)應(yīng)用接口技術(shù)

————后面章節(jié)選擇自學(xué)四川師范大學(xué)成都學(xué)院教師:劉強(qiáng)C51語(yǔ)言程序設(shè)計(jì)

現(xiàn)在幾乎所有的單片機(jī)都能用C語(yǔ)言編程了,采用C語(yǔ)言編程確實(shí)能帶來(lái)很多好處,至少可讀性比匯編語(yǔ)言強(qiáng)多了。C語(yǔ)言的基礎(chǔ)知識(shí)不足的同學(xué)希望大家課后找時(shí)間補(bǔ)充!希望同學(xué)們?cè)趯?shí)踐中去學(xué)習(xí)和領(lǐng)悟C語(yǔ)言!接下來(lái)我們來(lái)看C51與C的不同之處!單片機(jī)的C語(yǔ)言標(biāo)準(zhǔn)C語(yǔ)言單片機(jī)的C語(yǔ)言(C51語(yǔ)言)單片機(jī)的C是在標(biāo)準(zhǔn)C語(yǔ)言的基礎(chǔ)上擴(kuò)展而成。故我們僅需學(xué)習(xí)與單片機(jī)緊密關(guān)聯(lián)的擴(kuò)展部分,即可達(dá)到快速掌握C51高級(jí)語(yǔ)言的目的?!罢Z(yǔ)言不是教出來(lái)的,而是學(xué)出來(lái)的”。那么,C51語(yǔ)言能力也類(lèi)似:不是背C語(yǔ)言“條文”背出來(lái)的,是讀程序“讀”出來(lái)的,是編程序“編”出來(lái),是在做項(xiàng)目編程序、調(diào)試程序的實(shí)踐中形成和提高的。學(xué)習(xí)C51語(yǔ)言,還必須讀C51源程序范文:從范文中加深對(duì)語(yǔ)言法則的理解,認(rèn)識(shí)并熟悉語(yǔ)言元素、用語(yǔ)范例,理解語(yǔ)言和單片機(jī)硬件行為的關(guān)聯(lián),學(xué)習(xí)程序結(jié)構(gòu)的組織(流程圖設(shè)計(jì)),積累編程的通常技巧和算法。盡量作到讀懂人家的成熟的軟件,領(lǐng)悟、總結(jié)、模仿和借鑒,進(jìn)一步作到能夠根據(jù)自己實(shí)際的需要對(duì)成熟的軟件模塊進(jìn)行仿寫(xiě)、借代、適配性修改、拼裝,在編程實(shí)踐中逐步提高編程能力。引言(深入軟硬件底層,以達(dá)到知其然知之所以然。)一、函數(shù)定義(一)函數(shù)的定義函數(shù)類(lèi)型函數(shù)名(形式參數(shù)表)[reentrant][interruptm][usingn]{

局部變量定義 函數(shù)體}

前面部件稱(chēng)為函數(shù)的首部,后面稱(chēng)為函數(shù)的尾部,格式說(shuō)明:

1.函數(shù)類(lèi)型函數(shù)類(lèi)型說(shuō)明了函數(shù)返回值的類(lèi)型。

2.函數(shù)名函數(shù)名是用戶為自定義函數(shù)取的名字以便調(diào)用函數(shù)時(shí)使用。

3.形式參數(shù)表形式參數(shù)表用于列錄在主調(diào)函數(shù)與被調(diào)用函數(shù)之間進(jìn)行數(shù)據(jù)傳遞的形式參數(shù)。voiddelay02s(void) //一般函數(shù)定義 { unsignedchari,j,k; for(i=20;i>0;i--) for(j=20;j>0;j--) for(k=230;k>0;k--);}voiddelay02s(unsignedcharn)//帶參數(shù)傳遞的函數(shù) { unsignedchari,j,k; for(i=n;i>0;i--) for(j=20;j>0;j--) for(k=230;k>0;k--);}intmax(intx,inty)//帶參數(shù)傳遞和有返回值的函數(shù){ intz; z=x>y?x:y; returnz;}例程unsignedint

fac(unsignedintn)reentrant//遞歸調(diào)用必須設(shè)置為重置函數(shù){ unsignedintresult;

if(n==0) result=1; else result=n*fac(n-1); return(result);}voidTIMER0_isr()interrupt0using1//中斷函數(shù){ count++;

if(count==20) { count=0; P2_0=!P2_0; //時(shí)間到反轉(zhuǎn)電平

}}例程externintmax(intx,inty);voidmain(){intc;intx1=13,y1=-8;c=max(x1,y1);while(1);}intmax(intx,inty){intz;z=x>y?x:y;returnz;}fun1.cfun2.c例程externunsignedintx;externintmax(intx,inty);voidmain(){intc;intx1=x,y1=-8;c=max(x1,y1);while(1);}unsignedintx=13;intmax(intx,inty){intz;z=x>y?x:y;returnz;}fun1.cfun2.c例程(一)普通變量定義的格式

[存儲(chǔ)類(lèi)別]數(shù)據(jù)類(lèi)型說(shuō)明符

[存儲(chǔ)器類(lèi)型]變量名1[=初值],…;在C51中,變量在使用前必須對(duì)變量進(jìn)行定義,指出變量的數(shù)據(jù)類(lèi)型和存儲(chǔ)模式。以便編譯系統(tǒng)為它分配相應(yīng)的存儲(chǔ)單元。二、C51的變量

此部分需要關(guān)注與標(biāo)準(zhǔn)C不同的地方!1、變量的存儲(chǔ)類(lèi)別存儲(chǔ)類(lèi)別指的是數(shù)據(jù)在內(nèi)存中存儲(chǔ)的方式。存儲(chǔ)類(lèi)別具體有四種:---編譯器默認(rèn)為auto。

自動(dòng)的(auto) 靜態(tài)的(static) 寄存器的(register) 外部的(extern)

在C語(yǔ)言中,存儲(chǔ)的方式分為兩大類(lèi):

(1)靜態(tài)存儲(chǔ):程序運(yùn)行期間分配固定存儲(chǔ)空間。(2)動(dòng)態(tài)存儲(chǔ):程序運(yùn)行期間根據(jù)需要?jiǎng)討B(tài)分配存儲(chǔ)空間。

數(shù)據(jù)類(lèi)型長(zhǎng)度值域bit1位0或1signedchar1字節(jié)-128~+127unsignedchar1字節(jié)0~255signedint2字節(jié)-32768~+32867unsignedint2字節(jié)0~65535signedlong4字節(jié)-2147483648~+2147483647unsignedlong4字節(jié)0~4294967295float4字節(jié)±1.176E-38~±3.40E+38指針1~3字節(jié)對(duì)象地址(物理地址)sbit1位0或1sfr1字節(jié)0~255sfr162字節(jié)0~655352、數(shù)據(jù)類(lèi)型說(shuō)明符3、c51擴(kuò)展的存儲(chǔ)器類(lèi)型

----C51特有存儲(chǔ)類(lèi)型尋址空間數(shù)據(jù)長(zhǎng)度(bit)值域范圍bdata片內(nèi)可位尋址的RAM(20H~2FH)10~127data片內(nèi)直接尋址RAM(00~7FH)80~128idata片內(nèi)間接尋址RAM(00~0FFH)80~255pdata分頁(yè)尋址片外RAM(0000H~00FFH)80~255xdata片外RAM(64K)(0000H~0FFFFH)160~65535code片內(nèi)、外統(tǒng)一編址ROM(64K)(0000H~0FFFFH)160~65535存儲(chǔ)器類(lèi)型映射圖databdatacode外部程序空間

60KB內(nèi)部4KBEA=1外部4KBEA=0外部數(shù)據(jù)存儲(chǔ)器64KB0FFFH0000H0000H0FFFFH0FFFH0000H片內(nèi)RAM(256B)片外RAM(64KB)0FFFFH1000H片內(nèi)、外ROM(64KB)特殊功能寄存器SFR數(shù)據(jù)緩沖區(qū)(普通RAM區(qū))80H00H1FH20H2FH30H7FH80H52子系列才有的擴(kuò)展RAM區(qū)128B位地址區(qū)工作寄存器區(qū)0FFH00FFHidataxdatapdata0FFH例:變量定義存儲(chǔ)種類(lèi)和存儲(chǔ)器類(lèi)型相關(guān)情況。

unsignedchardata

varl;

//在片內(nèi)RAM中的data區(qū)定義無(wú)符號(hào)字符型變量Var1

unsignedintidatavar2;

//在片內(nèi)RAM中的idata區(qū)定義無(wú)符號(hào)整型變量Var2

externfloatxdatavar3;

//在片外RAM中的xdata區(qū)定義實(shí)型外部變量Var3

intcodevar4=5;

//在ROM空間定義整型變量var4并賦值4*/

unsignedcharbdatavar5;

//在片內(nèi)RAM中的bdata區(qū)定義可字節(jié)處理和位處理的無(wú)符號(hào)字符型變量var5思考

inti;內(nèi)部數(shù)據(jù)存儲(chǔ)器外部數(shù)據(jù)存儲(chǔ)器程序存儲(chǔ)器省略存儲(chǔ)器類(lèi)型關(guān)鍵字定義的i被編譯后會(huì)放在哪里????三種存儲(chǔ)模式變量默認(rèn)為data存儲(chǔ)類(lèi)型小模式變量默認(rèn)為pdata存儲(chǔ)類(lèi)型中模式變量默認(rèn)為xdata存儲(chǔ)類(lèi)型大模式缺省默認(rèn)情況(二)變量的存儲(chǔ)模式

---C51特有

(三)指針聲明方式數(shù)據(jù)類(lèi)型存儲(chǔ)類(lèi)型(指針指向位置)存儲(chǔ)類(lèi)型(指針存放位置)

*變量名

如:unsignedcharxdata*datap1;如:unsignedint

xdata*datap2;指向idata、data和pdata的存儲(chǔ)器指針用1個(gè)字節(jié)保存

指向code和xdata的存儲(chǔ)器指針用2個(gè)字節(jié)保存idata

、bdata、data、pdata、xdataidata

、bdata、data、code、pdata、xdata3個(gè)字節(jié),通用型指針,未指明存儲(chǔ)器空間

unsignedchar*point1; unsignedint*point2;2個(gè)字節(jié),指向16位尋址的存儲(chǔ)器空間

unsigned

int

code*point1; unsigned

int

xdata*point2;1個(gè)字節(jié),指向8位尋址的存儲(chǔ)器空間

unsigned

chardata*point1; unsigned

charidata*point2; unsigned

charpdata*point3;

采用指針的方法,可以實(shí)現(xiàn)在C51程序中對(duì)任意指定的存儲(chǔ)器單元進(jìn)行訪問(wèn)。顯示指針與通用指針的對(duì)比描述idata指針xdata指針通用指針C源程序idatachar*ip;charval;val=*ip;xdatachar*xp;charval;val=*xp;char*p;charval;val=*p;編譯后的匯編代碼MOVR0,ipMOVval,@R0MOVDPL,xp+1MOVDPH,xpMOVXA,@DPTRMOVval,AMOVDPL,pMOVDPH,p+1MOVB,p+2LCALL__gptrget指針大小1字節(jié)2字節(jié)3字節(jié)代碼長(zhǎng)度4字節(jié)9字節(jié)11字節(jié)+庫(kù)調(diào)用執(zhí)行時(shí)間4周期7周期遠(yuǎn)大于13周期通用指針使用方便,但速度慢顯式指針效率高、速度快,但尋址范圍小例1:通過(guò)指針實(shí)現(xiàn)絕對(duì)地址的訪問(wèn)。typedefunsignedcharuchar;//定義符號(hào)uchar為數(shù)據(jù)類(lèi)型符unsignedchartypedefunsignedint

uint;//定義符號(hào)uint為數(shù)據(jù)類(lèi)型符unsignedintvoidmain(void){

uchardata*dp1;//定義一個(gè)指向data區(qū)的指針dp1

uintxdata*dp2;//定義一個(gè)指向xdata區(qū)的指針dp2 dp1=0x30;//dp1指針賦值,指向data區(qū)的30H單元

dp2=0x1000;//dp2指針賦值,指向xdata區(qū)的1000H單元 *dp1=0x55;//將數(shù)據(jù)0x55送到片外RAM30H單元 *dp2=0x1234;//將數(shù)據(jù)0x1234送到片外RAM1000H單元

while(1);}(二)特殊功能寄存器變量的定義---C51特有

定義后可實(shí)現(xiàn)C51中對(duì)特殊功能寄存器的訪問(wèn)databdata特殊功能寄存器sfr數(shù)據(jù)緩沖區(qū)(普通RAM區(qū))80H00H1FH20H2FH30H7FH80H0FFH52子系列才有的RAM區(qū)位地址區(qū)工作寄存器區(qū)0FFH0FFHidata片內(nèi)RAM(256B)

MSC-51系列包括多種寄存器,其中一些具有特殊功能,如定時(shí)器,端口的控制寄存器等,為了能夠直接訪問(wèn)這些寄存器,C51編譯器提供了一種定義的自主形式,這是必要的,因?yàn)檫@些定義與標(biāo)準(zhǔn)C語(yǔ)言是不兼容的。為了支持這些特殊功能寄存器(SFR)的聲明,引入了關(guān)鍵詞“sfr”,語(yǔ)法如下:

sfr

特殊功能寄存器名=地址;sfr16特殊功能寄存器名=地址;

//定義8051的8位寄存器:

sfrP0=0x80;

//定義8051的狀態(tài)字寄存器P0,地址為0X80。

sfrP1=0x90;

//定義8051的狀態(tài)字寄存器P1,地址為0X90。

sfrPSW=0xd0;

//定義8051的狀態(tài)字寄存器PSW,地址為0XD0。

sfrSCON=0x98;

//定義8051的串行控制寄存器SCON,地址為0X98。

sfrTMOD=0x89;//定義8051的定時(shí)器模式寄存器TMOD,地址為0X89。

//定義8051的其他16位寄存器:sfr16DPTR=0x82;//sfrDPH=0X83sfrDPL=0X82

(二)特殊功能寄存器變量的定義---C51特有

定義后可實(shí)現(xiàn)C51中對(duì)特殊功能寄存器的訪問(wèn)例:sfrP0=0X80;sfrP1=0X90;sfr16DPTR=0X82;voidmain(void){ P0=0X55; P1=0X66; DPTR=0X1234;

while(1);}可以改成以下程序#include<regx51.h>sfr16DPTR=0X82;voidmain(void){ P0=0X55; P1=0X66; DPTR=0X1234;

while(1);}大家可以看看書(shū)上后面的單片機(jī)的程序,一般都包含有#include<regx51.h>(三)位變量的定義---C51特有

定以后實(shí)現(xiàn)C51中對(duì)位地址的訪問(wèn)databdata特殊功能寄存器sfr數(shù)據(jù)緩沖區(qū)(普通RAM區(qū))80H00H1FH20H2FH30H7FH80H0FFH52子系列才有的RAM區(qū)位地址區(qū)工作寄存器區(qū)0FFH0FFHidata片內(nèi)RAM(256B)低128字節(jié)RAM區(qū)—128個(gè)高128字節(jié)RAM區(qū)(SFR區(qū))--83個(gè)

在C51中,允許用戶通過(guò)位類(lèi)型符定義位變量。位類(lèi)型符有兩個(gè):bit和sbit??梢远x兩種位變量。(1)bit位類(lèi)型符用于定義一般的可位處理位變量。格式:bit位變量名;

在格式中可以加上各種修飾,但注意存儲(chǔ)器類(lèi)型只能是bdata、data、idata。只能是片內(nèi)RAM的可位尋址區(qū),嚴(yán)格來(lái)說(shuō)只能是bdata。例:bit型變量的定義。

bitidataflag1; √

bitdataflag2; √

bitbdataflag3; √

bitpdataflag4; × bitxdataflag5; × bit*p ×

bitstring[5] ×

bitfunc(bita1,bita2)

√可以定義函數(shù)例1:

voidmain(void) { bitbdataflag1,flag2; flag1=0; flag2=1; while(1); }例2:

bitbdataflag1,flag2;voidmain(void) {

flag1=0; flag2=1; while(1); }低128字節(jié)RAM區(qū)—128個(gè)在典型的8051單片機(jī)應(yīng)用問(wèn)題中,經(jīng)常需要單獨(dú)訪問(wèn)SFR中的位,C51擴(kuò)充功能使之成為可能,特殊位,象SFR一樣,不與標(biāo)準(zhǔn)C語(yǔ)言兼容,使用保留字“sbit”可訪問(wèn)位尋址對(duì)象。與SFR聲明一樣,用保留字“sbit”聲明某些特殊位接受符號(hào)名,“=”后語(yǔ)句將絕對(duì)值地址賦給變量名,這種地址分配有三種方法:方法1:sbit

變量名=sfr_name^int_constant

當(dāng)字節(jié)是特殊功能寄存器的地址可用這個(gè)方法。sfr_name必須是已定義的SFR的名字,“^”后的語(yǔ)句定義了基地址上的特殊位的位置,該位置必須是一個(gè)0~7的數(shù)。例1: sfrPSW=0xD0;

sbitOV=PSW^2;

sbitCY=PSW^7;(2)sbit位類(lèi)型符方法2:sbit變量名=int_constant^int_constant

這種方法以一整常數(shù)作基地址,該值必須在0x80~0xFF之間,并能被8整除,確定位的位置方法同上。 例2:sbitOV=0xD0^2;

sbitCV=0xD0^7;

方法3:sbit

變量名=int_constant----此方法最常用

這種方法是將位的絕對(duì)地址賦給變量,地址必須位于0x80~0xFF之間。 例3:sbitOV=0xD2;

sbitCY=0xD7;特殊功能位代表了一個(gè)獨(dú)立的聲明類(lèi),它不能與其它聲明和位域互換。高128字節(jié)RAM區(qū)(SFR區(qū))--83個(gè)例:sbitP0_0=0x80;

sbitP0_0=0X80^0;

sfrP0=0X80;

sbitP0_0=P0^0;

voidmain(void){ P0_0=0; P0_0=1; while(1);}方法一方法二方法三低128字節(jié)RAM區(qū)—128個(gè)unsignedcharbdataflag;sbitflag0=flag^0;voidmain(void){ flag=0x55; flag0=1; while(1);}---------------------------------unsignedint

bdataflag;sbitflag0=flag^15;voidmain(void){ flag=0x55; flag0=1; while(1);}

注意:在此區(qū)域不允許使用:

sbitflag0=0x20;或sbitflag0=0x24^0;三、C51絕對(duì)地址的訪問(wèn)databdatacode外部程序空間

60K內(nèi)部4KEA=1外部4KEA=0外部數(shù)據(jù)存儲(chǔ)器64KB0FFFH0000H0000H0FFFFH0FFFH0000H片內(nèi)RAM(256B)片外RAM(64KB)0FFFFH1000H0FFFFH片內(nèi)、外ROM(64KB)特殊功能寄存器sfr數(shù)據(jù)緩沖區(qū)(普通RAM區(qū))80H00H1FH20H2FH30H7FH80H0FFH52子系列才有的RAM區(qū)位地址區(qū)工作寄存器區(qū)0FFH0FFH00FFHidataxdatapdata

C51編譯器提供了一組宏定義來(lái)對(duì)51系列單片機(jī)的code、data、pdata和xdata空間進(jìn)行絕對(duì)尋址。規(guī)定只能以無(wú)符號(hào)數(shù)方式訪問(wèn),定義了8個(gè)宏定義,其函數(shù)原型如下:

#defineCBYTE((unsignedcharvolatilecode*)0)#defineDBYTE((unsignedcharvolatiledata*)0)#definePBYTE((unsignedcharvolatilepdata*)0)#defineXBYTE((unsignedcharvolatilexdata*)0)#defineCWORD((unsignedintvolatilecode*)0)#defineDWORD((unsignedintvolatiledata*)0)#definePWORD((unsignedintvolatilepdata*)0)#defineXWORD((unsignedintvolatilexdata*)0)

這些函數(shù)原型放在absacc.h文件中。使用時(shí)須用預(yù)處理命令把該頭文件包含到文件中,形式為:#include<absacc.h>。(一)采用C51中的預(yù)定義宏的方式訪問(wèn)

例1:絕對(duì)地址對(duì)存儲(chǔ)單元的訪問(wèn)#include<absacc.h>//將絕對(duì)地址頭文件包含在文件中typedefunsignedcharuchar;typedefunsignedint

uint;voidmain(void){

ucharvar1;//定義變量var1

uintvar2;//定義變量var2

var1=XBYTE[0x0005];

//XBYTE[0x0005]訪問(wèn)片外RAM的0005字節(jié)單元

var2=XWORD[0x0002];//

XWORD[0x0002]實(shí)質(zhì)是訪問(wèn)的是片外RAM的0002字單元

DBYTE[0x30]=0X55; XBYTE[0x0002]=0X66; DWORD[0x40]=0X1234; XWORD[0x0000]=0X1234; while(1);}(二)通過(guò)指針?lè)绞皆L問(wèn)3個(gè)字節(jié),通用型指針,未指明存儲(chǔ)器空間

unsignedchar*point1; unsignedint*point2;2個(gè)字節(jié),指向16位尋址的存儲(chǔ)器空間

unsigned

int

code*point1; unsigned

int

xdata*point2;1個(gè)字節(jié),指向8位尋址的存儲(chǔ)器空間

unsigned

char

data*point1; unsigned

char

idata*point2; unsigned

char

pdata*point3;

采用指針的方法,可以實(shí)現(xiàn)在C51程序中對(duì)任意指定的存儲(chǔ)器單元進(jìn)行訪問(wèn)。例1:通過(guò)指針實(shí)現(xiàn)絕對(duì)地址的訪問(wèn)。typedefunsignedcharuchar;//定義符號(hào)uchar為數(shù)據(jù)類(lèi)型符unsignedchartypedefunsignedint

uint;//定義符號(hào)uint為數(shù)據(jù)類(lèi)型符unsignedintvoidmain(void){

uchardata*dp1;//定義一個(gè)指向data區(qū)的指針dp1

uintxdata*dp2;//定義一個(gè)指向xdata區(qū)的指針dp2 dp1=0x30;//dp1指針賦值,指向data區(qū)的30H單元

dp2=0x1000;//dp2指針賦值,指向xdata區(qū)的1000H單元 *dp1=0x55;//將數(shù)據(jù)0x55送到片外RAM30H單元 *dp2=0x1234;//將數(shù)據(jù)0x1234送到片外RAM1000H單元

while(1);}例2:通過(guò)指針實(shí)現(xiàn)絕對(duì)地址的訪問(wèn)。typedefunsignedcharuchar;typedefunsignedint

uint;

voidmain(void){

uchardatax;

uchar

idata*p1;//定義一個(gè)指向idata區(qū)的指針p1 p1=&x;//p1指針指向data區(qū)的x變量 *p1=0x55;//等價(jià)于給變量x賦值0x55 while(1);}例3:通過(guò)指針實(shí)現(xiàn)絕對(duì)地址的訪問(wèn)。typedefunsignedcharuchar;typedefunsignedint

uint;voidmain(void){

uchardatax=9,y;

uchar

idata*p1;//定義一個(gè)指向idata區(qū)的指針p1 p1=&x;//p1指針指向data區(qū)的x變量

y=*p1;//執(zhí)行完后y的值位9 while(1);}例4:統(tǒng)計(jì)片外RAM中2000H地址開(kāi)始的16個(gè)單元中0的個(gè)數(shù),將統(tǒng)計(jì)個(gè)數(shù)存入片外的2100單元。typedefunsignedcharuchar;typedefunsignedint

uint;voidmain(void){

uint

n=0,i;

uchar

xdata*p=0x2000;//指針p指向xdata

區(qū)的2000H單元

for(i=0;i<16;i++) {

if(*p==0)n++;//若該單元內(nèi)容為零,則n+1 p++; //指針指向下一單元

} p=0x2100; //指針p指向2100H單元

*p=n; //把個(gè)數(shù)放在2100H單元中

while(1);}

使用_at_

對(duì)指定的存儲(chǔ)器空間的絕對(duì)地址進(jìn)行訪問(wèn)。一般格式:數(shù)據(jù)類(lèi)型說(shuō)明符[存儲(chǔ)器類(lèi)型]變量名_at_地址常數(shù);其中,存儲(chǔ)器類(lèi)型為data、

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論