在MSP430书中看到的一些语句有些不明白 1. if (P1out&bit0) P1&=~(bit0); else P1out=bit0; 整个语句意思
2.P2out&=~0x07;P2out|=0x07这两个语句刚好相反吧?3.读取各个管脚的状态语句为nP10=P1in&bit0;nP11=(P1in&bit1)>>1...
2. P2out&=~0x07;P2out |= 0x07 这两个语句刚好相反吧?
3.读取各个管脚的状态语句为
nP10=P1in&bit0;
nP11=(P1in&bit1)>>1;
.....
nP13=(P1in&bit3)>>3;不解的是读取管脚状态为什么要移位呢,假如使用移位的话括号里面应该还是P1in&bit0吧?
4. LMP0模式 为什么模式? 展开
3.读取各个管脚的状态语句为
nP10=P1in&bit0;
nP11=(P1in&bit1)>>1;
.....
nP13=(P1in&bit3)>>3;不解的是读取管脚状态为什么要移位呢,假如使用移位的话括号里面应该还是P1in&bit0吧?
4. LMP0模式 为什么模式? 展开
2个回答
展开全部
1 当P1.0为1时,将它清零;当P1.0为0时,将它置位;
这样做划不来,用“ P1OUT ^= BIT0; ”更好一些;
2 确实相反,前一个是清零,后一个是置位;
3 举个例子:假设要读取P1.3的状态,并赋给nP13:
先做P1IN&BIT3,这样得到的结果是一个8位二进制数,第三位是P1.3的值,其他位都被与运算清零了;
然后再将这个二进制数右移3位,将P1.3的值挪到最右边,这样得到的结果就是一个不是0就是1的数了,再赋值就行了;
写成一句话,就是:nP13=(P1in&bit3)>>3;
4 LMP0模式是低功耗模式0,在该模式下,430的cpu是关闭的,但是仍然能响应中断。
这样做划不来,用“ P1OUT ^= BIT0; ”更好一些;
2 确实相反,前一个是清零,后一个是置位;
3 举个例子:假设要读取P1.3的状态,并赋给nP13:
先做P1IN&BIT3,这样得到的结果是一个8位二进制数,第三位是P1.3的值,其他位都被与运算清零了;
然后再将这个二进制数右移3位,将P1.3的值挪到最右边,这样得到的结果就是一个不是0就是1的数了,再赋值就行了;
写成一句话,就是:nP13=(P1in&bit3)>>3;
4 LMP0模式是低功耗模式0,在该模式下,430的cpu是关闭的,但是仍然能响应中断。
追问
嗯啊谢谢 你的回答把我的大部分问题都解决了 “ P1OUT ^= BIT0; ” 这个应该就是取反的意思吧 P1&=~(bit0) 是把这句给替换掉 对不对?
第一个问题P1out&bit0 P1out=bit0他们等价不 不都是为一嘛
第三个问题感觉解释的蛮好的 看完后完全明白了
追答
第一个问题之前没看仔细...sorry
P1OUT&BIT0得到的是P1.0的状态(前提是你要把P1.0设为输出):
当P1.0为1时,执行P1OUT &= ~(BIT0); /*这里将P1.0清零,你查一下是不是应该是P1OUT而不是P1,msp430我记得没有P1这个寄存器的;*/
反之(当P1.0为0时),执行P1OUT = BIT0; /*这里直接把P1OUT设为BIT0,即将P1.0置位,而P1口的其他位都清零了,如果要单独将P1.0置位而不该变P1口其他位的状态,要用P1OUT |= BIT0,这时,这个条件语句才相当于P1.0取反啊。*/
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询