×
单片机 > 单片机程序设计 > 详情

AVR单片机相位修正PWM定时器0发生模式试验程序

发布时间:2020-06-04 发布时间:
|

/*AVR相位修正PWM定时器0发生模式*/

/*PWM波的产生机理是定时器0的TCNT0由0到255,在由255到0,不断地计数,当在0-255计数时TCNT0=OCR0时在OC0引脚上出现低电平,*/

/*当在255-0计数时TCNT0=OCR0时在OC0引脚上出现高电平,当由0加到255,再由255减到0时,产生溢出中断,可以再终端服务中修改OCR0的值,以改变占空比,比用引脚模拟要准确*/

/*另外值得说的是相位修正PWM很适合用在电机控制的场合,他比快速PWM慢,因此它的最大频率要比快速PWM低的多*/

/* 相位修正PWM实验    20110416  天津第四项目部宿舍      王均伟   */

#include

#define uchar unsigned char

#define uint unsigned int

#define set_bit(a,b)  a|=(1<

#define clr_bit(a,b)  a&=~(1<

#define get_bit(a,b)   a&(1<

uchar i;

#pragma interrupt_handler time0fistpwm_isr:10

void time0fistpwm_isr()//定时计数器0溢出中断

{

    if(OCR0==255)

    {OCR0=0;}//加这个语句是为了在OC0引脚上表现出电压越来越高,灯越来越亮的效果,

OCR0++;      //OCR0越小则OC0引脚电压越低越,换句话说低电平时间越长。


}

void int_time0fistpwm()//定时器0用在相位修正PWM设置初始化

{

     SREG=0x80;//开启全局中断

    TCNT0=0;//

OCR0=0;;//

   TCCR0=0x65; //工作在相位修正PWM模式,当TCNT0由0-TOP时,OCR0=TCNT0时,OC0脚拉低,当TCNT0由TOP-0时,OCR0=TCNT0时,OC0脚拉高,此时计时器继续计数,当TCNTO=0时溢出时,并产生中断,可以在中断里设置下一次的低电平时间,OCR0越小低电平时间越长    OC0引脚(就是4脚),时钟1024分频,开启定时器

   

   TIMSK=0x01;//开启定时器溢出中断

   

}

void main()

{

DDRC=0xff;

PORTC=0x00;

DDRB|=(1<<3);

PORTB|=(1<<3);

int_time0fistpwm();

while(1);



}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
AVR熔丝位操作时的要点和需要注意的相关事项