在做MSP430F149系统板(PCB做板),在测试时,首先不焊接外部高速晶振XT2与低速晶振,并下载程序,发现149并没有起振工作,然后再把高速(8M)与低速晶振(32768)焊接149才正常运行程序。
149内部不是有DCO时钟模块吗,在没有启动外部晶振作为主系统时钟时,149不是自动设置内部DCO并作为主系统时钟的吗
This thread has been locked.
If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.
在做MSP430F149系统板(PCB做板),在测试时,首先不焊接外部高速晶振XT2与低速晶振,并下载程序,发现149并没有起振工作,然后再把高速(8M)与低速晶振(32768)焊接149才正常运行程序。
149内部不是有DCO时钟模块吗,在没有启动外部晶振作为主系统时钟时,149不是自动设置内部DCO并作为主系统时钟的吗
这是源码,
/*********************************************************
程序功能:MCU的片内ADC对P6.0端口的电压进行转换
*********************************************************/
#include <msp430x14x.h>
#include "Uart.h"
//typedef unsigned char uchar;
//typedef unsigned int uint;
#define Num_of_Results 16
static uint results[Num_of_Results]; //保存ADC转换结果的数组 // is not used for anything.
void Trans_val(uint Hex_Val);
/************************主函数****************************/
void main(void)
{
WDTCTL = WDTPW+WDTHOLD; //关闭看门狗
/*下面六行程序关闭所有的IO口*/
P1DIR = 0XFF;P1OUT = 0XFF;
P2DIR = 0XFF;P2OUT = 0XFF;
P3DIR = 0XFF;P3OUT = 0XFF;
P4DIR = 0XFF;P4OUT = 0XFF;
P5DIR = 0XFF;P5OUT = 0XFF;
P6DIR = 0XFF;P6OUT = 0XFF;
P6DIR |= BIT2;P6OUT |= BIT2; //关闭电平转换
P6SEL |= 0x01; // 使能ADC通道
P3SEL |= 0x30; // P3.4,5选择为UART收发端口
ADC12CTL0 = ADC12ON+SHT0_8+MSC; // 打开ADC,设置采样时间
ADC12CTL1 = SHP+CONSEQ_2; // 使用采样定时器
ADC12IE = 0x01; // 使能ADC中断
ADC12CTL0 |= ENC; // 使能转换
ADC12CTL0 |= ADC12SC; // 开始转换
_EINT(); //全局中断
LPM0;
}
/*******************************************
函数名称:ADC12ISR
功 能:ADC中断服务函数,在这里用16次平均的
计算P6.0口的模拟电压数值
参 数:无
返回值 :无
********************************************/
#pragma vector=ADC_VECTOR
__interrupt void ADC12ISR (void)
{
static uint index = 0;
results[index++] = ADC12MEM0; // Move results
if(index == Num_of_Results )
{
uchar i;
unsigned long sum = 0;
index = 0;
for(i = 0; i < Num_of_Results; i++)
{
sum += results[i];
}
sum = sum >> 4; //除以16求平均
Trans_val(sum);
}
}
/*******************************************
函数名称:Trans_val
功 能:将16进制ADC转换数据变换成三位10进制
真实的模拟电压数据
参 数:Hex_Val--16进制数据
n--变换时的分母等于2的n次方
返回值 :无
********************************************/
void Trans_val(uint Hex_Val)
{
unsigned long caltmp;
uint Curr_Volt;
uchar t1;
uchar n = 4;
uchar str[4];
caltmp = Hex_Val;
caltmp = (caltmp << 5) + Hex_Val; //caltmp = Hex_Val * 33
caltmp = (caltmp << 3) + (caltmp << 1); //caltmp = caltmp * 10
Curr_Volt = caltmp >> 12; //Curr_Volt = caltmp / 2^n
str[0] = Curr_Volt / 100; //Hex->Dec变换
t1 = Curr_Volt - (str[0] * 100);
str[2] = t1 / 10;
str[3] = t1 - (str[2] * 10);
str[1] = 0x2e; //对应符号"."
dis(str,n);
}