历史上的今天
返回首页

历史上的今天

今天是:2026年03月24日(星期二)

正在发生

2023年03月24日 | 单片机指针基本知识

2023-03-24 来源:zhihu

一、单片机指针是什么?

单片机指针是指某个变量或数据所在存储区的内存地址

二、单片机指针有什么作用?

能够有效地表示数据结构,能动态分配内存,能较方便地使用字符串,有效地使用数组。

三、单片机指针咋么表示?

数据类型 [存储器类型] * 变量名,例如: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

#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

#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    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);

    }

   }                                                         

  }

推荐阅读

史海拾趣

Advanced Ceramic X Corporation公司的发展小趣事

非常抱歉,由于我无法直接获取到Advanced Ceramic X Corporation公司的具体发展细节,因此无法为您直接编写关于该公司发展的五个具体故事。然而,我可以为您提供一种构建这类故事的框架,您可以根据这个框架,结合公司的公开信息,来编写符合要求的故事。

故事框架示例

故事一:技术突破引领市场

Advanced Ceramic X Corporation自成立以来,一直致力于陶瓷材料的研究与开发。某年,公司成功研发出一种具有极高耐高温性能的新型陶瓷材料,这一技术突破使得公司在航空航天领域获得了广泛应用,推动了公司的快速发展。随着技术的不断完善和市场需求的增长,公司逐渐成为了陶瓷材料领域的领军企业。

故事二:国际合作拓宽市场

为了进一步扩大市场份额,Advanced Ceramic X Corporation积极寻求国际合作机会。公司与欧洲一家知名陶瓷材料公司签订了战略合作协议,共同开发新型陶瓷产品。这一合作不仅提高了公司的技术水平,还拓宽了公司的国际市场,使得公司的产品在全球范围内得到了广泛应用。

故事三:环保理念驱动创新

在环保意识日益增强的背景下,Advanced Ceramic X Corporation积极响应国家环保政策,将环保理念融入产品研发和生产过程中。公司成功研发出一种环保型陶瓷材料,该材料不仅具有优异的性能,而且在生产过程中产生的污染极低。这一创新举措赢得了客户的广泛赞誉,也提升了公司的品牌形象。

故事四:人才培养与团队建设

Advanced Ceramic X Corporation深知人才是企业发展的核心动力。公司注重人才培养和团队建设,通过定期举办技术培训、团队建设活动等方式,提高员工的业务能力和团队协作能力。同时,公司还积极引进国内外优秀人才,为公司的长远发展奠定了坚实的基础。

故事五:社会责任与公益事业

作为一家有社会责任感的企业,Advanced Ceramic X Corporation积极参与公益事业。公司捐资支持教育事业、扶贫济困等公益活动,为社会发展贡献自己的力量。同时,公司还关注员工福利,为员工提供良好的工作环境和福利待遇,增强了员工的归属感和忠诚度。

请注意,上述故事仅为示例,并未涉及Advanced Ceramic X Corporation公司的具体发展情况。您可以根据公司的实际情况和公开信息,结合上述框架来编写符合要求的故事。在编写过程中,请确保只描述事实,避免加入个人主观评价。

Crystek公司的发展小趣事

为了更好地满足客户需求和推动业务发展,Crystek公司设立了专门负责频率控制的部门——Crystek Crystals和Crystek Microwave。这两个部门分别致力于开发和制造使用石英谐振器的频率产品以及为微波行业开发频率控制和支持产品。这种专业化的分工不仅提高了公司的运营效率,也使得Crystek公司能够更好地为客户提供定制化的解决方案和优质的服务。

高创科技(gotrend)公司的发展小趣事

随着科技的快速发展和市场的不断变化,Crystek公司意识到只有不断创新才能保持竞争优势。因此,公司加大了研发投入,积极引进先进技术,推出了一系列具有创新性和竞争力的新产品。其中,温度补偿晶体振荡器(TCXO)和压控晶体振荡器(VCXO)等产品的推出,不仅提升了Crystek公司的技术实力,也进一步巩固了其在行业中的领先地位。同时,公司还不断优化生产工艺和质量控制体系,确保产品的高性能和可靠性。

德索五金(dosinconn)公司的发展小趣事
芯力微(CHI Power)公司的发展小趣事

面对日益激烈的市场竞争,芯力微不断推动创新,以应对市场的变化。在电源管理领域,公司不断研发新技术、新产品,以满足客户日益增长的需求。同时,芯力微还积极拓展新的应用领域,如物联网、汽车电子等,为公司的发展开辟了新的道路。这种持续的创新精神使得芯力微在电子行业中始终保持领先地位。

Eurofarad公司的发展小趣事

在追求经济效益的同时,Eurofarad也积极履行社会责任,注重环保和可持续发展。公司采用环保材料和绿色生产工艺,降低生产过程中的能耗和排放。同时,Eurofarad还积极参与环保公益活动,推动电子行业的绿色发展。这些举措不仅提升了公司的社会形象,也为公司的长远发展奠定了基础。

问答坊 | AI 解惑

数字电子签名的概念及技术

要理解什么是电子签名,需要从传统手工签名或盖印章谈起。在传统商务活动中,为了保证交易的安全与真实,一  份书面合同或公文要由当事人或其负责人签字、盖章,以便让交易双方识别是谁签的合同,保证签字或盖章的人认可合  同的内容,在法律上 ...…

查看全部问答>

以后着地方一定要长来,着的资料很有价值.

以后着地方一定要长来,着的资料很有价值.现在用STM32在做项目了,以后希望大家能帮助,谢谢.…

查看全部问答>

arm接口技术

最近开始学arm编程,觉得arm的接口技术很重要。 像中断,RTC ,UART,SIO ,IIC等 这些东西把我搞的很晕,不知道具体从哪开始,一直看数据手册那上面都是关于寄存器的知识,虽然记了但是还是不知道该从何做起。想做一个接口实验,希望各位高手给以指 ...…

查看全部问答>

低噪声放大器(LNA)设计指南

低噪声放大器(LNA)设计指南…

查看全部问答>

请教注册表的一个问题

请教各位高手,注册表[HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\PCI\\VEN_1022&DEV_2000&SUBSYS_20001022&REV_10\\3&61aaa01&0&88]中3&61aaa01&0&88代表什么意思?谢谢!…

查看全部问答>

WinCE上有现成的监控注册表的类或方法吗?

WinCE上有现成的监控注册表的类或方法吗?  当有改变时,应用程序可知道.…

查看全部问答>

如何利用程序向自身串口发送数据?

本人要用VB和数据库结合下位机单片机做一个数据采集系统,但是因为硬件原因现在不方便焊板子来调试。要用VB的串口控件来接受串口的数据,再导入数据库和VB里面数据处理。请问大家有什么软件模拟外部向机器串口发数据,使得VB的控件能接受到。 恳请 ...…

查看全部问答>

版主主:请教一个问题,谢谢!!

以前是用STM32F103V8的,这次我换成了STM32F103VB,买了30,可是出现问题了,共焊接了两块板,一块板的晶振只会在偶尔上电时会起振(11.0592M),而另一块板子可以起振,但程序跑起来不对,而我又把以前板子的STM32F103V8换到这块板子上来又是好 ...…

查看全部问答>

问个弱弱的问题,大家不要见笑

事情是这样的,我想做块板子,用C6416接一个线阵CCD实现视频采集,现在CCD的驱动板是PCI接口,我想把数据传到dsp里面该如何实现呢?6416有个HPI口,mcbsp口,通过这俩口能实现数据传输码?如果能,大体思路是什么呢?望高手指教一二啊…

查看全部问答>

TIVA launchpad 串口实验

觉得还是串口这个好玩   就是按照教程里那样选择板子占用的串口 我的是这样的比视频那里的列表多了一行(为了看看调试会不会把原来的程序改了 结果就把原来板子的整没了  后来从新下的  sw里  qs-rgb ...…

查看全部问答>