打印

8位的单片机可不可以直接对16位数进行运算?

[复制链接]
4543|7
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gmgmgm|  楼主 | 2009-9-7 09:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 gmgmgm 于 2009-9-7 10:41 编辑

刚入C不久,在实际调试中会出现一些不明白的错误,就是对两个16位的数据直接运算,有时会跑飞了,怀凝的是单片机是8位的,而数据是16位的,不知道有没有关系?
比如:

uint a=0x24a5;
uint b=0xa53c;
uchar s=0x2d;
uint c;

c=b-a;//这里是两位16位的数相减

c=b-s;//这里是16位数与8位数相减

c=b+s;//这里是16位与8位相加

调试时发现运算结果是正确的,但因为程序经常跑飞,怀凝是这样的运算造成的,请前辈指点下,谢谢!

相关帖子

沙发
auzxj| | 2009-9-7 10:15 | 只看该作者
1)、前四句应该有分号
2)、程序中有while(1);一类的死循环吗
3)、是否有狗,有的话,狗拴住了没

使用特权

评论回复
板凳
PowerAnts| | 2009-9-7 10:16 | 只看该作者
8位机运行16位运算? 也许分成高8位和低8位来处理,但两个字节间怎样凑起来,可能很麻烦

声明: 俺是门外汉

使用特权

评论回复
地板
HWM| | 2009-9-7 10:23 | 只看该作者
LZ:只要你的编译系统是健壮的,问题决不可能由此所致。成熟的C编译会对所有能提供的类型运算应该提供很好的包装(底层实现是透明的),查查其他地方。

使用特权

评论回复
5
gmgmgm|  楼主 | 2009-9-7 10:39 | 只看该作者
里面有while(1)语句,这些运算就是在while(1)里面的,就是要运算结果为达到目标时才退出这个死循环,问题是有时候很正常 ,里面没有用狗,有时候就卡死在里面,我用的是Keil uVision2编译系统;就是怀凝是不是因为这样8位和16位数据混合造成的;

上面前三行是有分号;在这里忘了加进去

使用特权

评论回复
6
auzxj| | 2009-9-7 11:55 | 只看该作者
8位和16位数据混合是不会有问题的,在标准C里,会先把8位强制类型转换为16位,再运算,这个可以查阅相关C语言书
就是要运算结果为达到目标时才退出这个死循环,

这句话我不明白什么意思,难道你的程序在某种情况下能退出死循环??
强烈要求贴关键的代码

使用特权

评论回复
7
XZL| | 2009-9-7 13:05 | 只看该作者
8位机在C语言下可以实现16位运算。不过不是直接运算,而是调用库函数

使用特权

评论回复
8
auzxj| | 2009-9-7 16:08 | 只看该作者
这个貌似不用什么库函数吧,很简单的,汇编语言几句话就可以了,在8位机上用汇编语言写一下16位的数据运算就知道怎么回事了,呵呵

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

135

主题

766

帖子

2

粉丝