MSP430单片机IO、pwm、中断使用例程(电赛常用)

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
             
        }
}

猜你喜欢

转载自blog.csdn.net/bhbhhyg/article/details/109102147