在线时间0 小时
UID155419
注册时间2008-3-28
NXP金币0
该用户从未签到
新手上路

- 积分
- 106
- 最后登录
- 1970-1-1
|
各位领导:
我在用DZ60做一个ADC的问题处理,在Debugger调试的时候遇到这样一个问题,在按Single Step按钮时,可以进入ADC中断服务程序,寄存器的数值也和设计的一样,但在按Start/Continue按钮时,软件就进不了ADC中断服务程序,与此同时,Data:1框中寄存器的寄存器也没有了,这是那里的原因造成的呢?请各位大侠指教一下呀!软件如下:
#include /* for EnableInterrupts macro */
#include "derivative.h" /* include peripheral declarations */
byte ad_h;//ADC转换结果的高2位
byte ad_l;//ADC转换结果的低8位
byte ch_s;//通道选择
void Init_MCG(void)
{
SOPT1 = 0x00;
MCGC1 = 0xBB; // 选择外部参考时钟作为总线的时钟源,使能内部参考时钟
MCGC2 = 0x36; //选择外部1M~16M高频晶振,总线分频率为1
MCGC3 = 0x00; // PLL=0即禁止PLL
//计算一下总线频率:晶振频率是16MHz,BDIV=1,MCGOUT频率为16MHz,总线频率为8MHz
while(!(MCGSC&0x02));
}
void Init_ADC(void)
{
ADCCFG=0x98; //低功耗模式,时钟为1分频,长采样时间,10位转换精度,ADCK=总线频率8M
ADCSC1=0x6C; //0b011 01100:中断使能,单次转换,选择AD12,并启动了转换.
ADCSC2=0x00; //0x00:软件触发,比较功能禁止
APCTL2=0x30; //通道引脚使能:ADP12,ADP13作为模拟信号输入
ch_s=0; //选择0通道
}
interrupt VectorNumber_Vadc void ADC_ISR(void)
{
switch(ch_s)
{
case 0:
ad_h=ADCRH;
ad_l=ADCRL;
ADCSC1=0x6D;//软件启动下一次转换,下一次转换将转换AD3通道的电压值
break;
case 1:
ad_h=ADCRH;
ad_l=ADCRL;
ADCSC1=0x6C;//软件启动下一次转换,下一次转换将转换AD2通道的电压值
break;
default:
break;
}
asm(nop);//在此设置一个断点,观测ad_h和ad_l的变化
if(ch_s==0)
{
ch_s=1;
}
else
{
ch_s=0;
}
}
void main(void)
{
Init_MCG();
Init_ADC();
EnableInterrupts; /* enable interrupts */
/* include your code here */
}
|
|