嵌入式课程设计——温控器

板子用DS18B20做的。亮点在于它采用one-wire 总线进行传输数据。

调试的时候,温度到了16度以后,再高就变成8度了。我们检查了两个小时也没能找出问题。最后请教高人才知道:数据的解释权在其上执行的操作手中

为了对字节操作,我们的变量都是定义成char 型。char 表现为8个bit(谁知道VC 是不是用32位来实现的?!),但与char 相关的操作并不当它是一个byte。这才造成了这种奇怪的现象。所以,嵌入式领域常用typedef unsigned char byte;来定义字节。举个例子,虽然char 和byte 存的都是0b1000_0000,但char 把它解释为-128,而byte 把它看作+128。由于解释不一样,移位操作也有所不同。右移一位时,char 会在高位补1,并把新值解释为-64;byte 由于认定它是正值,在高位补0,解释为64。这就是跳变的元凶。

P.S.:这让我想到了程序设计的“最小惊讶原则”。程序员要想不断提升功力,就得不断抽象。而对物理环境的抽象已是上个世纪就该完成的工作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值