当前位置:首页 > 单片机 > 单片机
[导读]******************************************** *TC1的双路PWM输出实验 * * 实验内容:由TC1产生两路独立的PWM输出* * 芯 片:M16* * 工作频率:内部1M* * 编 译 器:ICCAVR 6.31A* * 输 出:PD4输出PWMB,PD5

********************************************
*TC1的双路PWM输出实验 *
* 实验内容:由TC1产生两路独立的PWM输出*
* 芯 片:M16*
* 工作频率:内部1M*
* 编 译 器:ICCAVR 6.31A*
* 输 出:PD4输出PWMB,PD5输出PWMA*
* 产生的PWM频率为1M/1024约1KHZ*
********************************************/
#include
#include

//延时函数:入口time 需延时的MS数
void delay_ms(unsigned int time)
{
unsigned char c;
for(;time;time--)
{
for(c=220;c;c--)
{
;
}
}
}

//端口初始化
void port_init(void)
{
PORTA = 0xFF;
DDRA = 0x00;
PORTB = 0xFF;
DDRB = 0xFF;
PORTC = 0x00;
DDRC = 0x00;
PORTD = 0x00;
DDRD = 0x30;
}

//TC1初始化
void timer1_init(void)
{
TCCR1A = 0xA3;//两路PWM,匹配清零
TCCR1B = 0x09; //快速PWM模式,10位,预分频1
}

//器件初始化
void init_devices(void)
{
port_init();//端口初始化
timer1_init();//TC1初始化

MCUCR = 0x00;
GICR = 0x00;
}

//主函数
void main(void)
{
unsigned int a=511,b=511;
init_devices(); //器件初始化

OCR1A=a;//匹配初值
OCR1B=b;

while(1)
{
a-=5;//两个值向不同方向变化
b+=5;//PWMA宽度减小,PWMB宽度增加
if(a<=5)//上下限
{
a=1000;
b=5;
}
OCR1A=a;
OCR1B=b;
delay_ms(50);
}
}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭