MSP430G2553定时器闪烁灯程序
msp430Led按键控制灯亮程序
1.Led灯控制程序#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD; //关闭看门狗//P1DIR = 0x41;//P1OUT = 0x41; //程序点亮led1//P1DIR |=BIT0+BIT6;//P1OUT |=BIT0+BIT6; //程序点亮led2P1DIR |=BIT0;P1OUT |=BIT0;P1DIR |=BIT6;P1OUT &=~BIT6;while(1){P1OUT ^=BIT0;P1OUT ^=BIT6;__delay_cycles(1000000);} //led交替亮,持续1s2.Led按键控制灯亮#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;//关闭看门狗P1DIR &=~BIT3;P1DIR |=BIT0;P1IES |=BIT3;P1IE |=BIT3;_EINT();_BIS_SR(LPM0_bits+GIE);}#pragma vector=PORT1_VECTOR__interrupt void PORT1_ISR(void){int i;char pushkey;pushkey=P1IFG&BIT3;//第三位中断标志位for(i=0;i<1000;i++)//短暂延时软件去抖if((P1IN&pushkey)==pushkey){P1IFG=0;//中断标志清零return;}if(P1IFG&BIT3)//判断按键是否按下{P1OUT^=BIT0;}P1IFG=0;return;}3.矩阵键盘和数码管程序#include <msp430g2553.h>#include"Key&Display.h"//unsigned char Receive(void);void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;Init_4lines_Mode();//初始化4线工作模式Send_Command(CH452_RESET);//CH452芯片内部复位Send_Command(KeyDisplay_ON);//允许显示驱动并启动键盘扫描//开中断,P2.0接CH452的DOUT引脚,当有键按下时,DOUT上产生由高到低的脉冲// P2SEL &= ~(BIT6+BIT7);P2IE|=BIT0;P2IES|=BIT0;P2IFG&=~BIT0;_EINT();while(1){}}//中断处理函数#pragma vector = PORT2_VECTOR//中断处理程序,接收到DOUT脉冲信号时,运行之__interrupt void Port2(void){unsigned char Keyvalue;Send_Command(CH452_GET_KEY);//单片机向CH452发送读取按键代码命令Keyvalue=Key_Read();// Keyvalue=Receive();switch(Keyvalue){case 0x40://按键K0按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis00);//第0位数码管显示0break;}case 0x41://按键K1按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis01);//第0位数码管显示1break;}case 0x42://按键K2按下{Send_Command( NDis1); //第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis02);//第0位数码管显示2break;}case 0x43://按键K3按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis03);//第0位数码管显示3break;}case 0x48://按键K4按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis04);//第0位数码管显示4break;}case 0x49://按键K5按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis05);//第0位数码管显示5break;}case 0x4A://按键K6按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis06);//第0位数码管显示6break;}case 0x4B://按键K7按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis07);//第0位数码管显示7break;}case 0x50://按键K8按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis08);//第0位数码管显示8break;}case 0x51://按键K9按下{Send_Command( NDis1);//第1位数码管不显示//Send_Command(Dis10);Send_Command(Dis09);//第0位数码管显示9break;}case 0x52://按键K10按下{Send_Command(Dis00);//第0个数码管显示字符"0"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x53://按键K11按下{Send_Command(Dis01);//第0个数码管显示字符"1"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x58://按键K12按下{Send_Command(Dis02);//第0个数码管显示字符"2"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x59://按键K13按下{Send_Command(Dis03);//第0个数码管显示字符"3"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5A://按键K14按下{Send_Command(Dis04);//第0个数码管显示字符"4"Send_Command(Dis11);//第1个数码管显示字符"1"break;}case 0x5B://按键K15按下{Send_Command(Dis05);//第0个数码管显示字符"5"Send_Command(Dis11);//第1个数码管显示字符"1"break;}default:break;}P2IFG&=~BIT0;}4.红灯0.2秒闪一次,绿灯0.8秒闪一次#include <msp430g2553.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDT BCSCTL1 &=~XTS; //配置时钟BCSCTL3 |=LFXT1S_2;IFG1 &=OFIFG;P1DIR |=BIT0+BIT6; // P1.0,P1.6 output P1OUT &=~BIT0; // P1.0,P1.6置0 P1OUT &=~BIT6;TACCR0 = 12000-1; //1秒定时,产生中断TACCR1 = 2400; //频率0.2*12000,定时0.2秒TACCR2 = 9600; //定时0.8秒TACTL = TASSEL_1 + MC_1+TAIE; // ACLK, 增计数模式TACCTL1 |=CCIE; // TACCR1中断使能TACCTL2 |=CCIE; // TACCR1中断使能_BIS_SR(LPM0_bits + GIE); // Enter LPM0 w/ interrupt}// Timer_A3 Interrupt Vector (TA0IV) handler#pragma vector=TIMER0_A1_VECTOR__interrupt void Timer_A(void){switch( TA0IV ){case 2: P1OUT ^= BIT0; // 捕获/比较寄存器TACCR1break;case 4: P1OUT ^= BIT6;break; // 捕获/比较寄存器TACCR2case 10: break; // 未使用,计数达到TACCRO时执行中断,即1秒执行一次}}5.PMW波控制led灯亮度#include "msp430g2553.h"void main( void ){// Stop watchdog timer to prevent time out resetWDTCTL = WDTPW + WDTHOLD;P1DIR |=BIT6; //方向寄存器P1SEL |=BIT6; //功能寄存器TACTL=TASSEL_2+MC_1+ID_0; //定时器A控制寄存器选择增计数模式TACCTL1 |=OUTMOD_3; //捕获/比较控制寄存器TACCR0=1000-1;TACCR1=10;_BIS_SR(CPUOFF);}。
MSP430霓虹灯
case 4:
break; case 10: break; } }
比较模块
CCR0在比较模式中,用于设定定时器的周期。 当CCR1/2发现TAR的值与TACCR0或它们自己的TACCRx相等时, 便自动改变输出IO口TAx的输出电平,从而生成波形。 改变的规则由OUTMODx决定。
Timer_A比较模块的8种输出模式
4)看门狗定时器写入错误的安全键值
5)Flash存储器写入错误的安全键值
2.单片机复位后的初始状态是什么?
1)I/O引脚切换成输入模式
2)I/O标志位清除 3)其他外围模块及寄存器实现初始化
4)状态寄存器复位
5)CPU从内存的0FFFE地址开始执行代码
典型复位电路
典型的复位电路有一下3种: (1)在RST/NMI管脚上接100K欧的上拉电阻。 (2)在(1)的基础上再接0.1uf的电容,电容的一端接地,可以使复位更加可 靠。 (3)在(2)的基础上,再在电阻上并接一个型号为IN4008的二极管,可以可 靠的实现系统断电后立即上电。
这8种规则配合主定时器TAR的3种模式(连续计数、增计数、 增减计数),可以生成各种波形。主要有以下四种波形: 1.单稳态波形
2.普通PWM。占空比可调范围0~100% 3.带死区控制的双路对称PWM。 4.3路50%占空比方波,相位可调。
1.单稳态波形
模式1和模式5用于生成单稳态脉冲。主定时器(计数器)设 置为增计数模式,使用OUT控制位预先置0/置1后,就可以得 到正/负单稳态脉冲,脉宽由TACCRx决定。
捕获/比较模块CCRx
1.捕获模块capture。 2.比较模块comparator。 3.捕获/比较共用了TACCRx寄存器,故不能同时使用。 CAP寄存器位用于选择捕获/比较工作模式: CAP=0 比较 CAP=1 捕获
54MSP430 G2553 5(低功耗模式及看门狗)
54MSP430 G2553 5低功耗模式1,TI msp430单片机是一个特别强调超低功耗的单片机系列。
对于低功耗的实现,丰富的中断和合理的时钟系统是必须的,另外相对独立的外设,可以不在CPU的干预下独立地工作,这样减小了CPU的工作时间,也大幅降低了系统功耗。
2,msp430能够用中断迅速把CPU从低功耗模式中唤醒,唤醒时间小于1us。
这就保证了系统的低功耗。
让CPU工作在脉冲状态,最大限度地让CPU处于休眠状态,只有在一些需要CPU干预的操作或计算时,才把CPU 唤醒。
另外,把一些无关的外围模块也都关闭,使一些需要的模块尽量单独工作,从而可以把CPU休眠。
合理地利用中断,在需要的时间唤醒cpu。
3,msp430应用系统价格和电流消耗等因素会影响CPU与外围模块对时钟的需求,所以系统使用不同的时钟信号:ACLK, MCLK, SMCLK。
用户通过程序可以选择低频或高频,这样可以根据实际需要来选择合适的系统时钟频率,这3种不同的频率的时钟输出给出不同的模块,从而更合理地利用系统的电源,实现整个系统的超低功耗。
4,单片机的工作模式有:活动模式是(AM),低功耗模式0(LPM0)~低功耗模式4(LPM4)。
不同的低功耗模式禁止不同的模块,适应不同的需求。
5,各种低功耗模式的配置有控制位:SCG1,SCG2,OscOff, CPUOff 由软件来配置。
而各种低功耗模式又可通过中断的方式会到活动模式。
在CCS的编译系统中,已经做好了各种低功耗模式的宏定义,在软件中直接调用就可以了,宏定义如下:#ifdef __ASM_HEADER__#define LPM1 (SCG0+CPUOFF)#define LPM2 (SCG1+CPUOFF)#define LPM3 (SCG1+SCG0+CPUOFF)#define LPM4 (SCG1+SCG0+OSCOFF+CPUOFF)#else#define LPM0_bits (CPUOFF)#define LPM1_bits (SCG0+CPUOFF)#define LPM2_bits (SCG1+CPUOFF)#define LPM3_bits (SCG1+SCG0+CPUOFF)#define LPM4_bits (SCG1+SCG0+OSCOFF+CPUOFF)#include "in430.h"#define LPM0 _bis_SR_register(LPM0_bits)#define LPM0_EXIT _bic_SR_register_on_exit(LPM0_bits)#define LPM1 _bis_SR_register(LPM1_bits)#define LPM1_EXIT _bic_SR_register_on_exit(LPM1_bits)#define LPM2 _bis_SR_register(LPM2_bits)#define LPM2_EXIT _bic_SR_register_on_exit(LPM2_bits)#define LPM3 _bis_SR_register(LPM3_bits)#define LPM3_EXIT _bic_SR_register_on_exit(LPM3_bits)#define LPM4 _bis_SR_register(LPM4_bits)#define LPM4_EXIT _bic_SR_register_on_exit(LPM4_bits)#endif6,具体的例子就不再举了,就是在CPU不需要工作的时候进入低功耗模式,在需要工作的时候,通过中断唤醒。
msp430按键控制LED最基本程序
msp430按键控制LED最基本程序按键篇经过一短时间的学习,下面,亲自动手编写一下程序吧。
程序的目的是:按下按键,控制LED的亮和灭。
短按键,则小灯亮1秒,然后灭; 长按键,小灯常亮。
首先,完成键盘的扫描程序。
第一点:如果是扫描,就要用到定时器。
我想设计定时器每隔IOms扫描一次按键。
定时器,我选用定时器A。
它的定时中断函数如下:函数名称:TimerA_ISR功能:定时器A 的中断服务函数参数:无返回值:无********************************************/ #pragma vector = TIMERAO_VECTOR __interrupt void TimerA_ISR(void) {GetKey() ;}上面这个定时中断函数的意思就是:每当定时时间到了以后,就调用GetKey() 函数一次。
GetKey() 函数就是扫描键盘按键的函数了。
在GetKey() 函数中,会根据按键类型(长按/ 短按)返回不同的数值。
根据返回的数值,做小灯亮法的操作。
那么,返回的这个值,我们需要保存在一个变量中,在这里定义一个变量ucharFlagLcd ; 来保存返回值。
这个变量在全局变量中定义,以保证它的作用域。
那么定时函数就变为#pragma vector = TIMERAO_VECTOR__interrupt void TimerA_ISR(void){FlagLcd =GetKey() ;}定时器中断的时间间隔,我在主函数中定义。
这样写:CCTLO = CCIE; // 使能CCR冲断CCRO = 4O; // 设定周期O.O1STACTL = TASSEL_1 + ID_3 + MC_1; //定时器A的时钟源选择ACLK增计数模式这样,定时器这块就算完工了。
那么,下面进行按键扫描程序。
按键的定义是这样的,根据我板子的按键原理图如下Pl +PlAPl 了这是一个矩阵键盘。
OPT3001 MSP430G2553完整程序
{
return 0;
}
else//否则初始化不成功
{
return 1;
}
}
//OPT3001寄存器配置
//12-15位RN[0,3]:0x1100,设置为Full-Scale Mode
OPT3001IIC_Init();//OPT3001端口初始化
OPT3001Config(); //配置OPT3001并且唤醒OPT3001
delay();
ManufacturerIDNum=GetOPT3001ManufacturerID();
delay();
DeviceIDNum=GetOPT3001DeviceID();
write1();
stop();//停止信号
}
//*********************************************************
//读出BMP085内部数据,连续两个
//*********************************************************
}
BCSCTL1 = CALBC1_1MHZ; // Set DCO
DCOCTL = CALDCO_1MHZ;
}
void Opt3001WriteRegister(unsigned char registerName, unsigned int value)
{
start(); //起始信号
write1byte(0x88); //发送设备地址+写信号
MSP430单片机系统时钟选择实验-改变LED灯闪烁频
//******************************************************************************
#include<msp430x13x.h>
void main(void)
// /|\| XIN|-
// | | |
// --|RST XOUT|-
// | |
// | P1.5|-->LED
//
//时间:2007年10月
//
//
//硬件电路:MSP430F135核心实验板-I型
Байду номын сангаас//硬件连接:
//
//调试器:MSP430FET全系列JTAG仿真器
{
WDTCTL = WDTPW + WDTHOLD;//停止看门狗
P1DIR |= 0x20;//设P1.5为输出口
// BCSCTL1= 0x80;//分频电阻选择为0(此时闪烁频率较慢)
// BCSCTL1= 0x87;//分频电阻选择为7(此时闪烁频率较快)
// BCSCTL2= 0xc0;//选择外部32768低频晶振作为MCLK(此时闪烁频率极慢)
// D13x Demo -在上一节基础上改变系统时钟,观察LED灯的闪烁频率
//
//描述:通过改变系统时钟,来改变闪烁频率;通过P1异或来取反P1.5;软件循环延时
// ACLK= n/a, MCLK= SMCLK= default DCO ~ 800k
//
// MSP430F13x
// -----------------
微机原理- 定时中断的设计与应用(使用MSP430的定时器控制LED灯)
微机原理实验实验四定时中断的设计与应用一、实验目的1. 了解 MSP430 系列定时器 Timer_A 模块结构和功能;2. 掌握定时器 Timer_A 的工作原理和寄存器配置方法;3. 熟练掌握定时器 Timer_A 不同工作模式下的典型应用;4. 熟练掌握端口 P1 和 P2 复用功能应用;5. 熟练掌握定时器 Timer_A 定时中断功能的设计和应用。
二、实验内容1.※●为TA0配置时钟源及工作模式,控制LED1指示灯的定时亮灭,中间间隔1秒钟。
要求:TA0定时器分别配置工作在增计数模式和增/减计数模式下,采用ACLK作为其计数参考时钟,并启用TA0CCR0计数中断实现硬件定时中断。
(1)流程图(以增计数模式为例)(2) 源代码/***增计数模式***/#include <msp430.h>void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P1DIR |= BIT0; //设置P1.0输出P1OUT&=~BIT0; //初始化P1.0TA0CCR0 = 32768; // 定义中断计数周期1s,时钟频率为32.768MHZ,32768 / 32768 = 1sTA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_1 + TACLR; // TASSEL_1,ACLK时钟源MC_1,增计数模式__bis_SR_register (LPM0_bits + GIE); // 进入LPM0低功耗模式,开启总中断}//定时器中断#pragma vector = TIMER0_A0_VECTOR__interrupt void Timer_A(void) // 定时器中断触发,P1输出口异或,电平翻转{P1OUT ^= 0x01;}/*******增减计数模式*******/#include <msp430.h>void main(){WDTCTL = WDTPW + WDTHOLD; // 停止看门狗定时器P1DIR |= BIT0; //设置P1.0输出P1OUT&=~BIT0; //初始化P1.0TA0CCR0 = 16384; // 定义中断计数周期1sTA0CCTL0 = CCIE; // TA0CCR0捕获/比较中断寄存器中断使能TA0CTL = TASSEL_1 + MC_3 + TACLR; // TASSEL_1,ACLK时钟源MC_1,增减计数模式__bis_SR_register (LPM0_bits + GIE); // 进入LPM0低功耗模式,开启总中断}//定时器中断#pragma vector = TIMER0_A0_VECTOR__interrupt void TIMER0_A0_ISR (void) // 定时器中断触发,P1输出口异或,电平翻转{P1OUT ^= 0x01;}(3)实验现象程序运行后,P1.1口LED每隔1s闪烁一次。
msp430定时器控制led闪烁
第四讲定时器控制LED闪烁一、定时器简介定时器,简单的说,就像单片机内的一个闹钟。
它以单片机的时钟作为计数基准,根据计数数值不同来改变定时时间,并可以设置使时间满足定时条件时进行一系列操作。
下面是msp430g2553的datasheet对其定时器的介绍:从这里开始,我们介绍的部件往往会涉及很多寄存器,初学者往往由于配置不全,不能得到想要的效果。
因此,学习这一部分,尽量参考用户手册和相关例程进行分析。
二、定时器A配置我们要实现使用定时器控制LED闪烁,需要使用定时器中断来控制。
定时器中断与外部中断的具体原理一样,都是从主程序中断,处理完中断服务函数再返回。
区别只在于触发条件,定时器中断的触发条件是定时器计数溢出(计数数值达到设定数值)。
这是用户手册对定时器A的介绍:16位定时/计数,4种计数模式,可选时钟源,2到3个捕获比较寄存器,异步输入输出锁存,定时中断寄存器。
16位定时/计数,是指计数数值范围是0-65535,与设置好的时钟源来组合成一定的定时时长。
如时钟周期为1us,那么要定时1ms,计数数值就需要设置为1000。
上图是定时模式的介绍,一般采用增计数模式即可,即每次定时从0计数到设置的数值。
定时器配置最重要的部分在于TACLR寄存器,其16位所代表的含义如下图,具体配置内容可从用户手册和头文件内查出,这里不做一一介绍,在例程中再进行讲解。
三、实践操作这里,由于我们的单片机默认时钟为DCO 1MHZ,16位定时器计数数值65536,所以最大定时时长为65.536ms。
在这里我们进行0.05s的定时,每隔0.05s触发一次中断函数,使LED亮0.05s,灭0.05s,并交替进行。
为了方便调试,我们先使用延时的方法使LED闪烁,确认单片机以及LED工作正常。
顺便复习一下对IO的操作。
下面就到定时器的核心配置了。
我们要设置定时器,核心部分当然是TACTL寄存器,它是定时器工作的关键,涉及到定时器所采用的时钟周期以及计数方式。
MSP430单片机定时器实验报告
实验四定时器实验实验目的:MPS430F5529片内集成的定时器A的使用,学习计数器的补捕获比较模块的使用。
实验内容:定时器采用辅助时钟ACLK作为计数脉冲,fACLK=32768Hz,实现以下功能:1.定时器TA0延时1s,点亮或熄灭LED6,即灯亮1s灭1s,如此循环,采用中断服务程序实现。
2.定时器TA0延时1s,点亮或熄灭LED4,采用捕获比较器CCR0的比较模式,设定输出方式,输出方波,不用中断服务程序3.采用捕获比较器CCR1的比较模式LED5,设定输出方式,输出PWM波形,使LED 亮2s,灭1s。
4.用定时器实现30s倒计时,在液晶模块上显示,每过一秒显示数字变化一次。
5.使用TA1的捕获比较器CCR0捕获按键的间隔时间,在液晶模块上显示。
程序代码:程序1:#include <msp430f5529.h>void main(){WDTCTL = WDTPW + WDTHOLD; //关看门狗P1DIR |= BIT3; //设置P1.0口方向为输出。
TA0CCTL0 = CCIE; //设置捕获/比较控制寄存器中CCIE位为1,//CCR0捕获/比较功能中断为允许。
TA0CCR0 = 32767; //捕获/比较控制寄存器CCR0初值为32767TA0CTL = TASSEL_1 + MC_1+TACLR; //设置定时器A控制寄存器TACTL,//使时钟源选择为SMCLK辅助时钟。
//进入低功耗模式LPM0和开总中断_BIS_SR(LPM0_bits +GIE);}//定时器A 中断服务程序区#pragma vector=TIMER0_A0_VECTOR__interrupt void Timer_A (void){P1OUT ^= BIT3; //P1.0取反输出}实验现象:实验开始后,实验板上LED6亮灭闪烁,间隔为1s。
程序2:#include <msp430f5529.h>void main(void){WDTCTL = WDTPW + WDTHOLD; // 关狗P1DIR |= BIT1; // P1.1 设置为输出P1SEL |= BIT1; // P1.1 输出使能TA0CCR0 = 60000; // PWM PeriodTA0CCTL0 = OUTMOD_4; // CCR1 模式4TA0CCR1 = 30000; // CCR1 PWM duty cycleTA0CTL = TASSEL_1 + MC_1 + TACLR; // ACLK, up mode, clear TAR__bis_SR_register(LPM3_bits); // Enter LPM3__no_operation(); // For debugger}实验现象:实验开始后,实验板上LED4亮灭闪烁,间隔为1s。
MSP430G2553学习笔记
第一版MSP430G2553学习笔记Created on: 2012-8-18Author: zhang bin学习笔记for msp430g2553redesigned by zhang bin2012-08-18versions:12_08_01一,MSP430G2553单片机的各个功能模块(一),IO口模块,1,我们所用的MSP430G2553有两组IO口,P1和P2。
2,IO口的寄存器有:方向选择寄存器PxDIR,输出寄存器PxOUT,输入寄存器PxIN,IO口内部上拉或下拉电阻使能寄存器PxREN,IO口功能选择寄存器PxSEL和PxSEL2,IO口中断使能寄存器PxIE,中断沿选择寄存器PxIES,IO口中断标志寄存器PxIFG。
3,所有的IO都带有中断,其中所有的P1口公用一个中断向量,所有的P2口公用一个中断向量。
所以在使用中断时,当进入中断后,还要判断到底是哪一个IO口产生的中断,判断方法可以是判断各个IO口的电平。
4,中断标志PxIFG需要软件清除,也可以用软件置位,从而用软件触发一个中断。
注意:在设置PxIESx时根据PxINx有可能会引起相应的PxIFGx置位(具体的情况见用户指南),所以在初始化完IO口中断以后,正式使用IO中断前要先将对应的PxIFGx清零。
程序如下:void IO_interrupt_init() //IO中断初始化函数{P1REN |= BIT4+BIT5+BIT6+BIT7; // pullup 内部上拉电阻使能//使用中断时,使能内部的上拉电阻这样当该脚悬空是,电平不会跳变,防止悬空时电平跳变不停的触发中断P1OUT = BIT4+BIT5+BIT6+BIT7; // 当引脚上的上拉或下拉电阻使能时,PxOUT选择是上拉还是下来//0:下拉,1:上拉P1IE |= BIT4+BIT5+BIT6+BIT7; // interrupt enabled P13中断使能P1IES |= BIT4+BIT5+BIT6+BIT7; // Hi/lo edge 下降沿中断//P1IES &= ~BIT3; //上升沿触发中断P1IFG &= ~(BIT4+BIT5+BIT6+BIT7); //中断标志位清零}5,PxOUT:如果引脚选择了内部的上拉或下拉电阻使能,则PxOUT设定电阻是上拉还是下拉,0:下拉,1:上拉6,当IO口不用时,最好不要设为输入,且为浮动状态(这是IO口的默认状态),因为当输入为浮动时,输入电压有可能会在VIL和VIH之间,这样会产生击穿电流。
MSP430G2553定时器,MSP430G2553有几个定时器
MSP430G2553 定时器,MSP430G2553 有几个定时器
MSP430G2553 有几个定时器
MSP430G2553 具有两个16 位的定时器:TImer0_A TImer1_A。
分别具有三个捕捉/比较寄存器,具有输入捕捉,输出比较功能。
可以产生定时中断,也可以产生PWM。
分别有对应的寄存器控制。
定时器有三种工作模
式:1.连续计数模式2.增计数模式3. 增减计数模式。
配置定时器时候,首先要选择相应的时钟源。
在TACTL 寄存器的TASSELx 标志位控制,我们寻则SMCLK 作为源(2MHz),然后进行一个2 分频,最终震荡频率1MHz。
定时器a 图解
3.连续计数模式(产生一个中断标志)
计数器将直接计数到计数器所能计数的最大值0FFFFH 之后重新返回零,再次计数。
返回零的同时产生一个TAIFG 中断标志。
如图
4 增减计数模式(产生两个中断标志)
当计数器计数到跟TACCR0 一样的之后,然后从TACCR0 开始又减少,直到为零,然后又开始增。
当计数跟TACCR0 一样的时候产生一个中断标志CCIFG,当减到为零的时候又产生一个中断标志TAIFG。
如图:
两个定时器接线信号说明:。
LaunchPad(MSP430G2553)_官方例程 汉语注释
LaunchPad 官方例程(无修改)一切皆为2012TI杯电子设计大赛1.//************************************************************************* // LaunchPad Lab2 - Software Toggle P1.0,软件切换的P1.0,// MSP430G2xx2// -----------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// | P1.0|-->LED//************************************************************************* #include <msp430g2553.h>void main(void){WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF){while(1); //如果校准常数擦除,捕获的CPU!!}// Configure Basic ClockBCSCTL1 = CALBC1_1MHZ; //设置范围DCOCTL = CALDCO_1MHZ; //集检查官步+调制BCSCTL3 |= LFXT1S_2; // 设置LFXT1P1DIR = BIT6; //P1.6输出(绿色LED)P1OUT = 0; // LED 关IFG1 &= ~OFIFG; //清除OSCFault标志BCSCTL2 |=SELM_1 + DIVM_0; //设置的MCLKfor(;;){P1OUT = BIT6; // P1.6输出(绿色LED)_delay_cycles(100);P1OUT = 0; //绿色LED关闭_delay_cycles(5000);}}2.//************************************************************************* // LaunchPad Lab3 - Software Port Interrupt Service软件端口的中断服务// MSP430G2xx2// -----------------// /|\| XIN|-// | | |// --|RST XOUT|-// /|\ | |// --o--|P1.3 P1.0|-->LED// \|/////************************************************************************* #include <msp430g2553.h>void main(void){WDTCTL = WDTPW + WDTHOLD; //停止看门狗定时器P1DIR |= BIT0; //设定的P1.0输出方向P1IES |= BIT3; //P1.3可高/低边P1IFG &= ~BIT3; // P1.3 IFG 清除P1IE |= BIT3; // P1.3可中断启用_BIS_SR(LPM4_bits + GIE); //进入LPM4中断}// Port 1 interrupt service routine端口1中断服务程序#pragma vector=PORT1_VECTOR__interrupt void Port_1(void){if (P1IFG & BIT3){P1OUT ^= BIT0; // P1.0切换P1IFG &= ~BIT3; // P1.3 IFG清除}}3.//************************************************************************* // LaunchPad Lab5 - ADC10, Sample A10 Temp and Convert to oC and oF ADC10,样品A10的温度和转换// MSP430G2452// -----------------// /|\| XIN|-// | | |// --|RST XOUT|-// | |// |A10 |//************************************************************************* #include "msp430g2553.h"long temp;long IntDegF;long IntDegC;void main(void){WDTCTL = WDTPW + WDTHOLD; // Stop WDT//Configure ADC10ADC10CTL1 = INCH_10 + ADC10DIV_3; // 选择ADC通道温度传感器ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE; //选择ADC号源__enable_interrupt(); //使能中断。