初级会员
- 积分
- 86
- 金钱
- 86
- 注册时间
- 2019-5-10
- 在线时间
- 31 小时
|
3金钱
原因如题,现在的问题是如果使用ADC_Process()这个函数,程序就死机,如果直接写在while中就没有问题。并且这个程序也不能写Uart0_ISR(void) interrupt 4,Adc0等中断服务函数,一写也会死机,求助各位大神!!下面是部分代码:
void main()
{
PCA0MD&=~0x40; //看门狗禁止
SysTick_Init(); //时钟初始化
Port_Init(); //端口初始化
UART0_Init(); //串口初始化
ADC_Init(); //ADC初始化
AD0INT = 0; //中断标志位清0
ADC_Proc(ADC_CCONV); //连续转换
EA=1; //总中断
de=1; //TX使能,RX禁止
ES0=1;
while(1)
{
ADC_Process();
Delay_ms(500);
}
}
在adc.c中写的:
void ADC_Process()
{
unsigned long mV=0;
static LONGDATA rawValue;
unsigned char chnl=0;
while(!AD0INT);
AD0INT = 0; //转换标志清0
EIE1 |= 0x00;
//记录ADC0输出
rawValue.Byte[Byte3] = 0x00;
rawValue.Byte[Byte2] = (unsigned char)ADC0H; //高字节
rawValue.Byte[Byte1] = (unsigned char)ADC0M; //中字节
rawValue.Byte[Byte0] = (unsigned char)ADC0L; //低字节
mV = rawValue.result/_AVREF; //计算结果
printf("Channel %bd Voltage is: %6ld mV\r\n",chnl+1,mV);
if(chnl<7)
chnl++; //切换通道
else
chnl=0;
ADC0MUX = 0x08 + (chnl<<4); //通道使能
ADC_Proc(ADC_CCONV); //连续转换模式
EIE1 |= 0x08;
}
|
|