社区导航

 

搜索
查看: 2692|回复: 2

[原创] 几个功能函数的调用(包括adc,uart,timer)

[复制链接]

36

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-7-22 22:30 | 显示全部楼层 |阅读模式
#include "msp430g2553.h"
#include "UART.h"


void main(void)
{
          WDTCTL = WDTPW + WDTHOLD;                   // Stop watchdog timer  禁止看门狗

          TIMER_Initial();
          UART_Initial();
          ADC10_Single_Initial();

       
}


#ifndef UART_H_
#define UART_H_
#include "msp430g2553.h"

extern void  TIMER_Initial (void);                 //定时计数器处事化
extern void  UART_Initial  (void);                 //UART初始化
extern void  ADC10_Single_Initial(void);           //ADC10初始化
extern void  UART_SendOneByte (unsigned char Dat); //UART 发送一个字节
extern void ADC10_Sequence_Conversion(void)
extern void ADC10_Single_Conversion(void)



#endif /* UART_H_ */




#include "msp430g2553.h"

unsigned int ad0,ad1,ad2,ad3;

/*************************************
AD中断服务程序   (退出低功耗模式0)
*************************************/
#pragma vector=ADC10_VECTOR
__interrupt void ADC10_ISR(void)
{
  __bic_SR_register_on_exit(CPUOFF);        // Clear CPUOFF bit from 0(SR)
}

/*************************************/

/*************************************
定时中断服务程序
*************************************/
#pragma vector=TIMER0_A0_VECTOR
__interrupt void Timer_A (void)
{
  P1OUT ^= 0x01;                            // Toggle P1.0  p1.0状态翻转

}
/*************************************/

/*************************************
定时计数器初始化   进低功耗模式0 同时开启全局中断
*************************************/
void TIMER_Initial(void)
{

          P1DIR |= 0x01;                            // P1.0 output
          CCTL0 = CCIE;                             // CCR0 interrupt enabled    timer 中断使能
          CCR0 = 50000;                             //
          TACTL = TASSEL_2 + MC_1;                  // SMCLK, upmode  选择SMCLK作完成timer的时钟   采用增计数模式

          _BIS_SR(LPM0_bits + GIE);                 // Enter LPM0 w/ interrupt
}

/*************************************/

/*************************************
初始化UART  校正1MHZ时钟 设置波特率为9600
*************************************/
void UART_Initial(void)
{
          BCSCTL1 = CALBC1_1MHZ;                    // 较正DCO时钟
          DCOCTL = CALDCO_1MHZ;
          P1SEL = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
          P1SEL2 = BIT1 + BIT2 ;                     // P1.1 = RXD, P1.2=TXD
          UCA0CTL1 |= UCSSEL_2;                     // SMCLK作为系统时钟
          UCA0BR0 = 104;                            // 1MHz 9600
          UCA0BR1 = 0;                              // 1MHz 9600
          UCA0MCTL = UCBRS0;                        // Modulation UCBRSx = 1 方式一进行调制
          UCA0CTL1 &= ~UCSWRST;                     // **Initialize USCI state machine**  USCI复位释放
          IE2 |= UCA0RXIE;                          // Enable USCI_A0 RX interrupt  UART接收中断使能
}
/*************************************/

/*************************************
ADC10单通道转换初始化
*************************************/
void ADC10_Single_Initial(void)
{
          ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled  开启AD 选择采样周期  AD中断使能
          ADC10CTL1 = INCH_1;                       // input A1   选择A1为模拟输入端
          ADC10AE0 |= 0x02;                         // PA.1 ADC option select 打开A1输入端
          P1DIR |= 0x01;                            // Set P1.0 to output direction  设置p1.0为输出
}
/*************************************/

/*************************************
ADC10单通道转换功能函数
*************************************/
void ADC10_Single_Conversion(void)
{
          for (;;)
          {
            ADC10CTL0 |= ENC + ADC10SC;             // Sampling and conversion start 采样转化开始
            __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exi 进低功耗0开全局中断
            if (ADC10MEM < 0x88)                    // ADC10MEM = A1 > 0.2V?     A1>0.2v 熄灭LED
              P1OUT &= ~0x01;                       // Clear P1.0 LED off
            else
              P1OUT |= 0x01;                        // Set P1.0 LED on
          }
}

/*************************************/

/*************************************
ADC10序列通道单次转换初始化
*************************************/
void ADC10_Sequence_Initial(void)
{
          ADC10CTL1 = INCH_3 + CONSEQ_1;                      // A3/A2/A1, single sequence A3,A2,A1,A0序列通道单次转换
          ADC10CTL0 = ADC10SHT_2 + MSC + ADC10ON + ADC10IE;   //SHI的第一个上升沿触发采样定时器,后面的采样与转换由前一次转换 完成后立即执行
          ADC10DTC1 = 0x04;                                   // 4 conversions  4次转换
          ADC10AE0 |= 0x0f;                                   //打开A3,A2,A1,A0

}
/*************************************/

/*************************************
ADC10序列通道单次转换功能函数
*************************************/
void ADC10_Sequence_Conversion(void)
{
          for (;;)
          {
            ADC10CTL0 &= ~ENC;
            while (ADC10CTL1 & BUSY);               // Wait if ADC10 core is active
            ADC10SA = 0x200;                        // Data buffer start    将转换结果存储在从0x200开始                     // P1.0 = 1
            ADC10CTL0 |= ENC + ADC10SC;             //采样转换开始
            __bis_SR_register(CPUOFF + GIE);        // LPM0, ADC10_ISR will force exit
                ad0 = *(unsigned int *)0x200;
                ad1 = *(unsigned int *)0x202;
                ad2 = *(unsigned int *)0x204;
                ad3 = *(unsigned int *)0x206;
          }

}
/*************************************/

/*************************************
UART发送单字节函数
*************************************/
void UART_SendOneByte(unsigned char Dat)
{
   while(UCA0STAT&UCBUSY);                                                // 等待数据发送完毕
   UCA0TXBUF = Dat;                                                       //启动数据传输
}

回复

使用道具 举报

594

TA的帖子

0

TA的资源

纯净的硅(初级)

Rank: 4

发表于 2012-7-23 11:27 | 显示全部楼层
恩恩,很实用的东西。。。
嵌入式培训www.51great.org

回复

使用道具 举报

28

TA的帖子

0

TA的资源

一粒金砂(中级)

Rank: 2

发表于 2012-7-24 00:13 | 显示全部楼层
很好啊

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-2-17 15:53 , Processed in 0.142172 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表