4079|2

33

帖子

0

TA的资源

一粒金砂(中级)

楼主
 

几个功能函数的调用(包括adc,uart,timer) [复制链接]

#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;                                                       //启动数据传输
}

最新回复

很好啊  详情 回复 发表于 2012-7-24 00:13
 
点赞 关注

回复
举报

547

帖子

0

TA的资源

纯净的硅(初级)

沙发
 
恩恩,很实用的东西。。。
 
个人签名嵌入式培训www.51great.org
 

回复

28

帖子

0

TA的资源

一粒金砂(中级)

板凳
 
很好啊
 
 
 

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

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/8 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表