几个功能函数的调用(包括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; //启动数据传输
}
|