MSP430串口学习中的疑惑

2019-03-24 10:28发布

..........
void main(void)
{
unsigned char value=0;
..........

while(1)
    {     
        while (!(IFG1 & UTXIFG0));
        TXBUF0 = value++;
       value &= 0x7f;                        // 保证value的数值小于128
        while (!(IFG1 & UTXIFG0));
        TXBUF0 = ' ';
        Delays();
    }
}
请问:在做MSP430单片机与PC的UART的实验中,MSP430单片机向PC写ASCII码的过程中,以上程序中的那个value&0x7f;就可以保证value的数值小于128,这个是如何实现的,如何算出来的呢,不太明白,肯请指教,具体说明下算法或实现的原理均可

此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
6条回答
k331922164
1楼-- · 2019-03-24 12:06
value &= 0x7f;
value最高位恒为0,所以value最大为(0111 1111)B=(127)D,必然小于128
MrKingMCU
2楼-- · 2019-03-24 14:19
< :TI_MSP430_内容页_SA7 --> 楼上回复的是正确的,你要明白1&0=0,0&0=0,就行了。最高位是0,所以不管什么数,运算出来高位全是0,这样就一定小于128。低7位全是1,得出的结果低7位数字不变。
natto
3楼-- · 2019-03-24 15:16
 精彩回答 2  元偷偷看……
natto
4楼-- · 2019-03-24 17:17
MrKingMCU 发表于 2015-2-26 08:07
楼上回复的是正确的,你要明白1&0=0,0&0=0,就行了。最高位是0,所以不管什么数,运算出来高位全是0,这样就一定小于128。低7位全是1,得出的结果低7位数字不变。



噢~明白了,谢谢1楼2楼两位不过现在又有两个疑问,
1、这里要是到了127,再加会是怎么样了,这里又没有IF(VALUE>0X7F)后清零的语句啊,
2、为什么这里一定要这么写了,直接写成 if(value>127) {value=0;} 不更好么

exiao
5楼-- · 2019-03-24 22:59
运算速度更快
k331922164
6楼-- · 2019-03-25 02:25
 精彩回答 2  元偷偷看……

一周热门 更多>

相关问题

    相关文章