單片機指針


一、單片機指針是什么?

單片機指針是指某個變量或數據所在存儲區的內存地址

 二、單片機指針有什么作用?

 能夠有效地表示數據結構,能動態分配內存,能較方便地使用字符串,有效地使用數組。

三、單片機指針咋么表示?

 數據類型  [存儲器類型]  *  變量名,例如:int xdata * pi,其中*是指針運算符,pi是指針變量,*pi表示某變量或數據所在存儲區地址所對應的數值。

四、單片機指針賦值方式

(1)、不用聲明單片機指針變量的情況下賦值

int a=5;//定義變量a

int *p=&a;//表示把變量a所在內存地址(由內存器分配)存放的數據5賦給指針變量p

(2)、聲明單片機指針變量的情況下賦值

int a=5;//定義變量a

int *p;//聲明指針變量p

p=&a;//表示把變量a所在內存地址(由內存器分配)賦給指針變量p,作為指針變量p所在內存地址(由內存器分配)存放的數據。

value=*p;//表示把指針變量p對應變量a所在內存地址(由內存器分配)存放的數據5賦給變量value

五、單片機指針通俗理解

由上圖可知:變量STR內存地址51H存放數據40H,要通過變量STRIP獲取變量STR內存地址51H存放的數據40H,可使用單片機指針(某個變量或數據所在存儲區的內存地址)來完成。首先讓變量STRIP獲取變量STR內存地址51H,表達方式為STRIP=&STR,由此可見指針(即變量STRIP)存儲的數據是另一個變量(即變量STR)的內存地址),再獲取變量STR內存地址51H存放的數據40H賦給某一個變量即可,表達方式為VALUE=*STRIP,也可表示為int *STRIP=&STR。

六、單片機指針咋么用?

(1)、用單片機指針編程點亮LED燈的單片機C語言程序

#include<reg51.h>
#define uchar unsigned char
sbit LED = P1^0;
uchar  table[] = {0,1};//定義數組
uchar *pi;//聲明指針變量
   void main()
{
    while(1)
 {
     pi = table;//把數組變量table里的第一個元素0所在內存地址(由內存器分配)賦給指針變量pi,也可這樣表示:pi = &table[0],其表達意義一樣。
     LED = *pi;//*pi表示取指針變量pi所指內存地址(由內存器分配)對應的值(即數組table[]中的第一個元素0)賦給led,如果是要數組里面第二個元素1這一步就該寫成*(pi+1)。
    }                                                         
  }

(2)、用單片機指針編程循環點亮8 位LED流水燈的單片機C語言程序

#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
uchar *pi;//聲明指針變量
uchar code table[]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};//定義數組
  void delay(uint t)
{
   uchar m,n;
   for(m=0;m<t;m++)
    for(n=0;n<110;n++);
  }
  void main()
{
   uchar i;
   while(1)
 {
    for(i=0;i<8;i++)
  {
     pi = table;//把數組變量table里的第一個元素所在內存地址(由內存器分配)賦給指針變量pi,也可這樣表示:pi = &table[0],其表達意義一樣。
     P1 = *(pi+i);//*(p+i)表示取指針變量pi所指向數組變量table內元素所在內存地址對應的值賦給P1端口,比如:把數組變量table內的第一個元素(即0xFE)所在內存地址(由內存器分配)對應的值(即table內的第一個元素0xFE)賦給P1端口。
     delay(220);
    }
   }                                                         
  }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM