P1DIR=0X01; while(1) { P1OUT^=0X01; int i=10000; for(i=0;i<10000;i--); } }
这是msp430单片机的程序,我知道是起到闪烁的效果,但是while之后的程序不知道为什么要这样写,帮我解释一下,越详细越好,感谢!还有while(1)跟下面花括号里面的...
这是msp430单片机的程序,我知道是起到闪烁的效果,但是while之后的程序不知道为什么要这样写,帮我解释一下,越详细越好,感谢!
还有while(1)跟下面花括号里面的内容有什么关系?
这样容易看点
#include "io430.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0X01;
while(1)
{
P1OUT^=0X01;
int i=10000;
for(i=0;i<10000;i--);
}
} 展开
还有while(1)跟下面花括号里面的内容有什么关系?
这样容易看点
#include "io430.h"
int main( void )
{
// Stop watchdog timer to prevent time out reset
WDTCTL = WDTPW + WDTHOLD;
P1DIR=0X01;
while(1)
{
P1OUT^=0X01;
int i=10000;
for(i=0;i<10000;i--);
}
} 展开
3个回答
展开全部
P1DIR是表征IO端口1各位的输入输出方向,该位为0是输入,为1是输出。P1DIR=0x01表示将P1.0位设置为输出。while(1)判断总成立,循环执行{}中的语句。P1OUT^=0x01表示对IO端口1的输出与0x01按位异或后再输出,由于仅将P1.0置为了输出端口,只考虑P1OUT最低位的变化:0与1异或变为1,1与1异或变为0,这样就实现了每循环一次,P1.0的输出发生一次改变。“for(i = 0; i <10000; i++);”是延时语句,使得P1.0输出变化肉眼可见。
另:是不是多打了一个'}'。。。
另:是不是多打了一个'}'。。。
更多追问追答
追问
P1OUT^=0X01;中的0x01改成0x00为什么灯不会亮了,不是会异或吗
追答
当然不会亮啊。0与0的异或还是0,1与0的异或还是1。因此P1OUT^0x00还是P1OUT,输出不会发生改变,灯当然不会亮了。
展开全部
P1OUT^=0X01;
实现的是P1OUT即将P1OUT的最低位与1异或,即将P1OUT的最低位翻转,即原先是1,则为0,原先是0,则为1,实现的是闪烁
之后的是延时一段时间以保持刚才的状态一段时间
实现的是P1OUT即将P1OUT的最低位与1异或,即将P1OUT的最低位翻转,即原先是1,则为0,原先是0,则为1,实现的是闪烁
之后的是延时一段时间以保持刚才的状态一段时间
更多追问追答
追问
还有while(1)跟下面花括号里面的内容有什么关系?
为什么不是i++而是i--
追答
这个不是重点,都是用于延时的,总会溢出的,无非是延时时间的长短而已
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
#include "msp430x14x.h"
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P2DIR |=BIT0;
_EINT();
TACCTL0=CCIE;
CCR0=500;
TACTL=TASSEL_2 + MC_1;
LPM0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
P2OUT ^=BIT0;
CCR0+= 500;
}
void main( void )
{
WDTCTL = WDTPW + WDTHOLD;
P2DIR |=BIT0;
_EINT();
TACCTL0=CCIE;
CCR0=500;
TACTL=TASSEL_2 + MC_1;
LPM0;
}
#pragma vector=TIMERA0_VECTOR
__interrupt void TIMER_A(void)
{
P2OUT ^=BIT0;
CCR0+= 500;
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询