相关寄存器介绍:TCCR0:定时器0的控制寄存器。第3,6位用来选择工作模式,第4,5位来配置端口是否输出PWM,第0,1,2位用来配置分频系数。
tiMSK:中断屏蔽寄存器(对于定时器0:0位溢出中断,1位比较匹配输出中断)。 TIFR:中断标志位
OCR0:比较匹配寄存器。当计数器TCNT0与OCR0相等时则产生匹配—使能中断,则会产生中断。
说明:快速PWM模式,是可以改变占空比的。而CTC模式只能输出50%占空比的PWM。
当TCNT0与OCR0相等时,比较匹配OC0则取反清0或置1.当TCNT0的值继续递增与0xff相等时,又会在OC0脚产生取反清0或置1.可以通过改变OCR0的值来改变输出占空比。
#include
#include
typedef unsigned int uint;
typedef unsigned char uchar;
void PWM_init(void)
{
TCCR0|=(1<<6);
TCCR0|=(1<<3);//设置快速PWM模式
TCCR0&=~(1<<4);
TCCR0|=(1<<5);//比较匹配时OC0清0,TOP时置位
TCCR0&=~(1<<0);
TCCR0&=~(1<<1);
TCCR0|=(1<<2);//设置预分频256
DDRB=0xff;
PORTB=0xff;
OCR0=0x10;//设置比较匹配值
TIMSK|=(1<<1);//允许比较匹配中断
SREG|=(1<<7);//使能全局中断
}
void main(void)
{
PWM_init();
}
#pragma interrupt_handler timer_isr:20
void timer_isr(void)
{
;
}