原创 AVR学习笔记之PWM

2011-2-23 18:39 1772 11 11 分类: MCU/ 嵌入式

说明:T0的相位修正PWM模式,采取1024分频,比较匹配时OC0置位,计数到TOP时清零,这个模式有两个中断,一个是比较匹配的中断(产生后不将TCNT0的值清零),继续继续加到255(T0的MAX),产生一个溢出中断(TCNT0自动清零)。此例将两个中断使能全部打开,并且中断发生后执行相应的中断服务程序。

#include <iom128v.h>
#include<macros.h>

#define uint unsigned int
#define uchar unsigned char

uchar num=0;

void port_init(void)
{
 PORTE |= BIT(PE2);  //打开LED灯的锁存器使能
 DDRE |= BIT(PE2);
 DDRA = 0XFF;        //A口全部输出
}

void pwm0_init(void)
{
 DDRB |= BIT(PB4); //将OC0(PB4)设置为输出
 TCCR0 = 0X00;
 OCR0 = 0X7F;     //8位的定时计数比较器的初值设定为0x7f
 TCNT0 = 0;       //计数器
 TCCR0 = 0X77;   //设置为相位修正PWM模式,采取1024分频,比较匹配时OC0置位,计数到TOP时清零
}
void main(void)
{
 CLI();           //禁止所有中断
 
 pwm0_init();
 port_init();
 
 TIMSK = 0X03;    //T0的比较溢出中断和溢出使能
 
 SEI();           //开启所中断使能
 
 while(1);        //等待比较中断
}

#pragma interrupt_handler timer0_comp_isr:16
void timer0_comp_isr(void)
{
 PORTA = num++;
}

#pragma interrupt_handler timer0_vof_isr:17
void timer0_vof_isr(void)
{
 PORTA = num++;
}

疑问:为什么我将溢出的中断服务程序屏蔽后没有灯和PB4口都没有反应了?但是我将比较匹配的中断服务程序屏蔽后依然可以看靠一样的结果?

编译环境:ICCAVR


PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
11
关闭 站长推荐上一条 /3 下一条