快速入门msp430g2553

1.如何新建一个工程
快速入门msp430g2553

快速入门msp430g2553

2.点亮一个led灯

快速入门msp430g2553

首先知道led1的io口是1.0

/*将P1.0设置为输出,P1DIR是P1口的方向寄存器*/
P1DIR |= BIT0;
/*将P1.0设置为高电平,点亮LED1*/
P1OUT |= BIT0;

led2(闪烁)的io口是1.6

/*初始化LED2所在IO口P1.6为输出*/
P1DIR |= BIT6;
/*初始化LED2所在IO口P1.6为低电平,LED2初始状态为灭*/
P1OUT &= ~BIT6;
while(1)
{
P1OUT ^= BIT6;
/*此语句等效为P1OUT = P1OUT ^ BIT6

__delay_cycles(500000);
}

3.按键控制led

知道按键是p1.3口

这里需要知道上拉电阻快速入门msp430g2553
(如果没有启动上拉电阻的话,按键灯带到效果)

    /*初始化按键所在IO口P1.3为输入*/
P1DIR &= ~BIT3;
/*使能P1.3口的上拉电阻*/
P1REN |= BIT3;
P1OUT |= BIT3;

 	if(P1IN & BIT3)//如果P1.3口为高电平,证明按键没被按下
{
P1OUT &= ~BIT6;//熄灭LED2
}
else//如果P1.3为低电平,按键被按下
{
P1OUT |= BIT6;//点亮LED2
}

4.主时钟相关概念

快速入门msp430g2553

    /*设置MCLK频率*/
DCOCTL = CALDCO_8MHZ;
BCSCTL1 = CALBC1_8MHZ;

5.串口调试发送数据

快速入门msp430g2553

	/*配置DCO为1MHz*/
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
/*配置SMCLK的时钟源为DCO*/
BCSCTL2 &= ~SELS;
/*SMCLK的分频系数置为1*/
BCSCTL2 &= ~(DIVS0 | DIVS1);

/*复位USCI_Ax*/
UCA0CTL1 |= UCSWRST;

/*选择USCI_Ax为UART模式*/
UCA0CTL0 &= ~UCSYNC;

/*配置UART时钟源为SMCLK*/
UCA0CTL1 |= UCSSEL1;

/*配置波特率为9600@1MHz*/
UCA0BR0 = 0x68;
UCA0BR1 = 0x00;
UCA0MCTL = 1 << 1;
/*使能端口复用*/
P1SEL |= BIT1 + BIT2;
P1SEL2 |= BIT1 + BIT2;
/*清除复位位,使能UART*/
UCA0CTL1 &= ~UCSWRST;

后期我们可以封装,便于观看

void InitSystemClock(void)
{
/*配置DCO为1MHz*/
DCOCTL = CALDCO_1MHZ;
BCSCTL1 = CALBC1_1MHZ;
/*配置SMCLK的时钟源为DCO*/
BCSCTL2 &= ~SELS;
/*SMCLK的分频系数置为1*/
BCSCTL2 &= ~(DIVS0 | DIVS1);
}

void InitUART(void)
{
/*复位USCI_Ax*/
UCA0CTL1 |= UCSWRST;

/*选择USCI_Ax为UART模式*/
UCA0CTL0 &= ~UCSYNC;

/*配置UART时钟源为SMCLK*/
UCA0CTL1 |= UCSSEL1;

/*配置波特率为9600@1MHz*/
UCA0BR0 = 0x68;
UCA0BR1 = 0x00;
UCA0MCTL = 1 << 1;
/*使能端口复用*/
P1SEL |= BIT1 + BIT2;
P1SEL2 |= BIT1 + BIT2;
/*清除复位位,使能UART*/
UCA0CTL1 &= ~UCSWRST;

}

主函数里面直接

InitSystemClock();
InitUART();

我通过按键去发送数据,与此同时我判断发送的寄存器是否忙(比如我很快的按下2次,就会发现可能只发了一次)

快速入门msp430g2553

快速入门msp430g2553

6.IO中断

快速入门msp430g2553

    /*打开P1.3口中断*/
P1IE |= BIT3;
/*设定为下降沿触发*/
P1IES |= BIT3;
/*清除中断标志位*/
P1IFG &= ~BIT3;
/*打开全局中断*/
__bis_SR_register(GIE);

在最后加入

__interrupt void Port1_ISR(void)
{
if(P1IFG & BIT3)//判断是否是P1.3产生中断
{
P1IFG &= ~BIT3;//清除标志位
P1OUT ^= BIT6;
}
}

7.串口接收

新建函数

void Execute(uint8_t *combuff)
{
const uint8_t charbuff[5][10] = {"王龙?","米靳隆?","班长?","LED1 On!","LED Off!"};//保存预置命令
if(combuff[0] == charbuff[0][0] && combuff[1] == charbuff[0][1])//王龙?
{
UARTSendString("萌萌哒!!(⊙o⊙)",16);//
}
else if(combuff[0] == charbuff[1][0] && combuff[1] == charbuff[1][1])//米靳隆?
{
UARTSendString("我想吃烹鱼宴( ▼-▼ )",21);
}
else if(combuff[0] == charbuff[2][0] && combuff[1] == charbuff[2][1])//班长?
{
UARTSendString("团支书!!╮(╯-╰)╭",20);
}
else if(combuff[0] == charbuff[3][0] && combuff[6] == charbuff[3][6])//LED1 On!
{
UARTSendString("Yes!My Lord!(^^ゞ",17);
P1OUT |= BIT0;
}
else if(combuff[0] == charbuff[4][0] && combuff[6] == charbuff[4][6])//LED1 Off!
{
UARTSendString("Yes!My Highness!(^^ゞ",21);
P1OUT &= ~BIT0;
}
else
{
UARTSendString("What Are You Fucking Talking!(╬▔皿▔)凸",41);
}
}

主函数

P1DIR |= BIT0;
P1OUT &= ~BIT0;
__bis_SR_register(GIE);//打开全局中断
while(1)
{
if(iscomend)
{
iscomend = 0;//清除标志位,防止重复执行
Execute(combuff);//执行命令
}
}
return 0;

__interrupt void UART_Receive_ISR(void)
{
static uint8_t cnt = 0;
if(IFG2 & UCA0RXIFG)//检测是否是USCI_A0的接收中断,USCI_A0和USIC_B0的接收中断共享同一向量
{
IFG2 &= ~UCA0RXIFG;//清除标志位
combuff[cnt++] = UCA0RXBUF;//保存命令
cnt %= 20;//防止cnt大于20,导致缓冲区溢出
if(combuff[cnt - 1] == '\n')//如果检测到命令结束符(以换行作为命令结束)
{
cnt = 0;//复位计数器
iscomend = 1;//命令接收完毕
}
}
}

原创:https://www.panoramacn.com
源码网提供WordPress源码,帝国CMS源码discuz源码,微信小程序,小说源码,杰奇源码,thinkphp源码,ecshop模板源码,微擎模板源码,dede源码,织梦源码等。

专业搭建小说网站,小说程序,杰奇系列,微信小说系列,app系列小说

快速入门msp430g2553

免责声明,若由于商用引起版权纠纷,一切责任均由使用者承担。

您必须遵守我们的协议,如果您下载了该资源行为将被视为对《免责声明》全部内容的认可-> 联系客服 投诉资源
www.panoramacn.com资源全部来自互联网收集,仅供用于学习和交流,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。 敬请谅解! 侵权删帖/违法举报/投稿等事物联系邮箱:2640602276@qq.com
未经允许不得转载:书荒源码源码网每日更新网站源码模板! » 快速入门msp430g2553
关注我们小说电影免费看
关注我们,获取更多的全网素材资源,有趣有料!
120000+人已关注
分享到:
赞(0) 打赏

评论抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

您的打赏就是我分享的动力!

支付宝扫一扫打赏

微信扫一扫打赏