本帖最后由 hm_315 于 2014-8-29 12:03 编辑
如题,由于设计需要,在外部中断3的中断服务程序中,我会将定时器1的技术器TCNT1清零,实现简单的锁相功能。
定时器1初始化:
上升沿匹配置位,下降沿匹配清零;
选择为相位和频率修正模式,TOP值由ICR指定;
但是定时器1的所有中断都没有使能!
void PWM_Init(void)
{
//端口输出在上升匹配时置位,在下降匹配时清零
//同时配合TCCR1B选择工作方式为相频修正PWM,TOP值由ICR1指定。
//OCR1A/B/C值在BOTTOM时更新,TOV溢出在BOTTOM处
TCCR1A=0xFC; //1111 1100
//无预分频,配合TCCR1B选择工作方式为相频修正PWM。
TCCR1B=0x11; //0001 0001
TCCR1C=0x00;
TCNT1=0x0000;
TIMSK=0x00;
ETIMSK=0x00;
ICR1=1000;
}
外部中断3的中断服务函数(上升沿):
ISR(SIG_INTERRUPT3)
{
uchar sreg; //保存全局中断寄存器
sreg=SREG;
TCNT1=0x0000;
SREG=sreg; //还原全局中断寄存器
}
但是这时就出现了问题,只要外部中断工作,将TCNT1清零,定时器T1的输出引脚上(OC1A/OC1B/OC1C)上就会出现波形(T1所有中断都没有使能,连中断函数都没有写!),波形的时间也为时间中断时间,这里是125us。。。。
很奇怪啊,大家有没有遇到这样的问题呢?求解啊
|