⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tc0_6.c

📁 arm的功能测试模块
💻 C
字号:
/***************************************************************
****       AVR T/C0 使用范例6(CTC 模式(WGM01:0 = 2))         ***
****          作者:  liugangdi                              ***
****          编译器:WINAVR20050214                         ***
****          日期:2005.12.24                               ***
****************************************************************/

/*功能简单说明:在CTC 模式(WGM01:0 = 2) 下OCR0 寄存器用于调节计数器
的分辨率。当计数器的数值TCNT0等于OCR0时计数器清零。OCR0定义了计数器
的TOP值,亦即计数器的分辨率。这个模式使得用户可以很容易地控制比较匹
配输出的频率,也简化了外部事件计数的操作。 本例子中选择比较匹配时OC0
引脚输出取反。可将OC0接到示波器上观看波形.实际应用一般不是用比较比配来
产生脉冲信号(和不同的计数功能一样),而是用于定时,在比较匹配中断服务程序
中加入自己的有关代码,此时的OC0可以设置没有被连接,PB3作为普通的端口使用.*/


#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdio.h>  
 
 
#define  uchar unsigned char
#define  uint  unsigned int
#define  PB3   3
#define  OCIE0 1
#define  OCF0  1
uchar temp;

//对于T/C0的比较匹配输出初始化
void init_timer0(void)
{DDRB|=(1<<PB3);     //PB3(oc0)引脚定义为输出
 TCCR0=0X1c;          //T0 256分频, CTC 模式(WGM01:0 = 2),比较匹配时OC0引脚取反
 OCR0=0X7F;           //在CTC 模式(WGM01:0 = 2) 下OCR0 寄存器用于调节计数器的分辨率。当计数器的数值
                      // TCNT0等于OCR0时计数器清零。OCR0定义了计数器的TOP值,亦即计数器的分辨率。
 temp=OCR0;
 TIFR|=(1<<OCF0);    //对输出比较匹配标志写1清零
 TIMSK|=(1<<OCIE0);  //使能输出比较匹配功能
 }
 
 SIGNAL (SIG_OUTPUT_COMPARE0)     //T/C0输出比较匹配中断服务程序 
 {
  switch(temp)
  {
   case 0x7F: OCR0=0X3F; temp=OCR0;break;  // 改变OCR0的值,从而该变方波周期
   case 0x3F: OCR0=0X7F; temp=OCR0;break;
   default: break;
   }
   }
  
 int main(void)
 {
  init_timer0();
  sei();
  while(1){;}
  }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -