找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 5434|回复: 0
收起左侧

AVR单片机定时器0的比较匹配功能试验TIME0_CTC

[复制链接]
ID:26188 发表于 2015-6-23 15:32 | 显示全部楼层 |阅读模式
/*闲言碎语不要讲*/
/*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);


}

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表