电赛将至,学习MSP430F5529很有必要(转载)

这篇文章感觉很有用,对入门MSP430F5529的很友好,就转载了

Ti杯电子竞赛,有些题目要求必须用ti的430做主控芯片,以下介绍电子竞赛中430最常用功能的几个例程(这里使用的是MSP430F5529型号的单片机)

io使用例程

在使用io口时,我们需要先了解1个与io有关常用的寄存器

PXDIR:方向就寄存器:设置为输出引脚,置1;设置为输入引脚,置0;

例程1:将p2.3作为输出引脚,并使它初始化为输出0。

#include <msp430.h> 
int main(void)
{
    
	//关闭看门狗,必须要这一步
    WDTCTL = WDTPW | WDTHOLD;	
 
    /*这段代码等价于 P2DIR |= 00000100 (按位或,将第三位寄存器置为1).最后的功能就是将2.3口配置 
    为输出口。*/
	P2DIR |= BIT3;   //将2.3口配置为输出口
 
    /*将P2OUT寄存器的第三位置0,执行的效果也就是p2.3输出为0,如果要将p2.3口置为1,就将第三位置1: 
    即P2OUT |=BIT3*/
    P2OUT &=~BIT3;  //让2.3输出0
 
	return 0;
}

例程2:将2.4设置为输入引脚,并读取到2.4口的信号状态

#include <msp430.h> 
int main(void)
{
    
	
    WDTCTL = WDTPW | WDTHOLD;	   //关闭看门狗
	P2DIR &=~BIT4;                 //将2.4口设置为输入引脚 
 
    if(P2IN&BIT4==1)   //如果2.4口输入的电平是高电平,就干什么
    {
 
    }
    if(P2IN&BIT4==0)  //如果2.4口输入的电平是低电平,就干什么
    {
 
    }
 
	return 0;
}

pwm使用例程

此例程是用pwm来驱动小车,具体哪些io口能输出pwm,可参考芯片手册如图:

如上图右边所示,比如P2.4口,他的pwm时钟控制寄存器为TA2 CCR1,所以配置pwm要先看io口是否有TA CCR的标识

#include <msp430.h> 
#define  p1_2   TA0CCR1   //该引脚置一,右边电机正转
#define  p1_4   TA0CCR3   //该引脚置一,左边电机正转
#define  p1_3   TA0CCR2   //该引脚置一,左边电机反转
#define  p1_5   TA0CCR4   //该引脚置一,右边电机反转
void initpwm(){
     P1DIR |=BIT3+BIT2+BIT5+BIT4; //配置P1.2,3,4,5口的为输出口
     P1SEL |=BIT3+BIT2+BIT5+BIT4; //开启1.2,3,4,5口的io复用,因为要用来输出pwm
     unsigned const PWM=1500;    //设置PWM周期参数
     TA0CCR0 =PWM;               //设置PWM周期
     TA0CTL=TASSEL_2+MC_1;     
     TA0CCTL1 = OUTMOD_7;       //设置TA0CCR1的PWM的输出模式为7模式
     TA0CCTL2 = OUTMOD_7;        
     TA0CCTL3 = OUTMOD_7;       
     TA0CCTL4 = OUTMOD_7;       
}
 
int main(void)
{
	//关闭看门狗,必须要这一步
    WDTCTL = WDTPW | WDTHOLD;
    initpwm();
    /*以下代码效果就是让小车转弯,因为左右两边轮胎的转速不一样*/
    p1_2=1000;   //右边电机得到占空比为1000/1500
    p1_4=500;    //左边电机得到的占空比为500/1500
    p1_3=0;
    p1_5=0;
}

中断使用例程:

注意:在使用中断之前,我们先要查看用户手册,找到那些引脚有 port interrupt(中断)功能的,再去配置中断.

如上图所有引脚都有中断功能。 

例程:将2.3口的中断设置为上升沿触发

 #include <msp430.h> 
 int main(){
 //关闭看门狗,必须要这一步
 WDTCTL = WDTPW | WDTHOLD;
 P2DIR &=~BIT3 ;  //开启2.3口中断 也就是设置2.3为输入io口
 P2IES |= BIT3 ;  //设定2.3口为下降沿触发,如果是上升沿触发则P2IE &=~BIT3 
 P2IFG &=~BIT3 ;  //清除中断标志
 __bis_SR_register(GIE);//打开全局中断
}
#pragma vector = PORT2_VECTOR //中断服务开启,是哪个端口就填哪个具体请查看5529的头文件
 
//中断函数固定写法:
__interrupt void port1_zhongduan (void){
        //如果是2.3口产生了中断
        if(P2IFG&BIT3){
             
             P2IFG &=~BIT3;     //固定写法,每次中断产生都要清除中断标志位
 
 
             /*然后写中断产生后,你想要执行的代码,如:让2.4io口置1*/
             P2DIR|=BIT4;   //配置2.4为输出口
             P2OUT|=BIT4;   //让2.4输出1
             
        }
}

 

————————————————
版权声明:本文为CSDN博主「图触靓」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/bhbhhyg/article/details/109102147

  • 11
    点赞
  • 105
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值