MSP430学习笔记2-跑马灯程序,熟悉定时器寄存器的配置

2020-07-01来源: eefocus关键字:MSP430  跑马灯程序  定时器  寄存器  配置

这个例子主要还是熟悉有关定时器A的寄存器配置以及IAR的配置方式。


/*********************************************** 

程序功能:实现流水灯以三种流动方式和四种流动速度 

          的不同组合而进行点亮"流动" 

------------------------------------------------ 

拨码开关设置:将LED位拨至ON,其余拨至OFF 

测试说明:观察流水灯流动顺序和速度的变化 

************************************************/  

#include    

typedef unsigned int  uint;  

uint i = 0,j = 0,dir = 0;  

uint flag = 0,speed = 0;  //flag--灯光流动方式,speed--灯光流动速度  

/****************主函数****************/  

void main(void)  

{  

    

    /*下面六行程序关闭所有的IO口*/  

    P1DIR = 0XFF;P1OUT = 0XFF;  

    P2DIR = 0XFF;P2OUT = 0XFF;  

    P3DIR = 0XFF;P3OUT = 0XFF;  

    P4DIR = 0XFF;P4OUT = 0XFF;  

    P5DIR = 0XFF;P5OUT = 0XFF;  

    P6DIR = 0XFF;P6OUT = 0XFF;  

    

    WDTCTL = WDTPW + WDTHOLD;       //关闭看门狗  

    P6DIR |= BIT2;P6OUT |= BIT2;    //关闭电平转换  

    P5OUT &= ~BIT7;  

      

    CCTL0 = CCIE;                   //使能CCR0中断  

    CCR0 = 50000;  

    TACTL = TASSEL_2 + ID_3 + MC_1; //定时器A的时钟源选择SMCLK,8分频增计数模式  

    P2DIR = 0xff;                   //设置P2口方向为输出  

    P2OUT = 0xff;  

   

    _EINT();                        //使能全局中断  

    LPM0;                           //CPU进入LPM0模式各时钟全部工作  

}  

/******************************************* 

函数名称:Timer_A  

功    能:定时器A的中断服务函数,在这里通过标志 

          控制流水灯的流动方向和流动速度 

参    数:无 

返回值  :无 

********************************************/  

#pragma vector = TIMERA0_VECTOR  

__interrupt void Timer_A (void)  

{    

    if(flag == 0)  

    {  

        P2OUT = ~(0x80>>(i++));    //灯的点亮顺序D8 -> D1  

    }  

    else if(flag == 1)  

    {  

        P2OUT = ~(0x01<<(i++));    //灯的点亮顺序D1 -> D8  

    }  

    else   

    {  

        if(dir)                  //灯的点亮顺序  D8 -> D1,D1 -> D8,循环绕圈                          

        {  

            P2OUT = ~(0x80>>(i++));  

        }  

        else  

        {  

            P2OUT = ~(0x01<<(i++));  

        }  

    }  

    

    if(i == 8)   

    {  

        i = 0;  

        dir = ~dir;  

    }  

    

    j++;  

    if(j == 10)   

    {  

        i = 0;  

        j = 0;  

        flag++;  

        if(flag == 4) flag = 0;  

        switch(speed)//根据speed的值来选择相应的速度,速度的选择主要通过改变分频来实现  

        {  

        case 0:  

            TACTL &=~ (ID0 + ID1);//这个地方其实没必要,意思是清零TACTL的78两位  

            //ID1的值是0x0080   ID2的值是0x0040通过计算就可以得出  

            TACTL |= ID_3;//改为八分频  

            break;  

        case 1:  

            TACTL &=~ (ID0 + ID1);  

            TACTL |= ID_2;  

            break;  

        case 2:  

            TACTL &=~ (ID0 + ID1);  

            TACTL |= ID_1;  

            break;  

        case 3:  

            TACTL &=~ (ID0 + ID1);  

            TACTL |= ID_0;  

            break;  

        default:  

            break;  

        }  

        if(flag != 3)   speed++;  

        if(speed == 4) speed = 0;  

    }   

}  


关键字:MSP430  跑马灯程序  定时器  寄存器  配置 编辑:什么鱼 引用地址:http://news.eeworld.com.cn/mcu/ic501797.html 本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

上一篇:msp430F5438A 的中断初步
下一篇:MSP430G2553学习笔记 DAY1 知识储备及设备初始化

关注eeworld公众号 快捷获取更多信息
关注eeworld公众号
快捷获取更多信息
关注eeworld服务号 享受更多官方福利
关注eeworld服务号
享受更多官方福利

推荐阅读

TI MSP430系列单片机串口通信波特率计算方法
TI MSP430系列单片机,usart模块的波特率值设定是通过以下三个寄存器决定的:UxBR0,UxBR1,UxMCTL 波特率=BRCLK/N ,主要是计算出N。BRCLK:时钟源,可以通过寄存器设定何为时钟源; 通过寄存器UCAxCTL1的SSEL两位选择,01:ACLK,02:SMCLKN:波特率产生的分频因子。N=UxBR1+UxBR0+UxMCTL,其中UxBR1+UxBR0为整数部分,UxMCTL为设定小数部分,其中 UxBR1为高位,UxBR0为低位,两者结合起来为一个16位的字。举例说明:波特率=115200,时钟源=8MHz ,为外部晶体振荡器N=8000000/115200=69.44 。很明显
发表于 2020-06-06
Tinyos之使用Msp430Counter32khz获取系统时间
使用平台:TelosB 操作系统:TinyOs最近要为论文写实验数据,需要读取系统的时间,进行一些运算。Tinyos有提供Msp430Counter32khz 组件,该组件提供接口 Counter<T32khz,uint16_t> .该接口有如下命令和事件:1、get()命令调用该命令,会返回计数值。计数动作是从系统启动的时候就开始了。(如果操作系统配置为低功耗模式会停止计数)2、isOverflowpending()命令 是否有溢出(true /false)3、clearoverflow()命令清除挂起状态4、overflow()事件给出当前系计数值已经溢出的信号量。继续分析,得知该组件是有以下
发表于 2020-06-06
TinyOS在MSP430F2618上移植(一)
最新版本的TinyOS2.1.1,虽然增加了更多的平台支持,比如epic、shimmer,但是这些平台都有一个共同的局限性:采用的微控制器都是低端的MSP430系列,如MSP430F149、MSP430F1611。在一些应用场合,这些处理器已经不能达到性能要求,而基于ZigBee的开发平台,如TI推出的开发套件已经开始使用高性能的处理器,并且国内一些公司,如成都无线龙也都纷纷推出基于MSP430F2618和CC2520无线收发模块,这个模块自从它诞生就很好的支持了ZigBee,因为有TI的全力支持,并且相关的演示代码TI都已经准备好了。但是,目前还没有把TinyOS移植到MSP430F2618上的先例。网上很多人说,这个移植很简单
发表于 2020-06-06
TinyOS在MSP430F2618上移植(一)
TinyOS在MSP430F2618上移植(三)之LCD
本节记录串口TFT LCD在TinyOS上的移植。1.8寸LCD显示屏采用ST7735控制器,使用SPI接口实现控制、显示数据的传输。总体架构:分为3层结构,最底层位于相应的platforms中chips目录下,实现在特定平台上控制引脚连接,SPI接口连接,以及SPI配置。中间层实现了LCD基本操作,LCD初始化,提供给上层模块连接的接口,以及资源管理。最上层提供应用层模块连接的接口。在本架构中,中间层和最高层提供相同的接口LCD16,该接口提供的实现方法有english_string,clear,single_color等,以及写完成事件writeDone。不同的是在最高层提供的接口LCD16中,并没有真正实现接口的功能,而仅仅是
发表于 2020-06-06
两种方式实现TinyOS对MSP430F26&54系列的支持
第一种方式在Ubuntu 下TinyOS msp430 Toolchain mspgcc升级一文中已经作了详细分析,下面说说另一种方式实现TinyOS对MSP430高端系列单片机的支持。我们已经知道TinyOS的编译过程,ncc编译器编译得到app.c文件,接着使用mspgcc编译工具对目标代码进行编译生成需要的.hex文件。但是,要注意的是在ncc编译过程中也会连接msp430库文件,所以就不可能在没有mspgcc的支持下得到app.c文件。那么,这里就出现了问题,如果没有按照上述所提到的第一种方式升级mspgcc,应该如何正确的编译得到所需的文件呢?答案就是使用挂羊头卖狗肉的方法,具体的就是.platform文件不用修改
发表于 2020-06-06
Ubuntu下MSP430开发环境搭建
阅读 以下文章可搞定Ubuntu下搭建MSP430开发环境(MSPGCC)(一) Programming the MSP430 Launchpad on Ubuntumsp430G2553程序烧写方法:#include <msp430g2553.h> int main (void){        volatile int i;         /* Stop watchdog timer */        WDTCTL = WDTPW | WDTHOLD; 
发表于 2020-06-06
小广播
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京ICP证060456号 京ICP备10001474号 电信业务审批[2006]字第258号函 京公海网安备110108001534 Copyright © 2005-2020 EEWORLD.com.cn, Inc. All rights reserved