找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5979|回复: 1
收起左侧

AVR单片机快速PWM定时器0发生模式 TIME0_快速PWM程序

[复制链接]
ID:26188 发表于 2015-6-23 15:10 | 显示全部楼层 |阅读模式
/*AVR快速PWM定时器0发生模式*/
/*PWM波的产生机理是定时器0的TCNT0不断地计数,当TCNT0=OCR0时在OC0引脚上出现低电平,当定时器0=TOP最大值时,*/
/*OC0引脚将会被拉高,同时产生溢出中断,可以再终端服务中修改OCR0的值,以改变占空比,比用引脚模拟要准确*/
/*另外值得说的是快速PWM很适合用在高速的场合,比如开关电源,和DA转换,整流等*/
/* 快速PWM实验    20110416  天津第四项目部宿舍      王均伟   */
#include <iom16v.h>
#define uchar unsigned char
#define uint unsigned int
#define set_bit(a,b)  a|=(1<<b)
#define clr_bit(a,b)  a&=~(1<<b)
#define get_bit(a,b)   a&(1<<b)
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=0x6D; //工作在快速PWM模式,当OCR0=TCNT0时,OC0脚拉低,此时计时器继续计数,当溢出时OC0拉高,并产生中断,可以在中断里设置下一次的低电平时间,OCR0越小低电平时间越长    OC0引脚(就是4脚),时钟1024分频,开启定时器
   
   TIMSK=0x01;//开启定时器溢出中断
   
}
void main()
{
DDRC=0xff;
PORTC=0x00;
DDRB|=(1<<3);
PORTB|=(1<<3);
int_time0fistpwm();
while(1);


}

回复

使用道具 举报

ID:154686 发表于 2018-9-27 13:03 | 显示全部楼层
点赞!好评
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表