历史上的今天
返回首页

历史上的今天

今天是:2024年10月10日(星期四)

正在发生

2019年10月10日 | MSP430 ADC12模块应用范例(2)

2019-10-10 来源:eefocus

1-简介

简介MSP430单片机ADC12模块 序列单次采集的 应用范例。


2-例程


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

//MSP430F149 ADC12模块+串行通讯的实验程序

//使用ADC12采集实验,将采集到数据送向PC.(序列单次采集)

//P3.4为发送,P3.5为接收 晶体使32768HZ/8MHZ. 串行波特率B/S

//使用SMCLK作为波特率发器时,不能使用LPM2,LPM3!

//以下程序已验证通过,初学者可直接使用.由时间仓促和水平有限,请读者批评指正.

//编写:www.Microcontrol.cn/DC

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


#include


#define ADCOK 0x01 //B0为ADC12完成转换标志.


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

//表区

unsigned char number_table[]={'0','1','2','3','4','5','6','7','8','9'};

unsigned char display_buffer[]={0x00,0x00,0x00,0x00,0xff};


//*******************波特率***********300 600 1200 2400 4800 9600 19200 38400 76800 115200const 

//************************************[0]**[1]**[2]*[3]**[4]**[5]***[6]***[7]****[8]***[9]*

unsigned char BaudrateUBR0[] ={0x6D,0x36,0x1B,0x0D,0x06,0x03, 0xA0, 0xD0, 0x68, 0x45};

unsigned const char BaudrateUBR1[] ={0x00,0x00,0x00,0x00,0x00,0x00, 0x01, 0x00, 0x00, 0x00};

unsigned const char BaudrateUMCTL[]={0x22,0xD5,0x03,0x6B,0x6F,0x4A, 0xC0, 0x40, 0x40, 0x4A};


unsigned char timp;

//变量区

unsigned int ADC0 ;

//子程序声明

void init (void);                     //初始化

void ADC12setup(void);                //ADC12初始化

void BaudrateSetup(unsigned char U0); //UART0初始化

void data_converter(unsigned char *p,unsigned int vaule); //数据变换

void send_data(unsigned char *p);                         //串行口发送数组

void send_adc12_data(unsigned int *p,unsigned int adcn);  //发送ADC12数据 

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


void main(void)

{

 init();

//主循环

for (;;) 

  {

   LPM0;

   ADC12CTL0 |= ADC12SC;                     //sampling open,AD转换完成后(ADC12BUSY=0),ADC12SC自动复位;

   while((ADC12IFG & BIT0) == 0);            //等转换结束

   gbit &= ~ADCOK; //清转换完成标志

   send_adc12_data(ADC,2);                   //发送数据

  }

}


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

void init(void)

{

 P1DIR=0x01;P1OUT=0x0f;      //LED设置

 BaudrateSetup(6);

 ADC12setup();

 gbit=0x00;

 _EINT();                    // 全局中断使能

}


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

//串口接收中断,退出LPM0模式.

#pragma vector=USART0RX_VECTOR

__interrupt void usart0_rx (void)

{

 LPM0_EXIT;

}


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

//ADC12初始化

void ADC12setup(void)

{

 //ADC12设置**************************

 P6SEL |= 0x03;                   //使用A/D通道 A0,A1

 ADC12CTL0 = ADC12ON+MSC+SHT0_2 ; //开ADC12内核,设SHT0=2 (N=4) 

 ADC12CTL1 = SHP+CONSEQ_1 ;       //SAMPCON信号选为采样定时器输出,序列单次


 //ADC12内部参考电压设置

 ADC12CTL0 |= REF2_5V;            //选用内部参考电压为2.5V

 ADC12CTL0 |= REFON;              //内部参考电压打开

 ADC12MCTL0 |= SREF_1+INCH_0;     //R+=2.5V R-=VSS,A0输入


 ADC12CTL1 |= REF2_5V;            //选用内部参考电压为2.5V

 ADC12CTL1 |= REFON;              //内部参考电压打开

 ADC12MCTL1 |= SREF_1+INCH_1+EOS; //R+=2.5V R-=VSS,A1输入,结束位


 //转换允许

 ADC12IE =0x02;                   //使能中断ADC12IFG A1

 ADC12CTL0 |= ENC ;               //转换允许(上升沿)

}


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

//UART0初始化

void BaudrateSetup(unsigned char U0) 

 unsigned int i;

 if(U0>5)                    //当U0>5时,启用XT2

 {

  BCSCTL1 &= ~XT2OFF;        //启动XT2,

  do

   { IFG1 &= ~OFIFG;         //清OSCFault标志

    for(i=0xFF;i>0;i--);     //延时等待

   }

 while((IFG1 & OFIFG) != 0); //查OSCFault,为0时转换完成

 BCSCTL2 |= SELS;            //SMCLK为XT2

 }

//UART0 

 P1OUT=0x00;

 if(U0>5){UTCTL0=SSEL1;}      // 时钟源:SMCLK

 else{UTCTL0=SSEL0;}          // 时钟源:ACLK

 UCTL0 &= ~SWRST;             // SWRST复位, USART允许

 UCTL0=CHAR;                  // 8bit

 ME1|=UTXE0 + URXE0;          // Enable Tx0,Rx0

 IE1|=URXIE0;                 // RX使能

 UBR00=BaudrateUBR0[U0];      // 低位分频器因子

 UBR10=BaudrateUBR1[U0];      // 高位分频器因子 

 UMCTL0=BaudrateUMCTL[U0];    // 波特率调整因子

 P3SEL |= 0x30;               // 将P3.4,5使用外围模块 = USART0 TXD/RXD

 P3DIR |= 0x10;               // 将P3.4设为输出(发),P3.5默认为输入(收)

}


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

//数据变换

void data_converter(unsigned char *p,unsigned int value) 

{

 unsigned int m,n,j=0;

 p[0]=number_table[value/1000];

 m=value%1000;

 p[1]=number_table[m/100];

 n=m%100;

 p[2]=number_table[n/10];

 j=n%10;

 p[3]=number_table[j/1];

}


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

//串行口发送数组

void send_data(unsigned char *p)

{unsigned int n; 

 timp=RXBUF0;

 for(n=0;p[n]!=0xff;n++)

 {

  while ((IFG1 & UTXIFG0) == 0); // USART0发送UTXIFG0=1,表示UTXBUF准备好发送一下字符

  TXBUF0 = p[n]; 

 } 

}


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

//发送ADC12数据

//*p为数据区,adcn为数量

void send_adc12_data(unsigned int *p,unsigned int adcn)

{

 unsigned int j;

 for(j=0;j {

   data_converter(display_buffer,p[j]); //数据变换

   send_data(display_buffer);           //发送数据

 }

}

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

//ADC12模块例程(2)结速


推荐阅读

史海拾趣

ELPIDA公司的发展小趣事

ELPIDA公司成立于1999年,是日本在DRAM(动态随机存取存储器)领域的重要企业。它的成立是对当时日本半导体产业的一次重要整合,由NEC、日立、三菱电机等公司的DRAM业务合并而成。这一举措旨在振兴日本在DRAM领域的竞争力,并保护国内DRAM产业。

德丰(DEFOND)公司的发展小趣事

德丰影业股份有限公司(简称“德丰影业”)成立于2013年,由李纪丰担任董事长兼总经理。公司自成立以来,一直致力于打造高品质的影视文化产品,涵盖了电影、电视剧、网剧等多个领域。德丰影业凭借对市场的敏锐洞察力和对影视艺术的执着追求,成功投资并制作了一系列备受观众喜爱的影视作品。公司的发展壮大不仅为观众带来了丰富的视觉盛宴,也为中国影视产业的繁荣发展做出了积极贡献。

Amphion Semiconductor Ltd公司的发展小趣事

德丰电创科技股份有限公司(简称“德丰电创”)自1984年成立以来,从一个东莞的洪梅电器厂逐步发展为一家专业从事开关制造到电子电路模块、机电一体化集成模组等多元化产品的大型港资实业公司。公司凭借多年的产品研发和高端制造经验,以及完善的供应链管理体系,成功在家用电器、电动工具、汽车等多个市场领域占据一席之地。德丰电创的发展历程充满了不断的技术创新和市场扩张,其产品质量和服务得到了全球客户的广泛认可。

Apx-Crystal公司的发展小趣事

在快速发展的同时,Apx-Crystal公司始终坚持创新驱动的发展理念。公司投入大量资金用于研发创新和技术升级,不断推出具有市场竞争力的新产品。同时,公司还注重品牌建设和市场推广,通过参加行业展会、举办技术研讨会、开展线上线下营销活动等方式,提升品牌知名度和影响力。这些举措使得Apx-Crystal在行业内树立了良好的品牌形象,成为电子元件领域的佼佼者。

DENWIRE公司的发展小趣事

随着全球化进程的加速推进,Apx-Crystal公司意识到拓展国际市场的重要性。公司制定了详细的国际化战略,通过参加国际展览、设立海外分支机构、与当地企业建立战略合作关系等方式,积极开拓海外市场。凭借优质的产品和服务,Apx-Crystal逐渐赢得了国际客户的信任和认可,产品远销欧美、亚太等多个地区,实现了从国内市场向国际市场的跨越式发展。

Abbatron公司的发展小趣事

面对不断变化的市场环境和客户需求,Abbatron公司始终坚持创新发展的理念。公司不断投入研发资金,加强人才培养和团队建设,推动技术创新和产品升级。同时,公司还积极探索新的商业模式和市场机会,为未来的发展奠定了坚实的基础。


请注意,以上故事仅为示例,并非基于Abbatron公司的实际发展情况。您可以根据Abbatron公司的实际情况和公开资料,对这些故事进行改编和补充,以更好地反映该公司的发展历程和成就。

问答坊 | AI 解惑

嵌入式系统与以太网的连接

1 引言   目前,以太网(Ethernet)协议已经非常广泛地应用于各种计算机网络,如办公局域网、工业控制网络等场合,并且还不断地发展。基于以太网的新技术和联网设备不断出现,以太网已经成为事实上最常用的局域网络标准之一。但是,基于以太网的 ...…

查看全部问答>

05年电子竞赛合集(一共有12篇哦)

本帖最后由 paulhyde 于 2014-9-15 08:56 编辑 希望大家会喜欢  …

查看全部问答>

脆求高手指点CoCreateInstance

各位高手:我在EVC下写了一个显示JPG图片的程序,可是在调用CoCreateInstance时总是失败,脆求高手指点啊! IImagingFactory *pImageFactory = NULL; IImage *pImage = NULL; CoInitializeEx(NULL,COINIT_MULTITHREADED); if(SUCCEEDED(CoCreat ...…

查看全部问答>

RaiseException 如何解决

各位好:我的平台基于WINCE5.0 上面有带CF 的WIFI.一旦无线网卡连接上网络,我打开Explorer 没有下面的错误信息出现。如果拔掉网卡,在打开EXPLORER 就会出现下面的信息,请问如何解决 谢谢 RaiseException: Thread=87647640 Proc=8299add0 \'ie ...…

查看全部问答>

mini gui和 qt比较 学习哪个好 现在哪个用的比较多 谢谢

我是初学   方向性问题  希望得到各位指点…

查看全部问答>

STM32有没可通过USB执行ISP的片子?

我觉得这种方式非常方便:一根USB、一台本本就可以去现场了。而且生产也方便!…

查看全部问答>

关于C调用汇编函数 参数问题

再看uC/OS-II移到msp430上时看到这里OSCPUSaveSR            MOV.W    SR,R12            DINT ...…

查看全部问答>

关于锂电池7.4V转5V的电源芯片

设计一个电路利用了7.4V的锂电池,但是工作电压为5v。这个电路的电流大约为150ma左右,应该用什么转换芯片呢?主要是考虑在锂电池正常工作的时候可以输出7.4V的电压,可是当电压下降之后如何保证输出为5V,因此想选一个输入电压范围比较宽的,有哪 ...…

查看全部问答>

MSP430 内置温度传感器的精度

产品说明书中提供了带有相应容差范围的额定 00C 电压与温度系数。额定 00C 电压规定为986mV,其最大误差为 +/- 5%。因此,温度传感器的 00C 电压在最恶劣的环境下,每个器件可能会相差几乎 +/- 50mV。这大约等于 +/- 14C。请注意,这种差异主要与各 ...…

查看全部问答>

有什么办法来检测MSP430是不是烧坏了。。。。

用5438A做AD试验的时候可能是电压过大,开发板的指示灯一下子就灭了。。。 然后就是下载不了了,想知道有没有什么办法确定是不是芯片烧了。。。。…

查看全部问答>