如何取 int a[]的指针值呢? 51单片机pc指针

如何取 int a[]的指针值呢? 51单片机_百度知道
如何取 int a[]的指针值呢? 51单片机
提问者采纳
直接用a放进指针就行了,或者&a[0]
提问者评价
太给力了,你的回答完美的解决了我的问题!
来自团队:
其他类似问题
为您推荐:
51单片机的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁51系列单片机习题答案_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
评价文档:
51系列单片机习题答案
上传于||暂无简介
大小:222.00KB
登录百度文库,专享文档复制特权,财富值每天免费拿!
你可能喜欢51单片机学习笔记_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
51单片机学习笔记
上传于||文档简介
&&5入​门
阅读已结束,如果下载本文需要使用
想免费下载本文?
下载文档到电脑,查找使用更方便
还剩5页未读,继续阅读
你可能喜欢单片机c语言教程:c51运算符和表达式(指针和地址运算符)_单片机_中国百科网
单片机c语言教程:c51运算符和表达式(指针和地址运算符)
    我们学习数据类型时,学习过指针类型,知道它是一种存放指向另一个数据的地址的变量类型。指针是单片机c语言中一个十分重要的概念,也是学习单片机c语言中的一个难点。对于指针将会在第九课中做详细的讲解。在这里我们先来了解一下单片机c语言中供给的两个专门用于指针和地址的运算符:* 取内容& 取地址取内容和地址的一般形式分别为:变量 = * 指针变量 指针变量 = & 目标变量取内容运算是将指针变量所指向的目标变量的值赋给左边的变量;取地址运算是将目标变量的地址赋给左边的变量。要注意的是:指针变量中只能存放地址(也就是指针型数据), 一般情况下不要将非指针类型的数据赋值给一个指针变量。下面来看一个例子,并用一个图表和实例去简单理解指针的使用方法和含义。设有两个 unsigned int 变量 abc 处 cba 存放在 0xa 中 另有一个指针变量 porta 存放在 0x002c 中 那么我们写这样一段程序去看看*,&的运算结果unsigned int data abc _at_ 0x0028; unsigned int data cba _at_ 0x002a; unsigned int data *port _at_ 0x002c;#include &at89x51.h>#include &stdio.h>void main(void){scon = 0x50; //串行口方式 1,允许接收 tmod = 0x20; //定时器 1 定时方式 2th1 = 0xe8; //11.0592mhz 1200 波特率 tl1 = 0xe8;ti = 1;tr1 = 1; //启动定时器abc = 10; //设初值 cba = 20;port = & //取 cba 的地址放到指针变量 port*port = 100; //更改指针变量 port 所指向的地址的内容printf("1: cba=%dn",cba); //显示此时 cba 的值port = & //取 abc 的地址放到指针变量 portcba = * //把当前 port 所指的地址的内容赋给变量 cbaprintf("2: cba=%dn",cba); //显示此时 cba 的值printf(" abc=%dn",abc); //显示 abc 的值}程序初始时值地址说明0x000x002dh0x000x002ch0x000x002bh0x000x002ah0x0a0x0029h0x000x0028h执行 abc = 10;向 abc 所指的地址 0x28h 写入 10(0xa),因 abc 是 int 类型要占用 0x28h 和0x29h 两个字节的内存空间,低位字节会放入高地址中,所以 0x28h 中放入 0x00,0x29h 中 放入 0x0a值地址说明0x000x002dh0x000x002ch0x000x002bh0x000x002ah0x0a0x0029habc 为 int 类型占用两字节0x000x0028h执行 cba = 20;原理和上一句一样值地址说明0x000x002dh0x000x002ch0x140x002bhcba 为 int 类型占用两字节0x000x002ah0x0a0x0029habc 为 int 类型占用两字节0x000x0028h执行 port = & 取 cba 的首地址放到指针变量 port值地址说明0x000x002dh0x2a0x002chcba 的首地址存入 port0x140x002bh0x000x002ah0x0a0x0029h0x000x0028h*port = 100; 更改指针变量 port 所指向的地址的内容值地址说明0x000x002dh0x2a0x002ch0x640x002bhport 指向了 cba 所在地址 2ah0x000x002ah并存入 1000x0a0x0029h0x000x0028h其它的语句也是一样的道理,大家能用 keil 的单步执行和打开存储器查看器一看,这样就更不难理解了。图 9-1 存储器查看窗图 9-2 在串行调试窗口的最终结果[1][2][3] [4]分享到:qq空间新浪微博腾讯微博人人网更多相关阅读单片机c语言教程:c51函数单片机c语言教程:c51数组的使用单片机c语言教程:c51指针的使用单片机c语言教程:c51hex文件的生成和单片机最小系统单片机c语言教程:附录1 c51编译器的扩展关键字单片机c语言教程:附录2 at89c51特殊功能寄存器列表单片机c语言教程:附录3 运算符优先级和结合性单片机c语言教程:建立你的第一个keilc51项目单片机c语言教程:c51变量单片机c语言教程:c51常量单片机c语言教程:c51数据类型编辑:什么鱼本文引用地址:.cn/mcu//article_10507.html[发表评论][加入收藏][告诉好友][打印本页][关闭窗口][返回顶部][rss订阅]小广播每日新闻[物联网]我国物联网发展的整体...[led]变形led制作有新招: 氮...[半导体]助海思量产,台积16纳米...[数字电视]长虹退出等离子业务 ...[物联网]深度解析当前智能终端...[手机便携]mtk: 2015下半年64位处...[半导体]两位迟到者的互救:英特...[嵌入式]arm cortex m7增强性...精彩图片三星平板将采用 clover trail+ 芯片谷歌眼镜vs苹果iwatch:谁将胜出谷歌眼镜加入人脸识别功能?请先考虑隐私问题传苹果调整手机战略 高端iphone 5s将有多色选择推荐视频模拟电子电路视频教程cirrus控制器调光兼容最热点击陈光祖:单片机是汽车电子业发展基...《财报》瑞萨上季业绩超标 营益...arm简史:竟然是不务正业的副产品arm签署第50份64位armv8-a的技术...atmel推出下一代智能计量片上系...amd公布首款arm架构皓龙a1100芯...mcu今年销售年增率 ic insights...新唐科技重磅推出cortex?-m4 微...强化功率元件 mcu厂猛攻直流变...海思推16nm finfet工艺32核 a57 ...本周热门资源推荐eeworld独家博通cto:摩尔定律未来10年后或结束从幕后走向台前的nuancer&s公司推出高端仪表:矢量信号发生器smw200aavr架构发明人:与众不同 方能成功ti创新智能电网解决方案推动中国电网发展英特尔抢占平板电脑市场份额智能手机系统芯片(socs)依然缺乏良好的软件模型英特尔:应对大数据需经历三阶段发展arm公布2013年一季度财报,营收增26%英特尔的制造优势要远远超过你的想象论坛精华stm32 nucleo板卡智勇大闯关启动!ti 样片免费申请,晒样片赢好礼&#97...英特尔有奖下载之七强势登陆,奖品?..atmel sam d21 xplained pro 开发板...ti首届低功耗设计大赛之玩转msp430 ...精选博文性格内向的人面试技巧那些年,我们申请过的开发板!!--电子行业职业技能鉴定工作站espier2.00开发板上架eeworld版主规则及版主操作1.变量赋值时发生的隐式转换,“=”号右边的表达式的数据类型转换成左边变量的数据类型。就如上面例子中的把 int 赋值给 char 字符型变量,得到的 char 将会是 int 的低 8 位。如把浮点数赋值给整形变量,小数部分将丢失。2.所有 char 型的操作数转换成 int 型。3.两个具有不一样数据类型的操作数用运算符连接时,隐式转换会按以下次序进行:如 有一操作数是 float 类型,则另一个操作数也会转换成 float 类型;如果一个操作数为 long 类型,另一个也转换成 long;如果一个操作数是 unsigned 类型,则另一个操作会被转换成 unsigned 类型。从上面的规则能大概知道有那几种数据类型是能进行隐式转换的。是的,在 单片机c语言 中只有 char,int,long 及 float 这几种基本的数据类型能被隐式转换。而其它的数据类型 就只能用到显示转换。要使用强制转换运算符应遵循以下的表达形式:(类型) 表达式 用显示类型转换来处理不一样类型的数据间运算和赋值是十分方便和方便的,特别对指针变量赋值是很有用的。看一面一段小程序:#include &at89x51.h>#include &stdio.h>void main(void){char xdata *int aa = 0xfb1c;long ba = 0x893b7832;float ca = 3.4534;scon = 0x50; //串行口方式 1,允许接收 tmod = 0x20; //定时器 1 定时方式 2th1 = 0xe8; //11.0592mhz 1200 波特率 tl1 = 0xe8;ti = 1;tr1 = 1; //启动定时器xrom=(char xdata *) 0xb012; //给指针变量赋 xrom 初值*xrom = ‘r’; //给 xrom 指向的绝对地址赋值a = *((char xdata *) 0xb012); //等同于 a = *xromprintf (“%bx %x %d %c n”,(char) aa, (int) ba,(int)ca, a);//转换类型并输出while(1);}程序运行结果:1c 7832 3 r 在上面这段程序中,能很清楚到到各种类型进行强制类型转换的基本使用方法,程序中先在外部数据存储器 xdata 中定义了一个字符型指针变量 xrom,当用 xrom=(char xdata *)0xb012 这一语句时,便把 0xb012 这个地址指针赋于了 xrom,如你用 xrom 则会是非法的, 这种方法特别适合于用标识符来存取绝对地址,如在程序前用#define rom 0xb012 这样的 语句,在程序中就能用上面的方法用 rom 对绝对地址 0xb012 进行存取操作了。
Copyright by ;All rights reserved.51单片机:如何定义一个指向I/-中国学网-中国IT综合门户网站
> 信息中心 >
51单片机:如何定义一个指向I/
来源:互联网 发表时间: 17:47:24 责任编辑:鲁晓倩字体:
为了帮助网友解决“51单片机:如何定义一个指向I/”相关的问题,中国学网通过互联网对“51单片机:如何定义一个指向I/”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:51单片机:如何定义一个指向I/O口的指针?,具体解决方案如下:解决方案1:我想做一个按键程序,按1号键的时候,P1^1口闪,按2号键的时候P1^2口闪,代码是这么写的:
sbit Red = P1^1; //P1-1口控制红灯
sbit Green = P1^2; //P1-2口控制绿灯
bit *C //指向这两个IO口的指针
if (按键值 == 1)
Color = R //如果按1号键,Color指向P1-1
else if (按键值 == 2)
Color = G //如果按2号键,Color指向P1-2
Color = !C//对应的灯闪
结果编译出错,还请高手指正,不甚感激!解决方案2:你定义的color是指针变量,而你把它当位变量用了。如果color是指针,就只能传递地址,不能传递数值。而P1^1P和1^2里是数值(位值);
bit *C //指向这两个IO口的指针
如果要用指针,可以这样:
sbit Red = P1^1; //P1-1口控制红灯
sbit Green = P1^2; //P1-2口控制绿灯
bit *C //指向这两个IO口的指针
if (按键值 == 1)
*Color = R //如果按1号键,Color指向P1-1
else if (按键值 == 2)
*Color = G //如果按2号键,Color指向P1-2
*Color = !C//对应的灯闪
*color表示color所指向地址的内容。
2个回答5个回答5个回答8个回答4个回答7个回答4个回答1个回答5个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答1个回答
相关文章:
最新添加资讯
24小时热门资讯
Copyright © 2004- All Rights Reserved. 中国学网 版权所有
京ICP备号-1 京公网安备02号

我要回帖

更多关于 单片机指针式时钟 的文章

 

随机推荐