#include unsigned int k; char str[]="00.0"; long temp; unsigned char tmp[3]; long IntDeg; void ADC10_ISR(void); void ADC10_init(void); void Init_uart0(void);
void Uart0Sends(char *s) { while(*s!='\0') //查找字符。 { UCA0TXBUF=*s; while((IFG2&UCA0TXIFG)==0); //查询发送是否结束,寄存器为空置位,满为复位?? IFG2&=~UCA0TXIFG; //清除发送一标志位,多余的语句,发送完毕 s++; } }
void main() { WDTCTL=WDTPW+WDTHOLD; ADC10_init(); BCSCTL1 = CALBC1_1MHZ; DCOCTL = CALDCO_1MHZ; P1DIR|=BIT0; Init_uart0();
_EINT(); while(1) { ADC10CTL0 |= ENC + ADC10SC; // Sampling and conversion start 采样开始, // _bis_SR_register(CPUOFF + GIE); // LPM0 with interrupts enabled __delay_cycles(1000); //-----ADC转换完成中断唤醒CPU后才执行以下代码-----
temp = ADC10MEM; //读取AD采样值 // IntDeg= temp*4225/1024 - 2777;//转换为摄氏度,并10倍处理 IntDeg=((temp*33)/1023); //if(IntDeg>=200) // P1OUT |= BIT0; // else // P1OUT &= ~BIT0; str[0]=IntDeg/100+0X30; str[1]=IntDeg%100/10+0X30; str[3]=IntDeg%100%10+0X30;
// IntDeg=-123; //由于难以获得负温,直接给负值以测试LCD显示 }
}
/****************************************************************************************************** * 名 称:ADC10_init(void) * 功 能:初始化ADC10采集内部温度传感器,单次手动采样 * 入口参数:无 * 出口参数:无 * 说 明:直接从CCS的Example中移植过来 * 范 例:无 ******************************************************************************************************/ void ADC10_init(void) { P1DIR&=~BIT4; ADC10CTL0 &= ~ENC; // 关闭AD转换器 ADC10CTL0 = ADC10IE + ADC10ON + REFON + ADC10SHT_3 + SREF_1;//1 允许ADC10中断 1 ADC10开启 ,打开基准源 64个ADC10CLK周期 ADC10CTL1 = CONSEQ_0 + ADC10SSEL_0 + ADC10DIV_3 + SHS_0 + INCH_4;//单通道单次采样模式 ADC10OSC 8分频 ADC10SC位 __delay_cycles(30000); ADC10CTL0 |= ENC; //开启AD转换器 } /****************************************************************************************************** * 名 称:ADC10_ISR_HOOK * 功 能:ADC转换完成后唤醒CPU * 入口参数:无 * 出口参数:无 * 说 明:直接从CCS的Example中移植过来 * 范 例:无 ******************************************************************************************************/ #pragma vector=ADC10_VECTOR __interrupt void ADC10_ISR_HOOK(void) { Uart0Sends(str); _bic_SR_register_on_exit(LPM4_bits); } /********************************************************************************************************** * 串口初始化 ********************************************************************************************************* */ void Init_uart0() { UCA0CTL1|=UCSWRST; P1SEL|=BIT1+BIT2; //将P1.1 P1.2设为第二功能 P1SEL2|=BIT1+BIT2;//系统组合 P1DIR |= BIT2; //P1.2 UART_TX P1DIR &=~BIT1; //P1.2 UART_RX UCA0CTL0&=~UC7BIT;//字符长度为8 UCA0CTL1|=UCSSEL_2;//选择系统时钟 UCA0BR0=0x68; //波特率为9600 UCA0BR1=0; UCA0MCTL=0X40;//UCA0MCTL=UCBRS0; UCA0CTL1&=~UCSWRST;
IE2|=UCA0RXIE;//开接收使能
}
#pragma vector=USCIAB0RX_VECTOR __interrupt void usart0_rx(void) { while((IFG2&UCA0RXIFG )==0);//接收一位然后给发送缓存器 再中断再接受 再发送的过程 IFG2&=~UCA0RXIFG ;
Uart0Sends(str);
UCA0TXBUF = UCA0RXBUF; }
|