arduino和单片机的区别数组变量

51单片机的一个赋值问题--数组
本帖最后由 and001 于
11:49 编辑
存在如下一个赋值问题:
我的目的是将一个4位数分别单独转换成数字显示出来:
unsigned ring_lengther[2]={};
unsigned ring_& &
unsinged k2,
& && &&&ring_lengther=ring_length;
& && && &k2= ring_length/1000;
& && && &k3=ring_length%;
& && && &k4=ring_length%100/10;
& && && &k5=ring_length%10;
运行最后显示的是: 0000
unsigned ring_length[2]={};
unsigned ring_& &
unsinged k2,
& && && &ring_lengther=ring_length;
& && && &k2= ring_lengther/1000;
& && && &k3=ring_lengther%;
& && && &k4=ring_lengther%100/10;
& && && &k5=ring_lengther%10;
运行最后显示的是:K2=6&&K3=7 K4=2&&K5=3
请弄过的朋友解释下为啥方法一得不到所需要的结果?!
各抒己见!
事实上ring_lengther=ring_
应该为 ring_lengther=ring_length[i];
不知道为啥改不了!
什么地方不一样?看了几遍都没有看出来。难道我眼神不好?
一个是数组直接操作除和取余运行,一个是数组赋给一变量后进行运算!
楼下看清了吗?
unsigned ring_lengther[2]={};
什么数据类型?&&应该是unsigned int ring_lengther[2]={};
本帖最后由 and001 于
15:47 编辑
不好意思再贴一次问题(贴上去的时候是漏了东西)
再贴一次:
unsigned char i=1;
unsigned short ring_length[2]={};
unsigned short ring_& &
unsinged char k2,k3,k4,k5;
ring_lengther=ring_length;
k2= ring_length/1000;
k3=ring_length%;
k4=ring_length%100/10;
k5=ring_length%10;
运行结果: 0000
unsigned char i=1;
unsigned short ring_length[2]={};
unsigned short ring_& &
unsinged char k2,k3,k4,k5;
ring_lengther=ring_length;
k2= ring_lengther/1000;
k3=ring_lengther%;
k4=ring_lengther%100/10;
k5=ring_lengther%10;
运行结果: k2=6 k3=7 k4=2 k5=3
贴得还有问题,我已经更新了!非常不好意思!
晕贴上了后好像不能修改了!
再贴(忽略之前的)
目的:想得到数组各位的数据(转换后得到)
unsigned char i=1;
unsigned short ring_length[2]={};
unsigned short ring_& &
unsinged char k2,k3,k4,k5;
ring_lengther=ring_length[i];
k2= ring_length/1000;
k3=ring_length[i]%;
k4=ring_length[i]%100/10;
k5=ring_length[i]%10;
运行结果: 0000
unsigned char i=1;
unsigned short ring_length[2]={};
unsigned short ring_& &
unsinged char k2,k3,k4,k5;
ring_lengther=ring_length[i];
k2= ring_lengther/1000;
k3=ring_lengther%;
k4=ring_lengther%100/10;
k5=ring_lengther%10;
运行结果: k2=6 k3=7 k4=2 k5=3
ring_length是unsigned short的指针
ring_lengther是unsigned short变量
怎么赋值?
unsigned short * ring_
ring_lengther = ring_
k2= *ring_lengther/1000;
可是我的是ring_lengther=ring_length[i];&&不就是数据赋给数据了!!
我需要的是数组中的各数据都能能转换,也就是说 i=1,2都要可以的!
可否直接数组操作呢?
我看错了,ring_lengther=ring_length[i];&&是可以的
不过数组是从0开始的,所以第二个的答案是对的
我很想知道方法一错在哪里?
怎么看来看去都一样的?
方法1,直接对数组操作,数组名只是数组的首地址,你对数组名求余、取除,应该是对地址操作后得到的内存地址的值
请上面以8楼信息为准,之前的是错误的!
8楼不是针对数组名的
方法1中,k2= ring_length/1000;看看这句。
上面说得对确实这句有问题,但已经改不了了!
这句本该是k2= ring_length[i]/1000;& &//上传笔误
其实问题还在存在!
是脑子不清晰还是遮遮掩掩舍不得贴那几行原版代码? 就这么几行代码, 贴了两天改来改去还错误百出... 要是我就直接找地缝去了. 有些错咱可以犯, 有些错, 咱不可以犯...
还有,对于把i初始化为1的行为... 我们表示很
方法一工作起来没有问题:
本帖最后由 and001 于
10:32 编辑
楼上误会了!确实剪切后粘贴就会掉&&导致老丢,这几行代码本就是让人帮忙看得那还---值得遮遮掩掩吗!!!冤枉呀 !
请问楼上是用啥工具编译的,我是KEIL 提示输出 全是“0”
初始化为=1或者0,是我任意选的!我的目的是要都能访问就可以了!
and001 发表于
楼上误会了!确实剪切后粘贴就会掉&&导致老丢,这几行代码本就是让人帮忙看得那还---值得遮遮掩掩吗!!! ...
在gcc 4.1.1 测试, 得到完全相同的结果. 事实上,任意编译器都应该得到正确的结果. 也许你的kx被优化了, 这部分操作是不存在任何疑问的,非常标准的.
你可以把你的完整测试代码放上来看,不要为了方便理解, 把它改得四不像, 这样只会增加沟通障碍.&&如果你要简化到方便理解,请在keil里面修改好, 编译测试后再贴上来. 保证贴上来的代码和你测试的代码是完全一样的.否则... 大家都在做无用功.
请帖一份类似下面的代码上来:
Link: & & [ raw code | output | fork ]& & & &
C, pasted 1 hour ago:
#include&stdio.h&
int main(void) {
& & unsigned char i=1;
& & unsigned short ring_length[2]={};
& & unsigned short ring_
& & unsigned char k2,k3,k4,k5;
& & ring_lengther=ring_length;
& & k2= ring_length/1000;
& & k3=ring_length%;
& & k4=ring_length%100/10;
& & k5=ring_length%10;
& & printf(&k2:%d, k3:%d, k4:%d, k5:%d\n&, k2, k3, k4, k5);
& & return 0;
k2:6, k3:7, k4:2, k5:3
and001 发表于
楼上误会了!确实剪切后粘贴就会掉&&导致老丢,这几行代码本就是让人帮忙看得那还---值得遮遮掩掩吗!!! ...
态度极其不端正,遮遮掩掩就别找理由了
我只问你一句,
方法1的“运行最后显示的是: 0000”
和方法2的“运行最后显示的是:K2=6&&K3=7 K4=2&&K5=3”
是等价的吗?一个是0000我都不知道你到底想表达啥,另一个则是非常明确地K2、K3、K4、K5,而且大小写还不一样,你家的C编译器不区分大小写的?
贴一段乱78糟的代码,问模糊不清的问题,,,,
我向各位检讨!!
后面的结果是我手敲的!是小写!抱歉各位兄弟!
向楼上学习严谨的态度
本帖最后由 and001 于
12:10 编辑
albert_w 发表于
在gcc 4.1.1 测试, 得到完全相同的结果. 事实上,任意编译器都应该得到正确的结果. 也许你的kx被优化了,&&...
非常感谢楼上指导!
高手挺多的学习了
阿莫电子论坛, 原"中国电子开发网"21ic官方微信-->
后使用快捷导航没有帐号?
查看: 2026|回复: 8
求助,PIC单片机,数组变量问题
&&已结帖(1)
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
本帖最后由 luckycuy 于
10:15 编辑
定义一个数组 unsigned char SEND_DATA_AD[1024] ={..,..,..,...};
用PICC编译时报错:Error& &[1250] D:\My Documents\products\Fault Indicator\programs\sfd\sfd-4.1.c; 94. could not find space (1024 bytes) for variable _SEND_DATA_AD
我试了这个数组最大可以是80,再大就要报错。 可我的程序空间还有2K多没用啊,为什么说找不到空间呢?
满意回复+1
如果是常量可以定义成const类型的
变量的话不超过256个可以放到eeprom里
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
技术总监, 积分 40010, 距离下一级还需 9990 积分
技术总监, 积分 40010, 距离下一级还需 9990 积分
主题帖子积分
专家等级:结帖率:3%
主题帖子积分
技术总监, 积分 40010, 距离下一级还需 9990 积分
技术总监, 积分 40010, 距离下一级还需 9990 积分
这是RAM空间好不好,不是程序空间
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
资深工程师, 积分 16454, 距离下一级还需 3546 积分
资深工程师, 积分 16454, 距离下一级还需 3546 积分
主题帖子积分
专家等级:结帖率:22%打赏:8.00受赏:10.00
主题帖子积分
资深工程师, 积分 16454, 距离下一级还需 3546 积分
资深工程师, 积分 16454, 距离下一级还需 3546 积分
没用过PIC, 可能存储器分区了,加个const试试。
此id已冬眠...
主题帖子积分
实习生, 积分 43, 距离下一级还需 7 积分
实习生, 积分 43, 距离下一级还需 7 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 43, 距离下一级还需 7 积分
实习生, 积分 43, 距离下一级还需 7 积分
本帖最后由 gbars 于
10:36 编辑
1024的数组。。。
PIC16单片机RAM是分页管理的,一页不能超过90个。。。
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
gbars 发表于
1024的数组。。。
PIC16单片机ROM是分页管理的,一页不能超过90个。。。
的确是这个问题,但我的数组元素比较多,怎么解决呢?
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 43, 距离下一级还需 7 积分
实习生, 积分 43, 距离下一级还需 7 积分
主题帖子积分
专家等级:结帖率:100%
主题帖子积分
实习生, 积分 43, 距离下一级还需 7 积分
实习生, 积分 43, 距离下一级还需 7 积分
如果是常量可以定义成const类型的
变量的话不超过256个可以放到eeprom里
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
gbars 发表于
如果是常量可以定义成const类型的
变量的话不超过256个可以放到eeprom里
我的是常量,灰常感谢!:hug:
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
主题帖子积分
专家等级:结帖率:66%
主题帖子积分
实习生, 积分 39, 距离下一级还需 11 积分
实习生, 积分 39, 距离下一级还需 11 积分
dong_abc 发表于
没用过PIC, 可能存储器分区了,加个const试试。
果然是这个问题,加个const搞定,谢谢大师
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
主题帖子积分
高级技术员, 积分 966, 距离下一级还需 34 积分
高级技术员, 积分 966, 距离下一级还需 34 积分
主题帖子积分
专家等级:结帖率:85%
主题帖子积分
高级技术员, 积分 966, 距离下一级还需 34 积分
高级技术员, 积分 966, 距离下一级还需 34 积分
是变量怎么办
21ic公开课,21ic网友共同的学习圈子!学单片机、嵌入式、模拟、电源……就看这里
移步更多21ic独家微课:
技术新星奖章
人才类勋章
荣誉元老奖章
等级类勋章
坚毅之洋流
发帖类勋章
时间类勋章
技术领袖奖章
人才类勋章
核心会员奖章
等级类勋章
技术导师奖章
人才类勋章
时间类勋章
技术高手奖章
人才类勋章
时间类勋章
甘甜之泉水
发帖类勋章
希望之星奖章
等级类勋章
热门推荐 /2君,已阅读到文档的结尾了呢~~
扫扫二维码,随身浏览文档
手机或平板扫扫即可继续访问
单片机(数组元素型指针和数组变量)
举报该文档为侵权文档。
举报该文档含有违规或不良信息。
反馈该文档无法正常浏览。
举报该文档为重复文档。
推荐理由:
将文档分享至:
分享完整地址
文档地址:
粘贴到BBS或博客
flash地址:
支持嵌入FLASH地址的网站使用
html代码:
&embed src='/DocinViewer-4.swf' width='100%' height='600' type=application/x-shockwave-flash ALLOWFULLSCREEN='true' ALLOWSCRIPTACCESS='always'&&/embed&
450px*300px480px*400px650px*490px
支持嵌入HTML代码的网站使用
您的内容已经提交成功
您所提交的内容需要审核后才能发布,请您等待!
3秒自动关闭窗口51串口如何把接收数据存到数组,再把数组的数据发到电脑? - 单片机/MCU论坛 -
中国电子技术论坛 -
最好最受欢迎电子论坛!
后使用快捷导航没有帐号?
51串口如何把接收数据存到数组,再把数组的数据发到电脑?
10:44:52  
各位大侠看一下,我下面的程序为什么不能把接收的数据存到一个数组,再把该数组的数据上传到电脑上?(我参考了之前的一篇有关 串口如何接收多位字节数据 的文档写的程序),希望大家能给指正指正,万分感谢!
#include &reg52.h&& && &&&//&&包含51单片机寄存器定义的头文件
#define uchar unsigned&&char
#define uint unsigned int
uchar k=0;& & & & & & & & //以k做为判断是否接收到数据的依据
& && &//记录接收到多少个字节的数据
uchar receive[12]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
void delay1ms(uint i)
while(i--)
{for(j=0;j&114;j++) //基准延时程序
& && && && && && &&&& & & & & & & &&&
void send_char(unsigned char txd)& &// 传送一个字符
& & & & SBUF =
& & & & while(!TI);& & & & & & & & & & & & & & & & // 等特数据传送
& & & & TI = 0;& & & & & & & & & & & & & & & & & & & & // 清除数据传送标志
void fasong(){& & & & & & & & & & & & //发送数组receive[];
&&for(i=0;i&c;i++){
& &send_char(receive);
void panduan_k(){& & & & & & & & & & & & & & & & //判断k,若为0,说明开始接收数据
if(k!=0){& & & & & & & & & & & & & & & & & & & & & & & &
delay1ms(1);& & & & & & & & & & & & & & & & & & & & //延迟1ms,等待把数据接收完
uchar j=0;
uchar receive[12]={0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff};
SCON= 0x40;& && && && && & //串口方式1
PCON=0;& && && && && && && &//SMOD=0
REN=1;& && && && && && && &//允许接收
TMOD= 0x20;& && && && && & //定时器1定时方式2
TH1= 0& && && && && & //11.波特率
TR1= 1;& && && && && && &//启动定时器
&&while(1)
{ panduan_k();
&&}& & & &&&
void ser()interrupt 4
{& && && & if(RI==1){& && &
& && && && && & RI=0;
& && && && && & receive[k++]=SBUF;& && && && && && && && && && &&&//存数据到接收缓存
& & & & & & & & & & & & & & & & c=k;
& && && && && & }
怎么无论是发什么数据,电脑串口都没有接收到任何的单片机的回复呢?
11:40:06  
大家,不好意思,刚刚又查了一下,那个中断开关IE没开。但开了以后,发现另外一个问题,为什么数组的数据有缺失,第偶数个数据会丢失(最后两个数据没有丢),诚心希望各位大侠帮我分析分析。
21:06:10  
可以改一下试试
void fasong(){& && && && && && && && &//发送数组receive[];
&&for(i=0;i&c;i++){
& &send_char(receive);此处改成send_char(receive[i])
23:31:40  
好东西谢谢分享辛苦了楼主
09:37:46  
CellWise周军
10个问题&&&&&&&&869个浏览
9个问题&&&&&&&&11667个浏览
6个问题&&&&&&&&5778个浏览
每天选一个需要解决的问题,大家一起来帮忙。
授人玫瑰,手有余香
您可能在工作中遇到如下问题,点击下载即可预览专家给出的答案。
问:我从事数码电子产品工作,为什么一开始要用模拟元件?
问:微调器会不会让我的设计变得太复杂,影响用户使用?
问:选择微调器前应该考虑哪些特性?
Powered by

我要回帖

更多关于 arduino和单片机的区别 的文章

 

随机推荐