电设工作小结之 - MSP430G2553学习笔记—2(2)

2019-05-24 13:30

IE2 &= ~UCA0RXIE; //发送时先关闭接收中断,不接收 while((*s)!='\\0') //如果没有发完,就继续循环发送 {

putchar(*s);

// putchar('\\n'); //发送换行符 s++; }

IE2 |= UCA0RXIE; //发送完了打开接收中断 }

void main(void) {

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

P1DIR=BIT0;

BCSCTL1 = CALBC1_1MHZ; // Set DCO 为1MHz DCOCTL = CALDCO_1MHZ;

P1SEL = BIT1 + BIT2 ; // P1.1 = RXD, P1.2=TXD P1SEL2 = BIT1 + BIT2; //第二外围模式选择

// UCA0CTL1 |= UCSSEL_2; // SMCLK 其他默认:软件复位使能 USCI逻辑保持在复位状态,用于设置串口

//UCA0CTL0全部为默认状态:无奇偶校验,LSB first,8bit_data,一位停止位,UART模式,异步模式

// UCA0BR0 = 8; // SMCLK 1MHz 115200 8 // UCA0BR1 = 0; // 1MHz 115200

// UCA0MCTL = UCBRS2 + UCBRS0; // Modulation UCBRSx = 5

//下面是选择ACLK,波特率设置为固定的 UCA0CTL1 |= UCSSEL_1; //ACLK

UCA0BR0 = 3; // ACLK 32768Hz 9600 32768Hz/9600 = 3.41

UCA0BR1 = 0; // 32768Hz 9600 UCA0MCTL = UCBRS1 + UCBRS0; // Modulation UCBRSx = 3

UCA0CTL1 &= ~UCSWRST; // **Initialize USCI state machine** 初始化释放,可以操作

IE2 |= UCA0RXIE; // Enable USCI_A0 RX interrupt 接收中断使能

__bis_SR_register(LPM0_bits + GIE); // Enter LPM0, interrupts enabled }

// Echo back RXed character, confirm TX buffer is ready first #pragma vector=USCIAB0RX_VECTOR __interrupt void USCI0RX_ISR(void) {

while (!(IFG2&UCA0TXIFG)); // USCI_A0 TX buffer ready? 等待TX buffer为空

UCA0TXBUF = UCA0RXBUF; // TX -> RXed character 发送接收到是数据

rev=UCA0RXBUF; if(rev&0x01) {

P1OUT |= BIT0; putstr(string1); putstr(string2); } else

P1OUT &= ~BIT0; }

注意:关于波特率的设置这一块还没有看懂,但上面的例子总的设置是对的 值得说明的是:可以用定时器来实现串口通信功能,例子还没有看。

3,对于SPI和I2C,有时有可能会用于g2553和其他的一些芯片、设备的通信用,还没没仔细看。

(六),比较器A Comparator_A+

1,是一个模拟电压比较器,主要功能是指出两个输入电压CA0和CA1的大小关系,然后由输出信号CAOUT输出。

2,输出:如果正端输入电压大于负端输入电压,输入为1。如果负端输入电压大于正端输入电压,输出为0;

3,最终输出信号的上升沿或下降沿可以设置为具有中断能力,中断响应后,硬件会自动清除中断标志位CAIFG,也可以被软件清除。

4,Comparator_A+支持精密的斜坡AD转换,供电电压检测和监视外部模拟信号。 5,比较器的其中一路可以接参考电压,有0.25VCC, 0.5VCC, 三极管的阀值电压0.55V 也可以两路信号都接外部的模拟信号。

6,更详细的内容,参见用户只能,下面的例子是简单的用比较器A比较两个输入模拟电压的高低,有CAOUT输出:

//主要功能是比较两个输入信号的大小关系 #include

void delay(void); // Software delay

void main (void) {

WDTCTL = WDTPW + WDTHOLD; // Stop WDT

CACTL2 = P2CA4; // CA1/P1.1 = +comp 正输入端信号选择CA1,负输入端信号不连接外部输入信号

//其他位的设置为默认:比较器输出不滤波 , CAOUT为比较器的输出结果

CCTL0 = CCIE; // CCR0 interrupt enabled TACTL = TASSEL_2 + ID_3 + MC_2; // SMCLK/8, cont-mode

_EINT(); // enable interrupts

while (1) // Loop {

//比较器A控制寄存器1 CACTL1采用的是默认设置:参考电压源VCAREF加到比较器的正输入端,内部参考源关,比较器关, //中断不使能

CACTL1 = 0x00; // No reference voltage _BIS_SR(LPM0_bits); // Enter LPM0

CACTL1 = CAREF0 + CAON; // 参考源为0.25*Vcc, Comp. on

_BIS_SR(LPM0_bits); // Enter LPM0

CACTL1 = CAREF1 + CAON; // 参考源为0.5*Vcc, Comp. on _BIS_SR(LPM0_bits); // Enter LPM0

CACTL1 = CAREF1 + CAREF0 + CAON; //参考源为三极管的阀值电压 0.55V, Comp. on

_BIS_SR(LPM0_bits); // Enter LPM0 } }

// Timer A0 interrupt service routine #pragma vector=TIMER0_A0_VECTOR __interrupt void Timer_A (void) {

_BIC_SR_IRQ(LPM0_bits); // Clear LPM0 bits from 0(SR) }

7,也可以用比较器A监视供电电压,用0.25VCC和三极管的阀值电压0.55V进行比较,从而监视供电电压的高低,如果电压低于某个值时,可以做某种动作比如报警电池电量过低等。

(七),低功耗模式

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 LPM0 (CPUOFF) #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 \

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

6,具体的例子就不再举了,就是在CPU不需要工作的时候进入低功耗模式,在需要工作的时候,通过中断唤醒。 下面说说一般的低功耗的原则:

(1),最大化LPM3的时间,用32KHz晶振作为ACLK时钟,DCO用于CPU激活后的突发短暂运行。

(2),用接口模块代替软件驱动功能。


电设工作小结之 - MSP430G2553学习笔记—2(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:13、只有一个地球

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: