标题: AVR单片机定时器0的比较匹配功能试验TIME0_CTC [打印本页]

作者: hujia    时间: 2015-6-23 15:32
标题: AVR单片机定时器0的比较匹配功能试验TIME0_CTC
/*闲言碎语不要讲*/
/*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);


}






欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1