|
【AVR】我都快疯了,哪位大侠帮帮忙关于定时器T0和T1配合产生间隔的38k方波!
[复制链接]
小弟用TO做方波产生38k的红外线方波,用T1做延时,这样产生一段一段的方波,再用一体化接头接受,发现无论什么情况下,即T0中的OCR0无论设置什么值,一体化接头都能接受到。我把T1去掉,产生连续的T0方波,发现就正常了,为什么啊?哪为高手解释一下
void main(void)//主函数
{
flag=0; //开始没有方波产生
DDRA&=~BIT(5); //设置PA5为输入口,红外线接受端口用一体化接头
DDRB=0B00001010; //定义B口的PB1、PB3为输出口。其中PB3为红外发射端口
PORTB=0B10000011; //PB1口输出高电平,PB1绿灯灭,无红外发射
TCCR1B=0B00000 //1/1分频;
TCNT1=0;
TIMSK=0B00000100; //溢出中断使能
SEI(); //开中断
while(1)
{
if ((PINA&0B00100000)==0) //检测PA5是否为低电平如果低电平说明接受到红外信号
{
PORTB&=~BIT(1); //PA5是为低电平PB1灯亮
}
else
{
PORTB|=BIT(1);
}
}
}
#pragma interrupt_handler DELAY: iv_TIMER1_OVF
void DELAY(void) //产生延时 //指定中断服务程序的入口//
{
if(flag==0)
{
TCNT1L=0x00; //重载
TCNT1H=0x00;
pwm_init(); //开始产生38k方波
flag=1;
}
else
{
TCNT1L=0x00; //重载
TCNT1H=0x00;
TCCR0=0B00000000; //停止产生38k方波
flag=0;
}
}
void pwm_init(void)
{
TCCR0=0B00011001;
TCNT0=0;
//OCR0=100;
OCR0=12; //就是这里无论什么值我的指示灯PB1都是一闪一闪的。没道理啊!?
}
|
|