我先试着输出一路,这是我的程序,ADS1.2上面的,
#define PWM0 0X01 //GPIO口0输出PWM0
#define KEY1 0x01<<16 //PWM0控制口GPIO16
void Time0_Init() // 定时器0匹配时复位并产生中断
{T0TC = 0; // 定时器设置为0
T0PR = 24; // 定时器0时钟分频设置,25分频
T0MCR=0X03; // 设置T0MR0匹配后复位T0TC,并产生中断标志
T0MR0=Fpclk/2; // 20mS定时
T0TCR=0X01; //启动定时器
}
void DelayMS(uint32 dly);
int main(void)
{ PINSEL0=0X00000000; // 设置引脚连接GPIO
IO0DIR =PWM0; // 设置 GPIO0输出PWM0
Time0_Init(); // 启动定 时器0
while(1)
{
while(T0IR&0x01==0); // 等待定时时间到
IO0SET =0X01; //GPIO0口置位
DelayMS(1);
IO0CLR =0X01; //GPIO0口为低电平
}
return(0);
}
void DelayMS(uint32 dly)
{ for(; dly>0; dly--)
{ unsigned char a,b;
for(b=251;b>0;b--)
for(a=4;a>0;a--);
}
}
这个程序我是想输出从0口输出个周期20ms正脉冲1ms的PWM波,结果示波器上显示输出的是几百赫兹基本上全是正脉冲的波形,后来我把中间的Delay(1)去掉之后输出成了600多KHZ 正脉冲只有几百纳秒的PWM波,我想来想去觉得应该是 while(T0IR&0x01==0)这句没有等到定时器20ms到就跳过了,不知道为什么,定时器的程序都是周立功书上直接搬过来的。不知道有没有大神能帮忙看下是怎么回事啊。
#define PWM0 0X01 //GPIO口0输出PWM0
#define KEY1 0x01<<16 //PWM0控制口GPIO16
void Time0_Init() // 定时器0匹配时复位并产生中断
{T0TC = 0; // 定时器设置为0
T0PR = 24; // 定时器0时钟分频设置,25分频
T0MCR=0X03; // 设置T0MR0匹配后复位T0TC,并产生中断标志
T0MR0=Fpclk/2; // 20mS定时
T0TCR=0X01; //启动定时器
}
void DelayMS(uint32 dly);
int main(void)
{ PINSEL0=0X00000000; // 设置引脚连接GPIO
IO0DIR =PWM0; // 设置 GPIO0输出PWM0
Time0_Init(); // 启动定 时器0
while(1)
{
while(T0IR&0x01==0); // 等待定时时间到
IO0SET =0X01; //GPIO0口置位
DelayMS(1);
IO0CLR =0X01; //GPIO0口为低电平
}
return(0);
}
void DelayMS(uint32 dly)
{ for(; dly>0; dly--)
{ unsigned char a,b;
for(b=251;b>0;b--)
for(a=4;a>0;a--);
}
}
这个程序我是想输出从0口输出个周期20ms正脉冲1ms的PWM波,结果示波器上显示输出的是几百赫兹基本上全是正脉冲的波形,后来我把中间的Delay(1)去掉之后输出成了600多KHZ 正脉冲只有几百纳秒的PWM波,我想来想去觉得应该是 while(T0IR&0x01==0)这句没有等到定时器20ms到就跳过了,不知道为什么,定时器的程序都是周立功书上直接搬过来的。不知道有没有大神能帮忙看下是怎么回事啊。
