赵老师您好,我把您的程序添加到我的程序中去了,下面是主要代码:
1、Main函数
int Main(void)
{
U32 a;
U16 b;
pISR_TIMER4=(unsigned int)TIME4; //挂载中断
InitAllClock();
Uart_Init(0,115920);
MMU_Init();
Eint_Init(); //初始化中断
Enable_Eint(); //开中断
preScaler = PCLK/ADC_FREQ -1;
PWM_Init();
Uart_Printf("/nKey Scan Test, press ESC key to exit !/n");
rGPBCON=(rGPBCON & ~((3<<10)|(3<<12)|(3<<14)| (3<<16)))|(1<<10)|(1<<12)|(1<<14)|(1<<16);
//GBP[5~8] 是控制 led 的io口
rGPBUP=0;
while(1) //等待中断,死循环
{
a=0;b=0;
while(caiji)
{
a+= ReadAdc(0)*ReadAdc(0);
b++;
Delay(10);
Uart_Printf("adc=%d/n",a);
}
a=a/b;
rGPBDAT=liushui;
Delay(20);
liushui=(~liushui)&0xffe;
}
}
2、PWM初始化
void PWM_Init(void)
{
rTCFG1|=2<<16; //time4 分频为1/8
rTCFG0|=126<<8; //time4 预设值为127 time1的 时钟为50.7M/8/127=49901 每记一次数需要20us左右
rTCNTB4=4990; //设置0.1s的定时
rTCON &= ~0xF00000;
rTCON |= 0x700000;
rTCON &= ~0x200000 ; //定时器4开工作
}
3、定时器中断
static void __irq TIME1(void)
{
jishu++; //定时器4开始工作
ClearPending(BIT_TIMER4);
if(jishu==1)
{
caiji=0;
}
else if(jishu==10)
{
caiji=1;
jishu=0;
}
}
caiji是一个全局变量,初始值为一
现在的问题是 PWM初始化函数不加rTCON &= ~0x200000 ; 则程序一直在while(caiji)
{
a+= ReadAdc(0)*ReadAdc(0);
b++;
Delay(10);
Uart_Printf("adc=%d/n",a);
}
运行,led不亮,而加了rTCON &= ~0x200000之后呢,led也不亮,但程序却也不在while(caiji)中运行了,所以我推断应该在中断那里出不来。