
用51单片机写了个程序,数组元素进行位运算后赋值给IO口,输出不对,请大神帮帮忙。
unsignedcharline_code[64]={0x7f80,……};//定义了一个数组,后面数据忽略一下,就拿第一个元素来说,把这个16位的元素拆出来高八位给P2...
unsigned char line_code[64]={0x7f80,……}; //定义了一个数组,后面数据忽略一下,就拿第一个元素来说,把这个16位的元素拆出来高八位给P2,低八位给P2。位运算如下:
P0=line_code[0]&0x00ff; //这个P0口输出是对的
P2=line_code[0]>>8; //但是这个P2口的输出全是0,为什么 展开
P0=line_code[0]&0x00ff; //这个P0口输出是对的
P2=line_code[0]>>8; //但是这个P2口的输出全是0,为什么 展开
展开全部
显然你数组变量类型定义是错误的
16位变量你写成了8位,高8位自然丢失了
16位变量你写成了8位,高8位自然丢失了
追问
还是你这个答案靠谱,上面那位说的行不通,可否行行好应该怎样设,我定义int和long int都报错error C249: 'DATA': SEGMENT TOO LARGE
追答
如果这个数组在程序运行过程中不需要改变的话,确实可以在int后面加个code
即将这个数组保存在程序存储器中,成为常量,运行中不可修改
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2017-04-29
展开全部
P2=(unsigned char)(line_code[0]>>8);
追问
貌似懂了,还想问一下那P2默认是int型吗?还是说我的认知根本就不对?
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询