今天玩了玩149AD转换这一块,开始还好,烧写源程序中的例程,没问题,但是接下来我的做法就带了问题了,巨大的问题。先上程序:
//中断方式 AD转换 12864显示
//问题:掉电重启时,小部分显示乱码 未解决
//
#include <msp430x14x.h>
#include "Config.h"
#include "LCD_Initial.h"
#include "ADC.c"
#include "adc.h"
void main( void )
{
// Stop watchdog timer to prevent time out reset
WDT_Init();
Clock_Init();
Port_Init12864();
ADC12_Sampling_SingleChannelSequenceConvert();
delay_ms(100); //延时100ms
delay_ms(100); //延时100ms
LCD_clear(); //清屏
delay_ms(100); //延时100ms
LCD_init12864();
delay_ms(100); //延时100ms
_EINT();
Flag=1; //标志位先置1
while(1)
{
while(Flag==1)
{
ADC12CTL0 |= ADC12SC; //开启转换
ADC12CTL0 &= ~ADC12SC; //清零
Flag=0;
}
};
}
//*************************************************************************
// ADC中断服务程序
//*************************************************************************
#pragma vector = ADC_VECTOR
__interrupt void ADC12_IRQ(void)
{
uchar j;
//while((ADC12CTL1&0x01)==1); //如果ADC忙,则等待,否则读取ADC转换数值
Flag = 1 ;
TEMP = ADC12MEM4; //读取ADC转换值
Data_do(TEMP); //处理ADC值,用于显示,数字量
Voltage_do(TEMP); //处理ADC值,用于显示,模拟电压值
for(j=0;j<30;j++)
{
LCD_write_str(0x03,3,Temp_Value); //显示ADC的电压值
}
}
问题:while((ADC12CTL1&0x01)==1); //如果ADC忙,则等待,否则读取ADC转换数值
这一行注释掉的话,得到的结果图一
如果不注释的话,结果如图二:经过调试,了解到程序是停在了这一句,也就是一直停在了忙等待这,也有在主程序中将忙检测为置零,但是没用;注掉了这一句,显示正常。怎么破???
还有,AD转换反应有点慢,调整那些参数啊啊啊啊啊啊啊啊啊!
此帖出自
小平头技术问答
一周热门 更多>