LaunchPad 官方例程(无修改)
-----------------
MSP430G2xx2
1.
//*************************************************************************
// LaunchPad Lab2 - Software Toggle P1.0, 软件切换的 P1.0,
//
//
//
//
//
//
//
//*************************************************************************
#include
/|\|
| |
--|RST
|
|
XIN|-
|
XOUT|-
|
P1.0|-->LED
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
//停止看门狗定时器
if (CALBC1_1MHZ == 0xFF || CALDCO_1MHZ == 0xFF)
{
while(1);
//如果校准常数擦除,捕获的 CPU!!
}
// Configure Basic Clock
BCSCTL1 = CALBC1_1MHZ;
DCOCTL = CALDCO_1MHZ;
BCSCTL3 |= LFXT1S_2;
P1DIR = BIT6;
P1OUT = 0;
//设置范围
//集检查官步+调制
// 设置 LFXT1
//P1.6 输出(绿色 LED)
// LED 关
IFG1 &= ~OFIFG;
BCSCTL2 |=SELM_1 + DIVM_0;
//清除 OSCFault 标志
//设置的 MCLK
for(;;)
{
P1OUT = BIT6;
_delay_cycles(100);
P1OUT = 0;
_delay_cycles(5000);
}
}
// P1.6 输出(绿色 LED)
//绿色 LED 关闭
-----------------
MSP430G2xx2
2.
//*************************************************************************
// LaunchPad Lab3 - Software Port Interrupt Service 软件端口的中断服务
//
//
//
//
//
//
//
//
//
//*************************************************************************
#include
/|\|
| |
--|RST
|
/|\
--o--|P1.3
\|/
XIN|-
|
XOUT|-
|
P1.0|-->LED
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
P1DIR |= BIT0;
P1IES |= BIT3;
P1IFG &= ~BIT3;
P1IE |= BIT3;
//停止看门狗定时器
//设定的 P1.0 输出方向
// P1.3 可高/低边
// P1.3 IFG 清除
// 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;
P1IFG &= ~BIT3;
}
}
// P1.0 切换
// P1.3 IFG 清除
3.
//*************************************************************************
// LaunchPad Lab5 - ADC10, Sample A10 Temp and Convert to oC and oF ADC10,样品
A10 的温度和转换
-----------------
MSP430G2452
/|\|
| |
--|RST
//
//
//
//
//
//
//
//*************************************************************************
#include
"msp430g2553.h"
|
|A10
XIN|-
|
XOUT|-
|
|
long temp;
long IntDegF;
long IntDegC;
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
//Configure ADC10
ADC10CTL1 = INCH_10 + ADC10DIV_3;
ADC10CTL0 = SREF_1 + ADC10SHT_3 + REFON + ADC10ON + ADC10IE;
// Stop WDT
// 选择 ADC 通道温度传感器
// 选 择
__enable_interrupt();
//使能中断。
ADC 号源
// Delay to allow Ref to settle 延迟让价解决
//比较模式中断。
// TACLK= SMCLK,最多的模式。
//等待延迟。
//禁用定时器中断
TACCR0 = 30;
TACCTL0 |= CCIE;
TACTL = TASSEL_2 | MC_1;
LPM0;
TACCTL0 &= ~CCIE;
__disable_interrupt();
while(1)
{
ADC10CTL0 |= ENC + ADC10SC;
__bis_SR_register(LPM0_bits + GIE);
//采样和转换启动
// LPM0 与中断功能
// oF = ((A10/1024)*1500mV)-923mV)*1/1.97mV = A10*761/1024 - 468
temp = ADC10MEM;
IntDegF = ((temp - 630) * 761) / 1024;
// oC = ((A10/1024)*1500mV)-986mV)*1/3.55mV = A10*423/1024 - 278
temp = ADC10MEM;
IntDegC = ((temp - 673) * 423) / 1024;
__no_operation();
// SET BREAKPOINT HERE 此设置断点
}
}
// ADC10 interrupt service routine
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR (void)
{
__bic_SR_register_on_exit(LPM0_bits);
//明确 CPUOFF 位从 0(SR)
}
#pragma vector=TIMER0_A0_VECTOR
__interrupt void ta0_isr(void)
{
TACTL = 0;
__bic_SR_register_on_exit(LPM0_bits);
//明确 CPUOFF 位从 0(SR)
}
4.
//*************************************************************************
// MSP430F20xx 演示 - 基本时钟,输出缓冲 SMCLK,ACLK 和 MCLK/10/ /
//说明:缓冲区 ACLK 从 P2.0,P1.4 脚和 MCLK/10 默认 SMCLK(DCO)
/ / P1.5 的。
// ACLK= LFXT1= VLO 的,个 MCLK= SMCLK=默认的 DCO
/ / / /*安装辛 XOUT 之间的外部晶体需要 ACLK* / /
-----------------
XIN|-
|
XOUT|-
|
MSP430F20xx
/|\|
| |
--|RST
//
//
//
//
//
//
//
//
//
//*************************************************************************
P1.4/SMCLK|-->SMCLK = Default DCO
P1.0/ACLK|-->ACLK = VLO
P1.5|-->MCLK/10 = DCO/10
|
|
|
|
#include
unsigned char s;
void main(void)
{
// 关闭看门狗
// LFXT1 = VLO
WDTCTL = WDTPW +WDTHOLD;
BCSCTL3 |= LFXT1S_2;
//DCOCTL = 0;
//BCSCTL1 = CALBC1_16MHZ;
//DCOCTL = CALBC1_16MHZ;
P1DIR |= 0x31;
P1SEL |= 0x11;
// P1.0,4 ACLK/ VLO 的,SMCLK/ DCO 输出
//SMCLK Sub-System Main Clk, ACLK 和 SMCLK 可以通过复用引脚输出,MCLK
// P1.0,和 P1.4 输出
不能直接输出体现, MCLK 可以配置为 VLO 或者 DCO
while(1)
{
P1OUT |= 0x20;
// P1.5 = 1, 通过开关 P1.5 来体现 MCLK,这
两条指令的周期大概为 SMCLK 的 1/10
P1OUT &= ~0x20;//20;
}
}
5.
//*************************************************************************
// MSP430xG46x 演示 - FLL 的内部运行,在 8MHz 检查官
//说明:此程序演示设置内部 DCO 运行
/ /为 8MHz 由 FLL+自动校准。
// ACLK= LFXT1=32768Hz 的 , 个 MCLK= SMCLK= 检 查 官 = ( 121+1 ) × 2 ×
ACLK=7995392Hz
/ / / /*辛与 XOUT 之间的外部钟晶振需要 ACLK* / /
-----------------
MSP430xG461x
/|\|
| |
--|RST
//
//
//
//
//
//
//
//
//
//
//
//
//*************************************************************************
#include
P1.1|--> MCLK = 8MHz
P1.5|--> ACLK = 32kHz
|
|
|
|
|
XIN|-
| 32kHz
XOUT|-
|
|
|
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
FLL_CTL0 |= DCOPLUS + XCAP18PF;
//停止看门狗定时器
// DCO+ set, 频率 = xtal x D x
N+1
SCFI0 |= FN_4;
SCFQCTL = 121;
P1DIR = 0x22;
P1SEL = 0x22;
while(1);
}
// x2 DCO freq, 8MHz nominal DCO
// (121+1) x 32768 x 2 = 7.99 MHz
// P1.1 口和 P1.5 的输出方向
// P1.1 口和 P1.5 的输出 MCLK 和 ACLK
//循环到此
6.
//*************************************************************************
// MSP430xG46x 演示 - Flash 在系统编程,复制世嘉 SegB
/ /
/ /说明:此程序首先擦除闪烁赛格 A,那么它的增量
/ /赛格一个值,然后擦除赛格 B,然后复制赛格一个赛格 B。
//假设的 MCLK 的 550kHz - 900kHz 的。
/ / / /* NOP 指令集在主循环中断点,以避免强调的 Flash *//
-----------------
MSP430xG461x
//
//
//
//
//
//
//
//*************************************************************************
/|\|
| |
--|RST
XIN|-
|
XOUT|-
|
|
#include
char value;
// 8 位值写段
// Function prototypes
void write_SegA (char value);
void
copy_A2B (void);
void main(void)
{
WDTCTL = WDTPW + WDTHOLD;
FCTL2 = FWKEY + FSSEL0 + FN0;
value = 0;
while(1)
{
write_SegA(value++);
copy_A2B();
_NOP();
}
}
void write_SegA (char value)
{
char *Flash_ptr;
unsigned int i;
Flash_ptr = (char *) 0x1080;
FCTL1 = FWKEY + ERASE;
FCTL3 = FWKEY;
*Flash_ptr = 0;
FCTL1 = FWKEY + WRT;
for (i=0; i<128; i++)
{
*Flash_ptr++ = value;
}
FCTL1 = FWKEY;
FCTL3 = FWKEY + LOCK;
}
void copy_A2B (void)
//停止看门狗定时器
//的 MCLK/2 闪存时序发生器
//初始化值
//永远重复
//写段,增量值
// 复制段 A 到 B
//此设置断点
//闪存的指针
//初始化闪存的指针
//设置擦除位
//清除锁定位
//空写,擦除闪存段
//为写操作的 WRT 位
//写入值闪烁
//清除 WRT 的位
//设置锁定位