MSP430--数字IO 流水灯程序

发布者:自在堂最新更新时间:2019-10-14 来源: eefocus关键字:MSP430  数字IO  流水灯程序 手机看文章 扫描二维码
随时随地手机看文章

1.数字IO共有6组,其中P1,P2可以设置外部中断。


2.通用寄存器


PxIN,PxOUT,PxDIR,PxSEL


上电默认PxDIR为0,即默认为输入。PxSEL若为1,则表示数字IO用作外设功能,这时候P1或P2的中断功能丢失。


3.P1的寄存器:每个地址对应8位寄存器,对应IO的8个PIN.


 026h P1SEL

 025h P1IE: 中断使能

 024h P1IES:中断响应上升沿变化(0),响应下降沿变化(1)

 023h P1IFG:中断发生就置位为1,中断执行后要手动清除

 022h P1DIR

 021h P1OUT

 020h P1IN read only


4.流水灯电路:P2端口输出低电平时二极管发光。P2DIR=0XF8,对应表示P27-P23均为输出,若这时P2OUT=0XFF,则L1-L5都会亮。


5.流水灯程序:实现流水灯以三种流动方式和四种流动速度的不同组合而进行点亮"流动"


#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,增计数模式

    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 == 40) //循环5次就改变flag改变流动方向

    {

        i = 0;

        j = 0;

        flag++;

        if(flag == 4) flag = 0;

        switch(speed)

        {

        case 0:

            TACTL &=~ (ID0 + ID1);

            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  数字IO  流水灯程序 引用地址:MSP430--数字IO 流水灯程序

上一篇:MSP430--看门狗定时器
下一篇:MSP430-软件配置和控制电路解释

推荐阅读最新更新时间:2024-11-12 10:06

MSP430G2转换结果数据类型
以下是程序,软件用的IAR: #include io430.h #include dandao_duocai.h #define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/1000000.0)) #define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/1000.0)) #define dataout P2OUT unsigned int ADC10_Result ; int d,c; void cheek_clock() { BCSCTL3_bit.LFXT1S0 = 0; //配置ACLK为12KHz BCSCT
[单片机]
MSP430 flash写入(一)
/* --COPYRIGHT--,BSD_EX * Copyright (c) 2012, Texas Instruments Incorporated * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * * Redistributions of source code must retain the above c
[单片机]
基于单片机MSP430F149的变频伺服系统的设计与研究
0引言 近年来,伺服系统的发展始终以稳定性、响应性与精度为发展主轴,这也是用户在使用过程中最为看重的几大因素。在机床伺服系统、机器人控制系统、雷达天线控制系统等场合大都由直流伺服电机和直流伺服控制器来完成控制。在这些控制领域中,主要以负载的位置或角度等为控制对象的伺服控制系统 。随着变频器技术的高速发展,在伺服系统中交流变频传动因其功率因数高、反应速度快、精度高、适合在恶劣环境中使用等优点得到了越来越广泛的应用。本文提出一种基于高性能单片机MSP430F149、变频器、变频电机组成的数字式变频伺服系统,并将数字PID算法引入到此系统中,使系统获得了良好的系统静、动态性能。 1变频伺服系统的功能 为达到变频伺服系统的运行
[单片机]
基于单片机<font color='red'>MSP430</font>F149的变频伺服系统的设计与研究
MSP430的32768Hz晶振写的时钟
#include MSP430x14x.h typedef unsigned char uchar; typedef unsigned int uint; //typedef也是一种宏定义类型,其书写方式和#define相反 /*******液晶端口初始化*******/ #define out P3DIR|=BIT0+BIT1+BIT2//把P3_012三个口设为输出 #define lcd_enset P3OUT|=BIT2 #define lcd_enclear P3OUT&=~BIT2 #define lcd_rw1 P3OUT|=BIT1 #define lcd_rw0 P3OUT&=~BIT1 #define lcd
[单片机]
MSP430之八路ADC单次采集的程序
本程序采用的是八路ADC单次采集的模式,根据配置,在单次的模式下转换完成后ADC12SC会自动复位,因此需要在循环中进行ADC12CTL0 |= ADC12SC;操作,而如果配置成连续采集的模式,只需要在程序开始将ADC12SC置位一次就可以,但是就需要注意当进入中断后如果不手动禁止中断会一直停留在循环中,因此在采集到需要的数据后需要将ADC关闭或者中断使能禁止才能重新回到主函数,这一点需要注意。   八路单次采集的程序如下:   [cpp] view plain copy/***************************************   八路AD多路单次采集基亚5110液晶显示   采集模式:多路单次   
[单片机]
MSP430常见问题之电源类
Q1:msp430(我用的4619)的VCC,DVCC,VSS,DVSS怎么接啊?模拟的和数字的一样吗? A1:CC 就是正,SS 就是负,A是模拟电,D 是数字电,A的都接在一起,D 的都接在一起,地线要分开布,中间用000 贴片连接,也就是传说中的单点连接。A 和D 的正电源间如果信号源有固有的频率或频率范围建议中间用适当的电感连接,并在两侧加适当的退耦电容,以防止数字部分的信号干扰模拟信号。要求不是很精的时候,模拟电源和数字电源多数都是连通的。 Q2:如果直接用干电池(比如两节AA 电池)不经过PWIC 给MSP430供电,时间长了电池电压下降,这时候是不是芯片的参数,比如说Voh/Vol/Vih/Vil甚至时钟频率都要发
[单片机]
MSP430的上拉电阻&I/O口的第二功能
在介绍这四个I/O口时提到了一个 上拉电阻 那么上拉电阻又是一个什么东东呢?他起什么作用呢?都说了是电阻那当然就是一个电阻啦,当作为输入时,上拉电阻将其电位拉高,若输入为低电平则可提供电流源;所以如果P0口如果作为输入时,处在高阻抗状态,只有外接一个上拉电阻才能有效。 你说的 第二功能 应该是指外围模块功能吧,用模块就选 第二功能 ,不用模块就选 第一功能 。 可通过设置PxSEL寄存器进行选择,某位写 0 为I/O;写 1 为 第二功能 。 用到比较器(片内外围模块)时要设置为第二功能。 当然你如果是用片外的比较器,将其输出的高低电平(1或0)送给MSP430,那就选 第一功能 。
[单片机]
我的MSP430学习经验
1.首先你要知道msp430的存储器结构。典型微处理器的结构有两种:冯。诺依曼结构——程序存储器和数据存储器统一编码;哈佛结构——程序存储器和数据存储器;msp430系列单片机属于前者,而常用的mcs51系列属于后者。 0-0xf特殊功能寄存器;0x10-0x1ff外围模块寄存器;0x200-?根据不同型号地址从低向高扩展;0x1000-0x107f seg_b0x1080_0x10ff seg_a 供flash信息存储 剩下的从0xffff开始向下扩展,根据不同容量,例如149为60KB,0xffff-0x1100 2.复位信号是MCU工作的起点,430的复位型号有两种:上电复位信号POR和上电清楚信号PUC。POR
[单片机]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

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

换一换 更多 相关热搜器件
随便看看

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved