📄 tc1_3.c
字号:
/*****************************************************
**** AVR T/C1 使用范例3(T/C1比较匹配定时中断) ***
**** 作者: liugangdi ***
**** 编译器:WINAVR20050214 ***
**** 日期:2005.11.25 ***
******************************************************/
/*功能简单说明: 每隔1s使PC5取反1次,采用T/C1比较匹配中断,
时钟为8MHZ,256分频,每32us计数1次,1s需要计数31250次,
T/C1比较匹配取值0X7A12(即31250)。
补充说明:采用T/C1溢出中断送初值0X85EE,也可以实现上述功能,
但每次中断服务子程序中都要送初值。如果没有及时进入该中断服务
子程序,则定时的间隔时间就会变长,程序也不如比较匹配中断简短,
所以一般TC0、TC1、TC2能用比较匹配中断就不用定时器溢出中断。
在TC0_2.c的例子中利用的是定时器溢出中断。*/
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/signal.h>
#include <stdio.h>
#define uchar unsigned char
#define PC5 5
//TC1比较匹配A中断初始化
void init_timer1(void)
{
TCCR1B=0X0C; //采用CTC模式,WGM13 WGM12 WGM11 WGM10=0 1 0 0 ;具体见手册,对主频256分频
TCNT1=0X0000; //置TCNT1初值为0
OCR1A=0X7A12; //OCR1A置0X7A12,即1s中断1次
TIMSK=0X10; //允许TC1比较匹配A中断
}
SIGNAL(SIG_OUTPUT_COMPARE1A)
{
PORTC^=_BV(PC5); //哪一位要取反就与1异或
}
int main(void)
{
DDRC|=(1<<PC5); //定义C口方向
init_timer1();
sei();
while(1){}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -