用atmega16单片机产生PWM波,用的是定时器1,16位的定时器,要产生10K的PWM波,用相位修正模式,根据公式fclk/(2*N*TOP)即为产生的频率,晶振为16M,分频数位1,那么TOP为800即可产生10K的PWM波,但是用示波器观察只有70HZ,请问是什么原因。程序:
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
//*******PWM设置输出********//
void KPWM(void)
{
PORTD|=BIT(4)|BIT(5);
DDRD|=BIT(4)|BIT(5);
TCCR1A = 0xA2; //两路PWM,匹配清零
TCCR1B = 0x12; //相位修正PWM模式,位数可调,预分频1
ICR1 = 800; //此数为16位PWM,16M晶振,clk/(2*N*TOP),频率为10K
OCR1A = 720; //占空比90%
OCR1B = 80; //占空比10%
}
void main()
{
KPWM();
} |