历史上的今天
返回首页

历史上的今天

今天是:2025年01月25日(星期六)

2021年01月25日 | 【MSP430F5529】一些相关代码

2021-01-25 来源:eefocus

MSP系列的例程相对来说较少,而且F1-F5系列中系统时钟系统不断升级,彼此之间差异很大


这些代码是为了2019年全国大学生电子设计大赛准备的


现在拿出来分享一下,希望可以帮助后面一些人学习一下(因为很少有一本书专门去讲F5529,虽然不同系列彼此之间差异不大,但是做东西的时候你会发现有一些是无法通过编译的,或者编译后功能不好使)


PWM呼吸灯1


/*

  P13为PWM输出口,TA0CCR2越大时灯越亮

*/

#include

void delay_nms(unsigned int n)

{

    unsigned int j;

    for (j=0; j<(n); j++)

    {

        __delay_cycles(400);

    }

}

 

void main(void)

{

    int PWMPeriod = 1500; 

     int i;      

    WDTCTL = WDTPW + WDTHOLD;  

    P1DIR |=BIT3;           

    P1SEL |=BIT3;              

    TA0CCR0 = PWMPeriod;           

    TA0CCTL2 = OUTMOD_7;          ,

    TA0CTL= TASSEL_2 +MC_1;   

    while(1)

    {

        TA0CCR2=0;

        for(i=0; i        {

            TA0CCR2=i;

            delay_nms(2);  

        }

        for(i=PWMPeriod; i>0; i-=1)

        {

            TA0CCR2=i;

            delay_nms(2);        

        }

        TA0CCR2=0;

        delay_nms(250); 

    }

}

 

 

 

PWM呼吸灯2


/*

  P20为PWM输出口,TA1.1

*/

#include

void delay_nms(unsigned int n)

{

    unsigned int j;

    for (j=0; j<(n); j++)

    {

        __delay_cycles(400);

    }

}

 

void main(void)

{

    int PWMPeriod = 1500; 

    int i;      

    WDTCTL = WDTPW + WDTHOLD;  

    P2DIR |=BIT0;           

    P2SEL |=BIT0;              

    TA1CCR0 = PWMPeriod;           

    TA1CCTL1 = OUTMOD_7;   

    TA1CTL= TASSEL_2 +MC_1;   

    while(1)

    {

        TA1CCR1=0;

        for(i=0; i        {

            TA1CCR1=i;

            delay_nms(2);  

        }

        for(i=PWMPeriod; i>0; i-=1)

        {

            TA1CCR1=i;

            delay_nms(2);        

        }

        TA1CCR1=0;

        delay_nms(250); 

    }

}

 

 

 

串口通信


/*

    使用UCA1,所以是P44和P45

*/

#include "msp430f5529.h"

// ACLK = REFO = 32768Hz, MCLK = SMCLK = default DCO/2 = 1048576Hz

// P33 P34—— USCI_A0 TXD/RXD

// P44 P45—— USCI_A1 TXD/RXD 

void main(void)

{

    WDTCTL = WDTPW + WDTHOLD; 

    P4SEL |=BIT4+BIT5 ;

    UCA1CTL1 |= UCSWRST; // **Put state machine in reset**

    UCA1CTL1 |= UCSSEL_2; // SMCLK

    UCA1BR0 = 9; // 1MHz 115200 (see User's Guide)

    UCA1BR1 = 0; // 1MHz 115200

    UCA1MCTL |= UCBRS_1 + UCBRF_0; // Modulation UCBRSx=1, UCBRFx=0

    UCA1CTL1 &= ~UCSWRST; // **Initialize USCI state machine**

    UCA1IE |= UCRXIE; // Enable USCI_A1 RX interrupt

    __bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled

    /*或者去掉上一句,加上

    _EINT();

    while(1);

    也是可以的

    */

}

// 发送数据之前确定发送缓存准备好

#pragma vector=USCI_A1_VECTOR

__interrupt void USCI_A1_ISR(void)

{

    switch(__even_in_range(UCA1IV,4))

    {

    case 0:

        break; // Vector 0 - no interrupt

    case 2: // Vector 2 - RXIFG

        while (!(UCA1IFG&UCTXIFG)); //等待数据发送完成 完成 UCTXIFG 置 1 跳出循环

        UCA1TXBUF = UCA1RXBUF; // TX -> RXed character

        break;

    case 4:

        break; // Vector 4 - TXIFG

    default:

        break;

    }

}

定时器中断


/*

  系统处理完中断自动清除中断标志位,默认不允许嵌套中断,除非开启GIE

  P11-P15定时器A中断

  注意旧板子P12已坏

  详情见书MSP430超低功耗...新书那本  P98

*/

#include

void main(void)

{

    WDTCTL=WDTPW+WDTHOLD;

    P1DIR|=(BIT1+BIT2+BIT3+BIT4+BIT5);//P1.1-P1.5为输出方向

    P1OUT=0x00;        //全部拉低,初始化LED全灭

    TA0CCTL1=CCIE;     //捕获比较器1开启CCIFG位中断

    TA0CCR1=13107;        //置入要比较的数值0xff/5=13107

    TA0CCTL2=CCIE;     //捕获比较器2开启中断

    TA0CCR2=26214;        //13107*2=26214

    TA0CCTL3=CCIE;     //捕获比较器3开启中断

    TA0CCR3=39321;        //13107*3=39321

    TA0CCTL4=CCIE;     //捕获比较器4开启中断

    TA0CCR4=52428;        //13107*4=52428

    TA0CTL|=TACLR+TAIE;      //开启中断并清零

    TA0CTL|=TASSEL_1+MC_2+TAIE;//选择SCLK32.768KHZ作为时钟,选用连续模式,并开启中断

    /*这样的话,5个灯闪一遍的时间为0xffff/32768=2S*/

    __enable_interrupt();    //开启总中断

    while(1);

}

/*TIMER0_A0_VECTOR是计时器0的CCR0的中断寄存器,TIMER0_A1_VECTOR是计时器0的CCR1-CCR6 TA的寄存器*/

/*同理定时器TA1也是分为两个TIMER1_A0_VECTOR和TIMER1_A1_VECTOR*/

#pragma vector=TIMER0_A1_VECTOR

__interrupt void TimerA(void)

{

    switch(__even_in_range(TA0IV,14))

        /* 这句话的意思是:只有在TA0IV的值是在0--14内的偶数时才会执行switch函数内的语句

                 其作用是提高switch语句的效率*/

    {

    case 2:

        P1OUT=BIT1;

        break; //TACCR1 CCIFG置位,表明计数值和设定的13107相等了,也就是说计了0.4S了

    case 4:

        P1OUT=BIT2;

        break; //TACCR2 CCIFG置位,表明计了0.8S了

    case 6:

        P1OUT=BIT3;

        break; //TACCR3 CCIFG置位,表明计了1.2S了

    case 8:

        P1OUT=BIT4;

        break; //TACCR4 CCIFG置位,表明计了1.6S了

    case 14:

        P1OUT=BIT5;

        break;   //TAIFG置位,表明计了2S了  TAIFG表示移出

    default:

        break;

    }

}

TA1


#include

void delay_nms(unsigned int n)

{

    unsigned int j;

    for (j=0; j<(n); j++)

    {

        __delay_cycles(400);

    }

}

void main(void)

{

    WDTCTL=WDTPW+WDTHOLD;

    TA1CCTL1=CCIE;     //捕获比较器1开启CCIFG位中断

    TA1CTL|=TACLR+TAIE;      //开启中断并清零

    TA1CTL|=TASSEL_1+MC_2+TAIE;//选择SCLK32.768KHZ作为时钟,选用连续模式,并开启中断

    __enable_interrupt();  

    P1DIR=0xff;

    P1OUT=0X00;

    while(1);

}

#pragma vector=TIMER1_A1_VECTOR

__interrupt void TimerA(void)

{

    switch(__even_in_range(TA1IV,14))

    {

    case 14:

        P1OUT=BIT0;

        delay_nms(500);

        P1OUT=0x00;

        break;  

    default:

        break;

    }

}


推荐阅读

史海拾趣

Honeywell公司的发展小趣事

背景:进入21世纪后,霍尼韦尔继续秉承多元化发展战略,不断拓展新的业务领域。

发展:公司通过一系列并购和投资活动,进入了石油化工、高性能材料、医疗、安防等多个领域。其中,2005年收购环球油品公司(UOP)和2007年收购码捷科技(Metrologic Instruments)是公司多元化战略的重要里程碑。

关键事件:这些并购不仅增强了霍尼韦尔的技术实力和市场竞争力,还为公司带来了新的增长点和发展机遇。

Future Designs, Inc. (FDI)公司的发展小趣事

FDI深知客户需求的重要性,因此他们始终将客户服务放在首位。公司建立了一套完善的客户服务体系,从售前咨询、方案设计到售后支持,全程为客户提供专业、贴心的服务。此外,FDI还针对客户的特定需求,提供定制化解决方案。他们能够从概念设计、原型开发到大规模生产,全程参与客户的项目,确保产品能够完全符合客户的期望和要求。这种服务模式赢得了客户的广泛赞誉和信赖。

Futaba Electric Co Ltd公司的发展小趣事

FDI深知客户需求的重要性,因此他们始终将客户服务放在首位。公司建立了一套完善的客户服务体系,从售前咨询、方案设计到售后支持,全程为客户提供专业、贴心的服务。此外,FDI还针对客户的特定需求,提供定制化解决方案。他们能够从概念设计、原型开发到大规模生产,全程参与客户的项目,确保产品能够完全符合客户的期望和要求。这种服务模式赢得了客户的广泛赞誉和信赖。

台湾美丽微(FMS)公司的发展小趣事

随着市场的不断拓展,FTDI也面临着诸多挑战,包括如何吸纳优秀的技术人才、打击假冒芯片以及提供本地化的技术支持等。为了应对这些挑战,FTDI采取了多项措施,包括引进经验丰富的工程师和潜力大学毕业生充实技术团队,加强对本地分销商的培训,以及增加对重点应用市场的技术支持力度。这些措施不仅提升了FTDI的技术实力和市场响应速度,也进一步巩固了其在全球市场的地位。

FUJI公司的发展小趣事

随着市场的不断拓展,FTDI也面临着诸多挑战,包括如何吸纳优秀的技术人才、打击假冒芯片以及提供本地化的技术支持等。为了应对这些挑战,FTDI采取了多项措施,包括引进经验丰富的工程师和潜力大学毕业生充实技术团队,加强对本地分销商的培训,以及增加对重点应用市场的技术支持力度。这些措施不仅提升了FTDI的技术实力和市场响应速度,也进一步巩固了其在全球市场的地位。

Antelec公司的发展小趣事

Antelec公司创立于XXXX年,由一群富有远见和热情的电子工程师组成。创立初期,公司专注于研发先进的电子测量与分析技术,成功开发出一种具有高精度和稳定性的测量仪器,填补了市场上的空白。这一技术突破不仅赢得了客户的青睐,也为公司的后续发展奠定了坚实的基础。

问答坊 | AI 解惑

不可多得51单片机入门教材

在网上找了N年才找到不可多得51单片机入门教材。如果你是高手就没有必要看了。如果你是入门级的嘿嘿。。。…

查看全部问答>

Xilinx电子杂志

更多电子杂志请点击这里…

查看全部问答>

NIOS设计过程实例讲解

如果设计稍显复杂,那么对底层细节的过多关注就会成为一种累赘。     试想我们平时在电脑上编写C程序,比如在显示器上输出一行字,我们只用一句printf()即可完成,至于打印命令怎么传到显示芯片上,哪个芯片管脚怎么 变化,又怎么传到显 ...…

查看全部问答>

113586004 已开通了《智能家居系统》讨论群

希望参加《智能家居系统》的网友添加113586004群,在群内讨论问题。 [ 本帖最后由 zhaojun_xf 于 2010-7-31 10:28 编辑 ]…

查看全部问答>

EM200模块收发中文短信的问题

我使用串口与模块进行通信,来收发中文短信,并将串口InputMode属性设为文本方式。 当通过串口,来接收CDMA模块发送的汉字Unicode码时,发现,串口已将Unicode码以字节为单位转换为ASCII字符。 现在,我想要恢复这一过程,将ASCII字符还原为Unico ...…

查看全部问答>

请教两个问题

1、Ndis库没有向nids微端口驱动的接口函数(如初始化函数等)下发irp,那代码中的irp是从哪里来的?ndis微端口驱动自己组建的吗? 2、如何看到ndis微端口驱动中irp中包含的是什么板侧的指令?如断链指令…

查看全部问答>

请教各位大大~~~~~关于ARM开发板的选择~~~~~~~~~~

小弟最近想学RAM,之前一直用的51,不能说精通吧,至少基本的原理和应用算是比较熟悉了   现在想买块开发板,看上面置顶区里有个团购STM32的活动,不知道这块板子怎么样啊?   还有就是STM32在ARM里算是什么样的定位?适不适合像我这 ...…

查看全部问答>

调试时出现的奇怪现象Program exit reached

如图,调试时出现的现象,右边绿色DebugBreak,下边蓝色部分Program exit reached,请问大家遇到过没有?怎么解决,现在烧不进程序了。…

查看全部问答>

msp430的有用书籍

lz新人,需要芯币,第四个麻烦捧捧场吧之后我编的一些程序会与大家分享的 …

查看全部问答>