MSP430全部程序学习.docx
- 文档编号:26948574
- 上传时间:2023-06-24
- 格式:DOCX
- 页数:37
- 大小:23.10KB
MSP430全部程序学习.docx
《MSP430全部程序学习.docx》由会员分享,可在线阅读,更多相关《MSP430全部程序学习.docx(37页珍藏版)》请在冰豆网上搜索。
MSP430全部程序学习
一:
基础实验
功能:
控制IO口实现流水灯的一次点亮并循环下去
#include"msp430x14x.h"
voiddelay(unsignedinta)
{
unsignedinti,j;
for(j=a;j>0;j--)
for(i=80;i>0;i--);
}
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;
P2DIR|=0XF0;//1111-00001表示输出,0表示输入
P2OUT&=0X0F;//0000-1111输出寄存器
while
(1)
{
P2OUT|=BIT4;
delay(800);
P2OUT|=BIT5;
delay(800);
P2OUT|=BIT6;
delay(800);
P2OUT|=BIT7;
delay(800);
P2OUT&=0X0F;
delay(800);
}
}
二:
IO口控制(IO口中断)实验
功能:
利用IO口中断实现按键中断,当按键按下时对应LED等亮
#include
#pragmavector=PORT2_VECTOR//声明中断源是IO口2的中断
__interruptvoidport2(void);
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;
_EINT();
P2DIR|=BIT4;
P2DIR&=~BIT0;
P2IE|=BIT0;
P2IES|=BIT0;
_BIS_SR(LPM3_bits+GIE);//开总中断并使CPU进入低功耗模式
while
(1);
}
__interruptvoidport2(void)
{
if((P2IN&BIT0)==BIT0)
P2OUT&=~BIT4;
else
P2OUT|=BIT4;
}
三:
数码管实验
功能:
编程实现6个数码管依次显示1到6
/******************************************************************************
________________________
f|a|b||||||||||
|____||____||____||____||____||____|
e|g|c||||||||||
|____||____||____||____||____||____|
dLED6|LED5|LED4|LED3|LED2|LED1
||||||
P5.7P5.6P5.5P5.4P5.3P5.2
a--P4.0b--P4.1c--P4.2d--P4.3e--P4.4f--P4.5g--P4.6
.--P4.7段码1选通
P5.2--P5.7位码0导通
//跳线P14P15P5P6P7P8
*******************************************************************************/
#include"msp430x14x.h"
#defineucharunsignedchar
unsignedchartable[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
unsignedcharseg[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb};
voiddisplay(uchari,ucharj)
{
P5OUT=seg[i];
P4OUT=table[j];
}
voidmain()
{
WDTCTL=WDTPW+WDTHOLD;
P5DIR|=(BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);
P4DIR|=(BIT0+BIT1+BIT2+BIT3+BIT4+BIT5+BIT6+BIT7);
while
(1)
{
display(0,1);
display(1,2);
display(2,3);
display(3,4);
display(4,5);
display(5,6);
}
}
四:
独立按键综合实验
//***************************************************************
//描述:
//有按键中断时,LED5,LED6,LED7,LED8亮与灭;
//
//跳线:
P9P10P17
***************************************************************
#include
#defineled5_poutP2DIR|=BIT4//通讯状态指示灯设置为输出口
#defineled5_highP2OUT|=BIT4//通讯状态指示灯输出高点亮指示灯
#defineled5_lowP2OUT&=~BIT4//通讯状态指示灯输出低关闭指示灯
#defineled6_poutP2DIR|=BIT5//通讯状态指示灯设置为输出口
#defineled6_highP2OUT|=BIT5//通讯状态指示灯输出高点亮指示灯
#defineled6_lowP2OUT&=~BIT5//通讯状态指示灯输出低关闭指示灯
#defineled7_poutP2DIR|=BIT6//通讯状态指示灯设置为输出口
#defineled7_highP2OUT|=BIT6//通讯状态指示灯输出高点亮指示灯
#defineled7_lowP2OUT&=~BIT6//通讯状态指示灯输出低关闭指示灯
#defineled8_poutP2DIR|=BIT7//通讯状态指示灯设置为输出口
#defineled8_highP2OUT|=BIT7//通讯状态指示灯输出高点亮指示灯
#defineled8_lowP2OUT&=~BIT7//通讯状态指示灯输出低关闭指示灯
unsignedcharled5,led6,led7,led8,flag;
voiddelay(unsignedinti)
{
while(i--);
}
voidIOinit(void)
{
led5_pout;
led6_pout;
led7_pout;
led8_pout;
led5_low;
led6_low;
led7_low;
led8_low;
P2IE|=BIT0+BIT1+BIT2+BIT3;
P2IES|=BIT0+BIT1+BIT2+BIT3;
}
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;
IOinit();
_EINT();
while
(1)
{
switch(flag)
{
case1:
if(led5%2)
led5_high;
elseled5_low;
flag=0;
break;
case2:
if(led6%2)led6_high;
elseled6_low;
flag=0;
break;
case3:
if(led7%2)led7_high;
elseled7_low;
flag=0;
break;
case4:
if(led8%2)led8_high;
elseled8_low;
flag=0;
break;
default:
break;
}
_BIS_SR(LPM3_bits+GIE);
}
}
#pragmavector=PORT2_VECTOR
__interruptvoidport2(void)
{
delay(40000);//去抖;
if((P2IFG&BIT0)==BIT0)
{
led5++;
flag=1;
}
if((P2IFG&BIT1)==BIT1)
{
led6++;
flag=2;
}
if((P2IFG&BIT2)==BIT2)
{
led7++;
flag=3;
}
if((P2IFG&BIT3)==BIT3)
{
led8++;
flag=4;
}
P2IFG=0;
_BIC_SR_IRQ(LPM3_bits);
}
五:
行列式键盘实验
/****************************************************************
//P6.7P6.6P6.5+3V
//||||
//P6.1------/----/-----/----R--|
//||||
//P6.2------/----/-----/----R--|
//||||
//P6.3------/----/-----/----R--|
//||||
//P6.4------/----/-----/----R--|
//跳线P2P3
****************************************************************/
#include"msp430x14x.h"
#include"key.h"
voiddelay(unsignedinti)
{
while(i--);
}
unsignedcharkey(void)
{
unsignedcharx=0XFF;
P6DIR=0XE0;
P6OUT=0X7F;////扫描第一列
if((P6IN&0X02)==0X00)
x=12;//x=0;
else
if((P6IN&0X04)==0)
x=11;//x=1;
else
if((P6IN&0X08)==0)
x=10;//x=2;
else
if((P6IN&0X10)==0)
x=9;
else
{
P6OUT=0XBF;////扫描第二列
if((P6IN&0X02)==0X00)
x=8;//x=0;
else
if((P6IN&0X04)==0)
x=7;//x=1;
else
if((P6IN&0X08)==0)
x=6;//x=2;
else
if((P6IN&0X10)==0)
x=5;
else
{
P6OUT=0XDF;//扫描第三列
if((P6IN&0X02)==0X00)
x=4;//x=0;
else
if((P6IN&0X04)==0)
x=3;//x=1;
else
if((P6IN&0X08)==0)
x=2;//x=2;
else
if((P6IN&0X10)==0)
x=1;
}
}
return(x);
}
unsignedcharget_key(void)
{
unsignedcharx,y;
if((P6IN&0X1F)!
=0X1F)
{
delay(20);
if((P6IN&0X1F)!
=0X1F)
{
x=key();
if(x!
=0xFF)
y=x;
}
}
returny;
}
六:
看门狗程序
//****************************************************************
//MSP430F149
//-----------------
///|\|XIN|-
//|||
//--|RSTXOUT|-
//||
//|P1.1|-->LED
//****************************************************************
#include
voidmain(void)
{
WDTCTL=WDT_MDLY_0_064;//SetWatchdogTimerintervalto~30ms
IE1|=WDTIE;//EnableWDTinterrupt
P1DIR|=0x02;//SetP1.1tooutputdirection
_BIS_SR(LPM0_bits+GIE);//EnterLPM0w/interrupt
}
//WatchdogTimerinterruptserviceroutine
#pragmavector=WDT_VECTOR
__interruptvoidwatchdog_timer(void)
{
P1OUT^=0x02;//ToggleP1.1usingexclusive-OR
}
七:
TimerA定时/计数器
//****************************************************************//MSP-FET430P140Demo-Timer_A,ToggleP1.1/TA0,UpMode,32kHzACLK
//
//Description:
ToggleP1.1usinghardwareTA0output.Timer_Aisconfigured
//forupmodewithCCR0definingperiod,TA0alsooutputonP1.1.Inthis
//example,CCR0isloadedwith1000-1andTA0willtoggleP1.1atTACLK/1000.
//ThustheoutputfrequencyonP1.1willbetheTACLK/2000.NoCPUorsoftware
//resourcesrequired.NormaloperatingmodeisLPM3.
//AscodedwithTACLK=ACLK,P1.1outputfrequency=32768/2000=16.384Hz.
//ACLK=TACLK=32kHz,MCLK=defaultDCO~800kHz
////*ExternalwatchcrystalinstalledonXINXOUTisrequiredforACLK*//
//
//MSP430F149
//-----------------
///|\|XIN|-
//|||32kHz
//--|RSTXOUT|-
//||
//|P1.1/TA0|-->ACLK/2000
//
//跳线:
J10Timer_AP0
//****************************************************************
#include
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;//StopWDT
P1DIR|=0x02;//P1.1output选择P1.1为输出
P1SEL|=0x02;//P1.1optionselect外围模块
CCTL0=OUTMOD_4;//CCR0togglemode输出为反转模式
CCR0=1000-1;
TACTL=TASSEL_1+MC_1;//ACLK,upmode
_BIS_SR(LPM3_bits);//EnterLPM3w/interrupt
}
//#include
//typedefunsignedcharuchar;
//typedefunsignedintuint;
//ucharflag=0;
//voidmain(void)
//{
//WDTCTL=WDTPW+WDTHOLD;
//BCSCTL1&=~XT2OFF;
//BCSCTL2|=SELS+DIVS_3;
//P3DIR|=BIT4;
//TACTL=TASSEL_2+MC_2+TAIE;
//_BIS_SR(LPW0_bits+GIE);
//}
//Timer_A3InterruptVector(TATV)handler
//#pragmavector=TIMERA1_VECTOR
//__interruptvoidTimer_A(void)
//{
//switch(TAIV)
//{
//case2:
break;
//case4:
break;
//case10:
P4OUT^=BIT5;
//break;
//}
//}
//TimerA0interruptserviceroutine
//#pragmavector=TIMERA0_VECTOR
//__interruptvoidTimer_A(void)
//{
//P4OUT^=BIT5;
//}
八:
TimerB定时/计数器
//***************************************************************/
//MSP-FET430P140Demo-Timer_B,ToggleP1.1,CCR0UpModeISR,32kHzACLK
//Description:
ToggleP1.1usingsoftwareandtheTB_0ISR.Timer_Bis
//configuredforupmode,thusthetimeroverflowswhenTBRcounts
//toCCR0.Inthisexample,CCR0isloadedwith1000-1.
//Togglerate=32768Hz/(2*1000)=16.384Hz
//ACLK=TBCLK=32kHz,MCLK=SMCLK=defaultDCO~800kHz
////*AnexternalwatchcrystalonXINXOUTisrequiredforACLK*//
//
//MSP430F149
//---------------
///|\|XIN|-
//|||32kHz
//--|RSTXOUT|-
//||
//|P1.1|-->LED
//
//跳线:
J10Timer_AP0
//****************************************************************
#include
voidmain(void)
{
WDTCTL=WDTPW+WDTHOLD;//StopWDT
P1DIR|=0x02;//SetP1.1tooutputdirection
TBCTL=TBSSEL_1+TBCLR;//ACLK,clearTBR
TBCCTL0=CCIE;//TRCCR0interruptenabled
TBCCR0=1000-1;
TBCTL=TBSSEL_1+MC_1;//ACLK,upmode
_BIS_SR(LPM3_bits+GIE);//EnterLPM3w/interrupt
}
//TimerB0interruptserviceroutine
#pragmavector=TIMERB0_VECTOR
__interruptvoidTimer_B(void)
{
P1OUT^=0x02;//ToggleP1.1usingexclusive-OR
}
九:
串口通信实验一
/****************************************************************
//MSP-FET430P140Demo-USART0,
//
//Description:
USART0RXinterrupttriggersTXEcho.Thoughnotrequired,
//Baudratedividerwith3.2768MhzXTAL@9600=3.2768MHz/9600=0003h;
//MSP430F149
//-----------------
///|\|XIN|-
//|||3.2768MHz
//--|RSTXOUT|-
//||
//|P3.4|------------>
//||9600
//|P3.5|<------------
//
//跳线串行(P8P9)数码管(P14P15P5P6P7P8)
*****************************************************************
#include
#include"led.h"
#defineucharunsignedchar
externunsignedcharnum[11];
externunsignedcharwei[7];
externvoiddisplay(ucharW,ucharsz);
ucharaa;
/*****************串口初试化设置********************/
voiduart_org(void)
{
ME1|=UTXE0+URXE0;//EnableUSART0TXD/RXD//使能串口
UCTL0|=CHAR;//8-bitcharacter//数据格式为8位
UTCTL0|=SSEL0;//UCLK=ACLK
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MSP430 全部 程序 学习