📄 tc0_6.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 + -