我用的是模拟I2C连接msp430f149和ADS1115,然后采集电压显示在12864上,但是我这里出现一个奇怪的现象,就是程序再运行一段时间之后,单片机会自动停止,12864上面显示的电压值不再变化了,然后需要人工复位或者重新上电才能恢复运行。我开始怀疑是程序的问题,调试了好半天。然后我自己试着写了一个闪烁灯在while里面作为mcu运行的标志,发现LED会卡住,所以判断是单片机停止了,不知道该怎么解决,下面贴出主函数,希望能得到高人指点。
#include <msp430x14x.h>
#include "ADS1115.h"
#include "HB12864.h"
#include <stdio.h>
#define uchar unsigned char
#define uint unsigned int
void Delays(void);
void PutString(uchar *ptr);
uchar dianya[7];
/********************主函数**********************/
void main(void)
{
uchar i;
float temp;
int num;
WDTCTL = WDTPW + WDTHOLD; // 关狗
BCSCTL1 &= ~XT2OFF; //打开XT2高频晶体振荡器
do
{
IFG1 &= ~OFIFG; //清除晶振失败标志
for (i = 0xFF; i > 0; i--); //等待8MHz晶体起振
}
while ((IFG1 & OFIFG)); //晶振失效标志仍然存在?
BCSCTL2 |= SELM_2 + SELS; //MCLK和SMCLK选择高频晶振*/
P2DIR=BIT2+BIT3;
P2OUT|=BIT2|BIT3;
Pin_Init(); //LCD引脚初始化
Lighton(); //打开LCD背光灯
clearscreen(); //LCD清屏
while(1)
{
temp=ADS1115(); //取得1115采样值
sprintf(dianya,"%g",temp);
display(dianya,1,0); //显示
Delays();Delays();
P2OUT^=(BIT2+BIT3);
}
}
/******************************************* 函数名称:Delays 功 能:延时一会 参 数:无 返回值 :无 ********************************************/
void Delays(void)
{
uchar i=20;
uint j;
while(i--)
{
j=2000;
while(j--);
}
}