/*闲言碎语不要讲*/
/*AVR定时器0的比较匹配功能试验, 天津第四项目部宿舍 */
#include <iom16v.h>
#define uchar unsigned char
#define uint unsigned int
#define set_bit(a,b) a|=(1<<b)
#define clr_bit(a,b) a&=(1<<b)
#define get_bit(a,b) a&(1<<b)
#pragma interrupt_handler time0ctc_isr:20
void time0ctc_isr()//定时计数器0比较匹配中断
{
;/*其实这个比较匹配就是一个频率发生器,而他的频率大小由OCR0控制,所以在这中断离改变OCR0就会改变下一次的波形频率,*/
;/*所以这个就是用频率变化的场合用的,*/
}
void int_time0ctc()//定时器0用在比较匹配设置初始化
{
SREG=0x80;//开启全局中断
TCNT0=0;//这里我采用RC震荡8M时钟,1024分频后周期是128微秒/脉冲,(255-0)*128=3968us=3.968ms的时钟信号出现在OC0引脚
OCR0=255;//这个OCR0就是说TCNT0一直加,加到和OCR0相等时,就发生所谓的比较匹配,这时就产生中断了,只是这里要注意OCR0>TCNT0,否则时间不准
TCCR0=0x1D; //工作在CTC比较匹配模式,比较匹配时 取反(这里看手册72页里有引脚电平设置我这里设置为去取反了) OC0引脚(就是4脚),时钟1024分频,开启定时器
TIMSK=0x02;//开启定时器输出比较匹配中断
}
void main()
{
DDRC=0xff;
PORTC=0x00;
DDRB|=(1<<3);
PORTB|=(1<<3);
int_time0ctc();
while(1);
}
|