本帖最后由 nbj846589308 于 2013-6-20 08:28 编辑
本人avr菜鸟,在用atmega128 产生一系列占空比可调的方波,想实现这样的功能:外部中断0接按钮,按钮按下后能够产生中断程序中设置的占空比的方波,使用定时器3快速pwm。ORC3A为top值,ORC3B和ORC3C为匹配值。 程序如下,问题,按下int0的时候,方波的占空比并不改变,请教各位前辈,这是哪里有问题呢? 编译器是iccavr7
#include "iom128v.h"
#include "macros.h"
//#include "cfg.h"
#pragma interrupt_handler Int0_isr:2
void Int0_isr(void)
{
//delay_nms(20);
TCNT3H=0x00;
TCNT3L=0x00;
OCR3BH=0x00;
OCR3BL=0x96;
OCR3CH=0x00;
OCR3CL=0x96;
}
void main(void)
{
DDRE=0xFF; //PB口配置为输出
PORTE=0xFF; //PB口初始值为"1"
DDRD=0x70;//设置PD0为输入
PORTD=0xff;//设置PD0内部上拉电阻有效
EICRA=0x02;//设置外部中断0为下降沿有效
EIMSK=0x11;
SREG|=0x80;
MCUCSR=0x00;
OCR3AH=0x00;
OCR3AL=0xc7;
OCR3BH=0x00;
OCR3BL=0x64;
OCR3CH=0x00;
OCR3CL=0x64;
TCCR3A=0x3b; //配置定时器工作在快速PWM模式
TCCR3B=0x19; //设置为无预分频,设置定时器3的B通道发出信号,C通道发出相反的信号
TCCR3C=0x00;
while(1);
}
|