[Atmel] AVR 比较匹配中断

[复制链接]
1172|2
 楼主| ddllxxrr 发表于 2014-9-12 21:28 | 显示全部楼层 |阅读模式
本帖最后由 ddllxxrr 于 2014-9-12 21:29 编辑

CTC比较匹配时清零计数器模式,。当计数器TCNT0的数值等于比较寄存器OCR0时计数器TCNT0自动清零。OCR0定义了计数器的最大(TOP)值,这个模式使得用户可以很容易地控制比较匹配输出的频率。T/C0的比较输出脚为OC0(PB3),PB口的第三脚,在此模式下可以在OC0上输出PWM控制外部设备。
例如:在OC0脚上输出20HZ的方波信号,方波的周期时间为T=1/20HZ=0.05秒=50ms,半个周期为25ms,系统采用8MHZ晶振,1024分频,时钟计数频率为8000000/1024=7812.5HZ,每个时钟脉冲时间为1/7812.5=0.128ms, 定时25ms的计数值为25ms/0.128ms=195,将195赋值为T/C0的比较寄存器OCR0,启动定时器后,TCNT0从0开始计数,当计数到195时,产生比较中断,在OC0脚上输出20HZ的占空比为50%的方波信号。
操作过程如下:
  1. 一、I/O管脚初始化:PB3(OC0)脚设为输出,DDRB|=(1<<PB3);
  2. 二、使能全局中断:SREG=0X80;
  3. 三、T/C0比较中断允许:TIMSK|=(1<<OCIE0);
  4. 四、TCCR0配置:分频系数为1024, TCCR0|=(1<<CS02)|(0<<CS01)|(1<<CS00);
  5. CTC模式设置, TCCR0|=(1<<WGM01)|(0<<WGM00);
  6. 比较匹配时OC0取反 TCCR0|=(1<<COM01)|(0<<COM00);
  7. 五、计数器付初值: TCNT0=0;
  8. OCR0=195; //付初值后定时器开始工作
  9. //函数功能:在PB3上输出20HZ的方波,并在PD7上产生周期2秒的周期信号。(代码来自轻松玩转avr单片机c语言cd)
  10. #include <iom16v.h>
  11. char Counter = 0; // 计数变量清零

  12. void port_init()
  13. {
  14. DDRB|=(1<<PB3); //PB3配置为输出(为1时用或符号|)
  15. PORTB&=(0<<PB3); //PB3输出0(为0时与符号&)
  16. DDRD|=(1<<PD7); //PB3配置为输出(为1时用或符号|)
  17. PORTD&=(0<<PD7); //PB3输出0(为0时与符号&)
  18. }

  19. void timer0_init()
  20. {
  21. SREG = 0x80; //使能全局中断
  22. TIMSK= (1<< OCIE0); //T/C0比较匹配中断允许
  23. TCCR0=(1<<COM00)|(0<<COM01)|(0<<WGM00)|(1<<WGM01)|(1<<CS02)|(0<<CS01)|(1<<CS00);
  24. // T/C0工作于CTC模式,1024分频,比较匹配时,触发OC0取反
  25. TCNT0 = 0; //定时初值设置,
  26. OCR0 = 195; //比较匹配寄存器初值
  27. }

  28. void main()
  29. {
  30. port_init();
  31. timer0_init();
  32. while(1);
  33. }

  34. #pragma interrupt_handler timer0_COMP:20
  35. void timer0_COMP(void)
  36. {
  37. TCNT0 = 0; //定时初值设置,
  38. OCR0 = 195; //比较匹配寄存器初值
  39. if(++Counter >= 40) //定时时间到1S吗?定时中断溢出40次为1S
  40. {
  41. PORTD^=(1<<PD7);//驱动蜂鸣器发声
  42. Counter = 0; //1S计时变量清零
  43. }
  44. }

wangguiyuan1983 发表于 2014-9-14 21:28 | 显示全部楼层
路过学习!!!!
 楼主| ddllxxrr 发表于 2014-9-15 05:56 | 显示全部楼层
wangguiyuan1983 发表于 2014-9-14 21:28
路过学习!!!!

:handshake
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:http://shop34182318.taobao.com/ http://shop562064536.taobao.com

2404

主题

7001

帖子

68

粉丝
快速回复 在线客服 返回列表 返回顶部