采用atmega16单片机,按照书上的例子把寄存器开了,但是示波器观察不到两路,只有一路
#include<iom16v.h>
#include<macros.h>
#define uchar unsigned char
#define uint unsigned int
uint num;
//*******延时函数*******//
void delay(uint MS) //约为1MS的延时函数
{
uint i,j;
for(i=0;i<MS;i++)
for(j=0;j<1141;j++); //1141是在8MHz晶振下为MS毫秒
}
//******PWM初始化******//
void KPWM(unsigned char fcq,unsigned char rat)
{
uint f,r;
DDRD|=0X30; //设置PD4 PD5为第二功能脚 分别为OC1B OC1A
TCCR1A=0XA3; //两路PWM,匹配清零
TCCR1B=0X19; //在这决定了1分频 快速PWM模式
f=16000/fcq; //计算最大值和比较值
f=f/1;
f=f-1;
r=f;
r=r/10;
r=r*rat;
r=r/10;
OCR1A=f; //频率值
OCR1B=r; //占空比值
}
//*********主函数*********//
void main()
{
while(1)
{
KPWM(250,32);
}
}
|