No.28060 作者:xiechenlei1985 邮件:xiechenlei1985@yahoo.com.cn ID:97508 登陆:12次 文章数:1篇 最后登陆IP:218.23.101.178 最后登陆:2011/6/23 19:24:18 注册:2007/12/14 13:54:26 财富:110 发帖时间:2008/2/20 9:01:22 发贴者IP:220.178.74.2 标题:xiechenlei1985:[求助]初学单片机,碰到一个问题,如何将ADC12和串口通信相连。请大侠帮忙,小弟不胜感激 摘要:No.28060[求助]初学单片机,碰到一个问题,如何将ADC12和串口通信相连。请大侠帮忙,小弟不胜感激 这是我从书上找得程序,又改了点,但是无法验证通过,不知道什么原因,请大侠指点。 #include <msp430x14x.h> //定义全局变量 //模拟采集变量 int nADC_Flag; int nADC_Count; //串口发送变量 int nSend_TX1; static int nTX1_Len; static int nTX1_Flag; //模拟采集缓冲区 int ADC_BUF_Temp0[10]; int ADC_BUF0[10]; //发送缓冲区 char UART1_TX_BUF[50]; //子程序声明 void Init_CLK(void); void Init_ADC(void); void Init_TimerA(void); void Init_UART1(void); void main(void) { int i; WDTCTL = WDTPW + WDTHOLD; // 停止WDT P1DIR |= 0x01; P1OUT |= 0x0f; //LED设置 _DINT(); //关闭中断 //初始化 Init_CLK(); Init_ADC(); Init_TimerA(); //初始化变量 nADC_Flag=0; nADC_Count=0; nSend_TX1=0; nTX1_Len=0; nTX1_Flag=0; _EINT(); //打开中断 //开始循环 for(;;) { //处理模拟量采集并发送 if(nADC_Flag==1) { nADC_Flag=0; while(1) //等待缓冲区里的数据发送完毕 { if(nTX1_Flag==1) break; } //将数据由字转换成字节 for(i=0;i <10;i++) { UART1_TX_BUF[2*i]=(char)(ADC_BUF_Temp0[i]&0x00ff); UART1_TX_BUF[2*i+1]=(char)((ADC_BUF_Temp0[i]> > 8)&0x00ff); } //设置帧结束标记 UART1_TX_BUF[20]=0xaa; UART1_TX_BUF[21]=0xaa; nTX1_Len=22; //发送数据的长度 IFG2|=UTXIFG1; //设置中断标志 } } } //时钟初始化 void Init_CLK(void) { unsigned int i; BCSCTL1 &= ~XT2OFF; //启动XT2, do { IFG1 &= ~OFIFG; //清OSCFault标志 for(i=0xFF;i> 0;i--); //延时等待 } while((IFG1 & OFIFG) != 0); //查OSCFault,为0时转换完成 BCSCTL2 |= SELS; //SMCLK为XT2 return; } //ADC12初始化 void Init_ADC(void) { //ADC12设置************************** P6SEL |= 0x01; //使用A/D通道 A0 ADC12CTL0 &= ~ENC ; //转换允许(上升沿) ADC12CTL0 = ADC12ON+MSC+SHT0_2 ; //开ADC12内核,设SHT0=2 (N=4) ADC12CTL1 = SHP+CONSEQ_2 ; //SAMPCON信号选为采样定时器输出,单口连发 //ADC12内部参考电压设置 ADC12CTL0 |= REF2_5V; //选用内部参考电压为2.5V ADC ......
>>返回讨论的主题
|