adongliu 发表于 2007-9-9 18:02:52

请教一个捕获的问题

最近玩玩RF ID卡的读卡器,想使用捕获来解码曼切斯特_码,但是看了n遍ATtiny2313的手册,觉得还是不明白捕获的具体实现,在CVAVR的工程建立向导中看见有设置定时器1初始的代码如下

// Timer/Counter 1 initialization
// Clock source: System Clock
// Clock value: 1000.000 kHz
// Mode: Normal top=FFFFh
// OC1A output: Discon.
// OC1B output: Discon.
// Noise Canceler: Off
// Input Capture on Rising Edge
// Timer 1 Overflow Interrupt: On
// Input Capture Interrupt: On
// Compare A Match Interrupt: Off
// Compare B Match Interrupt: Off
TCCR1A=0x00;
TCCR1B=0x42;
TCNT1H=0x00;
TCNT1L=0x00;
ICR1H=0x00;
ICR1L=0x00;
OCR1AH=0x00;
OCR1AL=0x00;
OCR1BH=0x00;
OCR1BL=0x00;
选择溢出和捕获中断,是不是中断发生后要检查 中断标志,是溢出中断还是捕获中断,在正常模式下,T1溢出后自己重载吗? 括号内为个人猜测(如果第一次捕获是ICP的值为65530,第二次捕获的值为100,用第二次的值减去第一次的值,结果是否为负值 或是一个错误的值,其实这个宽度为105us,这种情况是编译器处理还是要编写相关代码处理.还是在捕获发生时将T1清零,重新开始计数,如果是后者的话问题比较好解决,前者就不是很好解决),

machao 发表于 2007-9-9 21:07:03

请参考我讲义第11章中的T1捕获中断的应用介绍。

adongliu 发表于 2007-9-9 22:46:55

看了两遍,但是捕获中断后,T1的计数值是否清零没有介绍,T1的溢出中断是溢出65535还是ICR的值

machao 发表于 2007-9-10 08:37:57

请仔细看器件手册,弄清楚T/C的工作原理。

捕获只是捕获触发输入条件成立时,将T/C1的当前计数值复制到捕获寄存器中,然后申请捕获中断,该过程并不影响T/C1的继续计数,也不改变T/C1的计数值。你可以同时设置和使用T/C1的溢出中断,当T/C1为65536时产生溢出中断。捕获中断和溢出中断是不同的中断,中断向量不同,根本不需要通过检查中断标志来确定到底是哪个中断产生了。

adongliu 发表于 2007-9-10 22:56:42

谢谢马老师的讲解,我今天试了一下,使用top模式,捕获中断后将捕获边沿取反,读ICP,将计数器清零,可以实现.两个中断向量确实比较好使,现在又出现了一个问题,我的ID卡 出来的脉宽怎么都是256-380us啊.郁闷中....
页: [1]
查看完整版本: 请教一个捕获的问题