MSP430 工作笔记一(转)

发布者:SparklingRiver最新更新时间:2016-08-23 来源: eefocus关键字:msp430  工作笔记 手机看文章 扫描二维码
随时随地手机看文章
一,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之间,这样会产生击穿电流。所以不用的IO口可以设为输出状态,或设为输入状态但通过外围电路接至VCC或GND,或接一个上拉/下拉电阻。

7,当使用msp430g2553的IO口时要注意,因为g2553的IO口寄存器的操作,不像51,它不能单独针对某一位进行操作,必须对整个寄存器进行操作。所以就不像51,g2553不可以定义bit型的数据。所以在使用msp的IO口时要注意对需要位的操作,而不要影响其他无关的位,可以 用 |  &  ^等按位操作的符号。在使用IO都控制其他外围模块时也要注意要使用的IO口的定义,可以用如下的定义方法:

#define CLR_RS P2OUT&=~BIT0;    //RS = P2.0

#define SET_RS P2OUT|=BIT0;

#define CLR_RW P2OUT&=~BIT1; //RW = P2.1

#define SET_RW P2OUT|=BIT1;

#define CLR_EN P2OUT&=~BIT2; //EN = P2.2

#define SET_EN P2OUT|=BIT2;

 

#define DataPort    P1OUT

 

8,g2553的P27和P26脚分别接外部晶体的输出和输入脚XOUT和XIN,默认是自动设为了晶振管脚功能,但是当想把它们用为普通的IO时,也可以,设置对应的SEL设为普通的IO即可,如下:

P2DIR |= BIT6+BIT7;    //把P26和P27配置为普通IO 并为输出脚  默认为晶振的输入和输出引脚 作为dac0832的

    P2SEL &= ~(BIT6+BIT7);   //cs和wr控制端

    P2SEL2 &= ~(BIT6+BIT7);

 

 

 

(二),时钟系统

     1,msp430能做到超低功耗,合理的时钟模块是功不可没的。但是功能强大的时钟模块设置起来也相对复杂一些。

     2,msp430的时钟源有:

(1),外接低频晶振LFXT1CLK:低频模式接手表晶体32768Hz,高频模式450KHz~8MHz;

(2),外接高速晶振XT2CLK:8MHz;

(3),内部数字控制振荡器DCO:是一个可控的RC振荡器,频率在0~16MHz;

(4),超低功耗低频振荡器VLO:不可控,4~20KHz 典型值为12KHz;

     3,时钟模块:430的时钟模块有MCLK  SMCLK  ACLK :

(1),主系统时钟MCLK:提供给MSP430的CPU时钟。可以来自LFXT1CLK  XT2CLK  DCO  VLO可选,默认为DCO。

(2),子系统时钟SMCLK: 提供给高速外设。可以来自LFXT1CLK  XT2CLK  DCO  VLO可选,默认为DCO。

(3),辅助系统时钟ACLK:提供给低速外设。可来自LFXT1CLK  VLO。 

     4,内部的振荡器DCO和VLO提供的时钟频率不是很精确,随外部环境变化较大。

DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。DCO可以用CCS提供的宏定义进行相对比较精确的设置,如下:

DCOCTL = CALDCO_12MHZ;   //DCO设为12MHz   这种方法设DCO频率比较精确,实际测得为12.08MHz左右 正弦波

BCSCTL1 = CALBC1_12MHZ;

用这种方法可以设置1,8,12,16MHz

宏定义如下:

#ifndef __DisableCalData

 

SFR_8BIT(CALDCO_16MHZ);                       

SFR_8BIT(CALBC1_16MHZ);                       

SFR_8BIT(CALDCO_12MHZ);                       

SFR_8BIT(CALBC1_12MHZ);                       

SFR_8BIT(CALDCO_8MHZ);                        

SFR_8BIT(CALBC1_8MHZ);                        

SFR_8BIT(CALDCO_1MHZ);                        

SFR_8BIT(CALBC1_1MHZ);                        

 

#endif 

 

5,使用超低功耗低频振荡器VLO可以很大程度地降低系统功耗,下面的例子是设置ACLK为VLO,MCLK为VLO的8分频:

#include  

 

//1延时

//#define CPU_F ((double)16000000)//cpu frequency16000000

#define CPU_F ((double)1630)//cpu frequency1630   //CPU的实际MCLK大约为13.05/8=1.63KHz

#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))

 

 

void main(void)

{

  volatile unsigned int i;                  // Volatile to prevent removal

  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer

 

  BCSCTL3 |= LFXT1S_2;                      // LFXT1 = VLO  低频时钟选择为VLO ACLK选为VLO

 

  IFG1 &= ~OFIFG;                           // Clear OSCFault flag  清除振荡器错误中断标志

 

  __bis_SR_register(SCG1 + SCG0);           // Stop DCO  SCG1禁止SMCLK  SCG0禁止DCO

 

  BCSCTL2 |= SELM_3 + DIVM_3;               // MCLK = LFXT1/8

  //因为前面已经选择了LFXT1 = VLO 所以MCLK选为VLO  8分频  所以CPU的MCLK大约为1.5KHz

 

  P1DIR = 0xFF;                             // All P1.x outputs

  P1OUT = 0;                                // All P1.x reset

  P2DIR = 0xFF;                             // All P2.x outputs

  P2OUT = 0;                                // All P2.x reset

 

  P1SEL |= BIT0+BIT4;                // P10 P14options  功能选择为外围模块

  //p10输出ACLK,来自VLO,p14输出SMCLK,  因为禁止了SMCLK,所以P14脚无波形输出

  //VLO典型值为12KHz  实际用示波器测得为:13.05KHz 左右波动

  //所以CPU的实际MCLK大约为13.05/8=1.63KHz

 

 

  for (;;)

  {

    P1OUT ^= BIT6;          // P1.6 闪烁

    delay_ms(1000);

  }

}

 

  6,如上面的程序所示,其中的延迟函数用那种方法,使用系统的延迟周期函数__delay_cycles(int n); 可以达到比较精确的延迟,如下:

 

//more_

//1延时

//#define CPU_F ((double)16000000)//cpu frequency16000000

#define CPU_F ((double)12000000)//cpu frequency12000000

#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))

//2空函数

#define nop() _NOP();

 

   7,系统上电后默认使用的是DCO时钟,DCO默认的频率大概为800KHz,但我用示波器观察的为1.086MHz左右,当DCO设置的过高时,用示波器可以看到波形不再是方波,而是类似于正弦波。

 

 

 

 (三),定时器Timer_A

   1,MSP430g2553具有两个16位的定时器:Timer0_A   Timer1_A。分别具有三个捕捉/比较寄存器,具有输入捕捉,输出比较功能。可以产生定时中断,也可以产生PWM。

   2,产生PWM,例子如下:

 

#include 

 

 void Timer_A0_1_init()  //TA0.1输出PWM

{

TACTL|= TASSEL_1+MC_1;//ACLK,增计数

CCTL1=OUTMOD_7;//输出模式为复位/置位

CCR0=328;//时钟频率为32768HZ,100HZ

//CCR1=164;//时钟频率为32768HZ,占空比CCR1/CCR0=50%

CCR1=109;//占空比CCR1/CCR0=1/3                              TA0.1由P1.2 P1.6输出

}

 

 void Timer_A1_2_init()    //TA1.2输出PWM

{

TA1CTL|= TASSEL_1+MC_1;//ACLK,增计数

TA1CCTL2=OUTMOD_7;//输出模式为复位/置位,注意CCTL2要写为TA1CCTL2

 

TA1CCR0=164;//时钟频率为32768HZ,波形32768/CCR0=199HZ

TA1CCR2=41;//占空比CCR2/CCR0=1/4,注意CCR2要写成TA1CCR2       TA1.2由P2.4 P2.5输出

 

}

 

 void Timer_A1_1_init()   //TA1.1输出PWM

 {

 TA1CCTL1=OUTMOD_7;

 TA1CCR1=123;   //占空比CCR1/CCR0=3/4,注意CCR1要写成TA1CCR1   TA1.1由P2.1 P2.2输出

 }

 

 void IO_init()

 {

 P1SEL|=BIT2+BIT6;

 P1DIR|=BIT2+BIT6;//P1.2 P1.6输出   TA0.1   OUT1

 

 P2SEL|=BIT4+BIT5;

 P2DIR|=BIT4+BIT5;//P2.4 P2.5输出   TA1.2   OUT2

 

 P2SEL|=BIT1+BIT2;

 P2DIR|=BIT1+BIT2; //P2.1 P2.2输出  TA1.1   OUT1

 }

 

void main(void) {

WDTCTL=WDTPW+WDTHOLD;

 

    IO_init();

 

Timer_A0_1_init();

Timer_A1_2_init();

Timer_A1_1_init();

 

 

_BIS_SR(CPUOFF);                          // Enter LPM0  进入低功耗模式0 SMCLK ON,ACLK ON

}

 

  3,Timer_A的捕获/比较寄存器

TAR寄存器是Timer_A的16位的计数寄存器。TACCRx是Timer_A的捕获/比较寄存器,当为捕获模式时:当捕获发生时,把TAR的值装载到TACCRx中。当为比较模式时:TACCRx中装的是要与TAR寄存器相比较的值。

   4,捕获模式

捕获外部输入的信号的上升沿或下降沿或上升沿下降沿都捕捉,当捕捉发生时,把TAR的值装载到TACCRx中,同时也可以进入中断,执行相应的操作。这样利用捕捉上升沿或下降沿就可以计算外部输入信号的周期,得出频率。利用捕捉上升沿和下降沿可以得出输入信号的高电平或低电平的持续时间。也可以算出占空比。下面是一个例子,是Timer_A捕获初始化的程序:

void timer_init()      //使用Timer1_A时要特别注意各个寄存器的写法,因为Timer0_A的寄存器都简写了,所以在写

//Timer1_A的寄存器时,要特别注意与Timer0_A的不同

{

P1SEL |= BIT2;    //选择P12作为捕捉的输入端子  Timer0_A

 //TACCTL1 |=CM_3+SCS+CAP+CCIE;  //上下沿都触发捕捉,用于测脉宽,同步模式、时能中断  CCI1A

TACCTL1 |=CM_1+SCS+CAP+CCIE;  //上升沿触发捕捉,同步模式、时能中断  CCI1A

    TACTL |= TASSEL1+MC_2;  //选择SMCLK时钟作为计数时钟源,不分频   增计数模式不行,必须连续计数模式

 

  P2SEL |= BIT1;    //选择P21作为捕捉的输入端子    Timer1_A

  //TA1CCTL1 |=CM_3+SCS+CAP+CCIE;  //上下沿都触发捕捉,用于测脉宽,同步模式、时能中断  CCI1A

  TA1CCTL1 |=CM_1+SCS+CAP+CCIE;  //上升沿触发捕捉,同步模式、时能中断  CCI1A

  TA1CTL |= TASSEL1+MC_2;  //选择SMCLK时钟作为计数时钟源,不分频   增计数模式不行,必须连续计数模式

 

}

 

 

相对应的中断函数如下:

 

#pragma vector=TIMER0_A1_VECTOR   //Timer0_A CC1  的中断向量

__interrupt void Timer_A(void)

{

 

// CCI0A 使用的捕捉比较寄存器是TA0CCR0,TA0CCR0单独分配给一个

    //中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer0_A CC0产生的中断,不用经过类似

   //下面的方法判断中断源了  。

//Timer0_A CC1-4, TA0公用一个中断向量 TIMER0_A1_VECTOR,所以进入了中断后还要用下面

    //的方法进行判断是哪一个中断源产生的中断

  switch(TAIV)    //如果是Timer0_A CC1产生的中断

  {

  case 2:

   {

   flag=1;

   LPM1_EXIT;      //退出低功耗模式

  // _BIC_SR_IRQ(LPM1_bits);

   //_bic_SR_register_on_exit(LPM1_bits);

   break;

   }

  case 4: break;

  case 10:break;

  }

}

 

 

#pragma vector=TIMER1_A1_VECTOR      //Timer1_A CC1  的中断向量

__interrupt void Timer_A1(void)

{

 

// P1OUT|=BIT0;  //led调试用的

// LPM1_EXIT;      //退出低功耗模式  因为使用的是CCI0A 使用的捕捉比较寄存器是TA1CCR0,TA1CCR0单独分配给一个

                //中断向量TIMER1_A0_VECTOR,所以进入中断后直接就是Timer1_A CC0产生的中断,不用经过类似

               //下面注释掉的方法判断  。

               //而Timer1_A CC1-4, TA1则公用一个中断向量 TIMER1_A1_VECTOR,所以进入了中断后还要用下面

       //的方法进行判断是哪一个中断源产生的中断

  switch(TA1IV)    //如果是Timer1_A CC1产生的中断

  {

  case 2:

   {

   flag=2;

   LPM1_EXIT;      //退出低功耗模式

 

  // _BIC_SR_IRQ(LPM1_bits);

   //_bic_SR_register_on_exit(LPM1_bits);

   break;

   }

  case 4:break;

  case 10:break;

  }

}

 

//如果要测量更低频率的信号的话,可以在中断中判断溢出中断发生的次数,这样就可以得到溢出的次数,从而可以测量更

//低频率的信号

 

  5,Timer_A的计数模式

计数模式有:增计数模式,连续计数模式和增减计数模式。具体的各个模式的详解,参见用户指南。

   6,定时器的定时中断

在使用定时器的定时中断时,要注意定时器计数模式的选择。在使用中断时,要注意中断向量的使用和中断源的判断,下面就举一个例子,注释的也较详细:

#include 

 

unsigned int t=0;

 

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1DIR |= 0x01;                            // P1.0 output

 

  CCTL0 = CCIE;   // CCTLx是捕获/比较控制寄存器   interrupt enabled  CCIE=0x0010  时能定时器A中断

 

  CCR0 = 50000;   //捕获/比较寄存器   设置计数器CCR0的初值  16位寄存器,最大值为65535

                //默认SMCLK使用的是DCO,默认的DCO大约为800KHz,而CCR0=50000,所以中断产生的频率大约为16Hz

  TACTL = TASSEL_2 + MC_2;                  // SMCLK, contmode  连续计数模式从0计到0FFFFh

  //TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode  增计数模式从0计到CCR0

 

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt  进入低功耗模式0,允许中断

}

 

// Timer A0 interrupt service routine

#pragma vector=TIMER0_A0_VECTOR

__interrupt void Timer_A (void)    //CCIFG中断被响应后,该标志位自动清零

 

{

  //P1OUT ^= 0x01;                            // Toggle P1.0

t++;

if(t==5)

{

P1OUT ^= BIT0;           // Toggle P1.0

t=0;

}

 

  CCR0 += 50000;                            // Add Offset to CCR0  增加CCR0偏移

 

   

  //定时器总是从0开始往上计数,一直到计满再从0开始,在连续计数模式下,当定时器的值等于CCR0时,产生中断

  //在中断中对CCR0增加50000,这样的话定时器从当前值到下一时刻再次等于CCR0时的间隔为50000,恒定

  //这样产生中断的时间间隔就相等了

 //所以在连续计数模式下,要想使中断的时间间隔一定,就要有CCR0 += n;这句话

                                              //在中断中CCR0不需要从新赋值,区别于51

}

 

中断的使用注意情况:还是把举个例子吧:

#include 

 

void main(void)

{

  WDTCTL = WDTPW + WDTHOLD;                 // Stop WDT

  P1DIR |= 0x01;                            // P1.0 output

  TACTL = TASSEL_2 + MC_2 + TAIE;           // SMCLK, contmode, interrupt  TAIE允许定时器溢出中断

 

  _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt  GIE允许中断

}

 

// Timer_A3 Interrupt Vector (TA0IV) handler

#pragma vector=TIMER0_A1_VECTOR

__interrupt void Timer_A(void)

{

 switch( TA0IV )    //TAIV中断向量寄存器  用于

 {

   case  2: break;                          // CCR1 not used   捕获/比较器1

   case  4: break;                          // CCR2 not used    捕获/比较器2

   case 10: P1OUT ^= 0x01;                  // overflow  定时器溢出

            break;

 }

}

 

 

 

  7,注意:定时器Timer0_A的时钟可以选择为外接时钟输入TACLK(P10),这样当外接一个信号时,定时器Timer0_A就相当于一个计数器使用。这样就可以用Timer0_A接外接信号,Timer1_A接标准的时钟如32768Hz的晶振,就可以实现等精度测频了。其实Timer1_A的时钟也可以外接的,但是在g2553中没有这个外接管脚(P37),所以就只能选择正常的时钟了。

Timer0_A的外接时钟输入TACLK(P10)的设置如下:下面是我实现等精度测频时,两个定时器的初始化程序:

void timer0_init()

{

TACTL |= TASSEL_0+MC_2+TACLR;  //选择TACLK时钟作为计数时钟源,不分频   必须连续计数模式

 

P1SEL |= BIT0;   //P10为Timer0_A的时钟TACLK输入,接外部待测信号,这样Timer0_A就当作计数器用

}

//Timer1_A采用ACLK作为时钟源计数,这样ACLK就相当于是标准信号,这样两个定时器相当于都工作在计数器方式,

//ACLK 32768Hz作为标准信号,这样可以实现等精度测频

void timer1_init()

{

 

TA1CCTL0 = CCIE;

TA1CCR0 = 32768;    //1s定时

 

TA1CTL |= TASSEL_1+MC_2+TACLR;  //选择ACLK时钟作为计数时钟源,不分频   必须连续计数模式

 

}

8,用定时器和比较器可以实现DAC

   使用定时器也可以实现串口通信

关键字:msp430  工作笔记 引用地址:MSP430 工作笔记一(转)

上一篇:msp430工作笔记二
下一篇:基于MCU-FPGA架构的风光逆变并网系统

推荐阅读最新更新时间:2024-03-16 15:06

MSP430教程:MSP430单片机ADC12模块
MSP430单片机的ADC12模块是一个12位精度的A/D转换模块,他具有高速度,通用性等个性。大局部都内置了ADC模块.而有些不带ADC模块的片子,也可穿越利用内置的模仿比拟器来告终AD的转换。在系列产品中,我们能够穿越以下列表来容易地认识他们的ADC功能告终。 系列型号ADC功能告终转换精度 MSP430X1XX2比拟器告终10位 MSP430F13XADC模块12位 MSP430F14XADC模块12位 MSP430F43XADC模块12位 MSP430F44XADC模块12位 MSP430X32XADC模块14位 从以下ADC12构造图中能够看出,ADC12模块中是由以下局部构成:输入的16
[单片机]
用超低功耗MSP430单片机设计数据采集系统
1 MSP430单片机简介 MSP430 是TI公司近几年推出的16位系列单片机,其最早是面向于驱动LED显示的应用设计,由于极好的应用效果和很大的市场潜力,TI很快将其发展为通用单片机。现已有X1XX、X3XX、X4XX几个系列,并且还在不断的发展。MSP430作为一种新型的单片机,采用了TI公司最新的低功耗技术,使其在众多的单片机中独树一帜。MSP430工作在1.8~3.6V电压下,有正常工作模式(AM)和4种低功耗工作模式(LPM1、LPM2、LPM3、 LPM4),在电源电压为3V时,各种模式的工作电流分别为 AM:340uA、LPM1:70uA、LPM2:17uA、LPM3:2uA、LPM4:0.1uA。单片机可以方
[单片机]
用超低功耗<font color='red'>MSP430</font>单片机设计数据采集系统
解读MSP430F2274单片机设计的倒车雷达系统电路
  随着人们对汽车辅助驾驶系统智能化要求的提高和 汽车电子 系统的网络化发展,新型的倒车雷达应能够连续测距并显示障碍物距离,并具有通信功能,能够把数据发送到汽车总线上去。以往的倒车雷达设计使用的元器件较多,功能也较简单。本文介绍的基于新型高性能超低功耗单片机MSP430F2274的倒车雷达可以弥补以往产品的不足。   系统采用超声波测距原理。超声波测距仪器一般由发射器、接收器和信号处理器三部分组成。工作时,超声波发射器发出超声波脉冲,超声波接收器接收遇到障碍物反射回来的反射波,准确测量超声波从发射到遇到障碍物反射返回的时间,根据超声波的传播速度,可以计算出障碍物距离。作为一种非接触式的检测方式,超声波具有空气传播衰减小、反射能力和穿
[单片机]
解读<font color='red'>MSP430</font>F2274单片机设计的倒车雷达系统电路
MSP430 定时器输出PWM波形
硬件介绍: MSP430系列单片机的TimerA结构复杂,功能强大,适合应用于工业控制,如数字化电机控制,电表和手持式仪表的理想配置。它给开发人员提供了较多灵活的选择余地。当PWM 不需要修改占空比和时间时,TimerA 能自动输出PWM,而不需利用中断维持PWM输出。 MSP430F16x和MSP430F14x单片机内部均含有两个定时器,TA和TB;TA有三个模块,CCR0-CCR2;TB含有CCR0-CCR67个模块;其中CCR0模块不能完整的输出PWM波形(只有三种输出模式可用);TA可以输出完整的2路PWM波形;TB可以输出6路完整的PWM波形。 定时器的PWM输出有有8种模式: 输出模式0 输出模式:输出信号OUTx由
[单片机]
<font color='red'>MSP430</font> 定时器输出PWM波形
CAN总线与MSP430红外检测系统电路
  本文介绍的是一种新的检测系统,选用红外CO传感器和MSP430单片机作为核心信号处理电路,结合数字滤波、温度补偿运算.具有检测浓度范围宽、使用寿命长等优点。   系统组成及硬件设计   该系统由红外CO气体传感器、MSP430单片机、CAN总线接口及远程监控系统组成。该系统在检测现场通过单片机处理检测的数据、控制 LCD显示、声光报警,同时还配备CAN总线控制器,可以轻松获取浓度、温度以及报警记录等相关信息,实现了智能化的工业现场、远程同时监控功能。系统的组成框图如图1所示。      CAN总线接口设计   该系统CAN接口由独立的CAN总线控制器SJA1000、CAN数据收发器TJA1050组成。SJA1000是独立
[单片机]
CAN总线与<font color='red'>MSP430</font>红外检测系统电路
MSP430F149的串口RS485接口
一、简述 RS485通信基本原理和使用方法同RS232,不同点如下。 RS232接口只能实现点对点的通信方式,但这种方式不能实现联网功能,便出现了RS485解决了这个问题。RS485采用差分信号负逻辑,+2V~+6V表示“1”,- 6V~- 2V表示“0”。双机通信时只需A-A,B-B连接。 硬件电路一般采用SN65176等RS485电平转换芯片。与MCU相连时有三个引脚:DE(RE同DE连在一起),DI(接受引脚),RO(发送引脚)。MCU发送一帧信号时,要先使能DE=1;接收信号前要先使能DE=0(即RE=0)。 二、实例 2.1 发送字符8.N.1.2400 #define DRE_out P3DIR
[单片机]
使用MSP430G2 LaunchPad开发板连接步进电机的方法
在本篇文章中,我们将介绍如何使用MSP430 LaunchPad开发板连接一个步进电机。 MSP-EXP430G2是德州仪器(TI)提供的开发工具,又名LaunchPad,用于学习和练习如何使用他们提供的微控制器。该开发板属于MSP430产品线,我们可以使用它对所有MSP430系列微控制器进行编程。如果您是MSP430的新手,请查看MSP430 LaunchPad的入门教程。 所需的材料 ● MSP430 LaunchPad开发板 ● 35BYJ46或28-BYJ48步进电机 ● ULN2003驱动芯片 ● 连接导线 ● 面包板 步进电机 步进电机是一种无刷直流电机,可将电脉冲转换为不同的机械运动。步进电机的轴以
[单片机]
使用<font color='red'>MSP430</font>G2 LaunchPad开发板连接步进电机的方法
基于MSP430F169的深海环境数据采集系统设计
海洋占地球表面的71%,是各国分别占有和世界共有的。世界海洋中有2.5亿平方千米公海和国际海底区域,其中有丰富的共有海洋资源。海洋是富饶而未充分开发的资源宝库。随着陆地战略资源的日益短缺,沿海各国不断加大向海洋索取资源的力度和强度。因此,开发一种可采集深海环境信息的设备,对深入开发海洋资源,具有极其重要的作用。已有的深海环境信息采集系统有采样精度低、功耗大等缺点,无法长期在水下工作,不适于深海勘探。本文提出的深海环境数据采集系统可用于4 000 m深海环境,不仅能对温度、压力、盐度等信息进行采集,还可以自动存储到Flash中,并上传到上位机进行显示、分析。该系统具有精度高、功耗低等优点,一次充电可工作一年左右,非常适合深海探测。
[测试测量]
基于<font color='red'>MSP430</font>F169的深海环境数据采集系统设计
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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