微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 电设工作小结之——MSP430G2553学习笔记——2

电设工作小结之——MSP430G2553学习笔记——2

时间:11-28 来源:互联网 点击:

wr_int(0,1,adc_sample[2]);//A1

wr_int(3,1,adc_sample[3]);//A0

wr_int(6,1,adc_sample[4]);

wr_int(0,2,adc_sample[5]);

wr_int(3,2,adc_sample[6]);

wr_int(6,2,adc_sample[7]);

}

}

// ADC10 interrupt service routine

#pragma vector=ADC10_VECTOR

__interrupt void ADC10_ISR(void)//中断响应以后,中断标志位自动清零

{

__bic_SR_register_on_exit(CPUOFF);// Clear CPUOFF bit from 0(SR)

}

上面的例子是把存储结果存储在了uint型的数组中。也可以用指针直接指定要存放的地址,然后再用指针进行访问(理论上可以,但还没有试过)。也可以把存储结果直接存放在一个16位的寄存器中,如:

ADC10SA = (unsigned int)&TACCR1;// Data transfer location把转换结果存储在TACCR1所在的

//位置处,就相当于存储在TACCR1中 因为ADC转换结果和寄存器TACCR1都是16位的,所以要把地址强制转换为16位的

//int 或 unsigned int型

5,ADC采样注意事项:用片上的ADC10进行采样,如果外部分压电路的电阻过大(比如几K以上),AD引脚会把电压拉高,使采样结果发生很大的偏差。应换成小电阻(几十~几百欧),如果要求更精确的话,要加运放进行电压跟随。

6,AD采样交流信号:

一般是50Hz,100Hz,1000Hz。方法是在交流信号的一个周期内采样多次(如40次,30次等),然后利用公式可以求出交流信号的有效值,平均值等。

7,片上温度传感器

ADC的A10通道接片上的温度传感器,MSP430内嵌的温度传感器实际上就是一个输出电压随环境温度而变化的温度二极管。

当使用片上温度传感器时,采样周期必须大于30us片上温度传感器的偏移很大,所以精确测量需要

进行校准。选择片上温度传感器INCH_10,ADC其他的设置都和外部通道的设置相同,包括参考电压源的选择和转换存储的选择

选择了片上温度传感器,会自动地打开片上参考电压源发生器作为温度传感器的电压源,但是这并不会时能VREF+输出,也不会

影响AD转换参考源的选择,转换参考源的选择和其他通道的选择相同

公式为:VTEMP=0.00355(TEMPC)+0.986

片上温度传感器的校准,可以参见我的温度传感器校准程序,也可以参考其他的论文。下面只给出程序的一部分:

void ADC_init()

{

ADC10CTL0 = ADC10SHT_2 + ADC10ON + ADC10IE; // ADC10ON, interrupt enabled 参考电压选默认值VCC和VSS

//采样保持时间为16 x ADC10CLKs,ADC开,中断使能

ADC10CTL1 = INCH_10;// ADC输入通道选择A10,为内部的温度传感器

//其他是默认,采样触发输入源选择为ADC10SC,采样输入信号不翻转,转换时钟选择内部时钟源:ADC10OSC,3.7~6.3MHz

//不分频,单通道单次转换

//ADC10AE0 |= 0x02;// PA.1 ADC option select 使能模拟输入脚A1

//P1DIR |= 0x01;// Set P1.0 to output direction

//所以是P11为ADC输入脚,P10控制led

}

(五),通用串行通信接口(USCI)

1,USCI_A:支持UART,IrDA,SPI

USCI_B:支持I2C, SPI

2,UART这个模块没什么好说的,和其他的一写处理器如S12,ARM等差不多。只要设置好几个控制寄存器,波特率,写几个收发函数就可以了。下面就给出msp430g2553于PC用UART通信的基本程序:

#include"msp430g2553.h"

unsigned char rev;

char *string1="Helloworld!";

char string2[]="Get it!";//是换行符

void putchar(unsigned char c)//发送字符函数

{

while (!(IFG2&UCA0TXIFG));// USCI_A0 TX buffer ready? 等待TX buffer为空

UCA0TXBUF = c;// TX -> RXed character发送字符c

}

void putstr(char *s)//发送字符串函数

{

IE2 &= ~UCA0RXIE;//发送时先关闭接收中断,不接收

while((*s)!=)//如果没有发完,就继续循环发送

{

putchar(*s);

// putchar();//发送换行符

s++;

}

IE2 |= UCA0RXIE;//发送完了打开接收中断

}

void main(void)

{

WDTCTL = WDTPW + WDTHOLD;// Stop WDT

P1DIR=BIT0;

BCSCTL1 = CALBC1_1MHZ;// Set DCO 为1MHz

DCOCTL = CALDCO_1MHZ;

P1SEL = BIT1 + BIT2 ;// P1.1 = RXD, P1.2=TXD

P1SEL2 = BIT1 + BIT2;//第二外围模式选择

//UCA0CTL1 |= UCSSEL_2;// SMCLK 其他默认:软件复位使能 USCI逻辑保持在复位状态,用于设置串口

//UCA0CTL0全部为默认状态:无奇偶校验,LSB first,8bit_data,一位停止位,UART模式,异步模式

//UCA0BR0 = 8;// SMCLK 1MHz 1152008

//UCA0BR1 = 0;// 1MHz 115200

//UCA0MCTL = UCBRS2 + UCBRS0;// Modulation UCBRSx = 5

//下面是选择ACLK,波特率设置为固定的

UCA0CTL1 |= UCSSEL_1;//ACLK

UCA0BR0 = 3;// ACLK 32768Hz 960032768Hz/9600 = 3.41

UCA0BR1 = 0;// 32768Hz 9600

UCA0MCTL = UCBRS1 + UCBRS0;// Modulation UCBRSx = 3

上一篇:ISP和JTAG
下一篇:STM32的ADC产生随机数

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top