⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer2._c

📁 protues_atmeg8学习之:timer篇源代码
💻 _C
字号:
/******************************************/
//文件名:Timer2.c
//功能: T/C2和INT0的应用
//作者:  young
//时间: 2006.10.9
//目标MCU:ATmega8   
//晶振:  8MHZ
/******************************************/
#include <iom8v.h>
#include <macros.h>
#include "Delay.h"

#define U8 unsigned char 
#define U16 unsigned int 

U8 KeyDown;

//初始化端口
void init_port(void)  
{   
    DDRB  = 0x08; 
    PORTB = 0xFF;
    PORTC = 0x0F;
    DDRC  = 0xFF;
    PORTD = 0x04;
    DDRD |= 0xFF;
}  

//初始化外部中断
void init_int(void)
{
    MCUCR |= 0x02;   //INT0下降沿触发
	GICR  |= 0x40;   //打开INT0中断
    GIFR  |= 0x40;   //清除INT0中断标志位
}

//初始化T/C2
void init_timer2(void)  
{  
    TCCR2 = 0x00;     //T/C2工作于定时方式,先停止T/C0
    TCNT2 = 0x00;     //计数初始值0
    OCR2  = 0x00;     //设置比较参考值		
    TIMSK&= 0x3F;     //关闭TOV2中断	
}  

//初始化所以硬件 
void init_devices(void)  
{
    CLI();          //关闭全局中断
    init_port();	
    init_int();  
    init_timer2();
    SEI();          //打开全局中断
} 

//INT0中断函数
#pragma interrupt_handler int0_fun:iv_INT0
void int0_fun(void)
{
    KeyDown++;	
}

//主函数
void main(void)  
{
    init_devices();  
    while(1) 
    { 
        switch(KeyDown)
	    {
	    case 1:	        
		    //打开T/C2,选择相位可调PWM模式
			//COM2[1:0]=3正向比较输出,系统时钟64分频			
			TCCR2|=(1<<WGM20)|(1<<COM21)|(1<<COM20)|(1<<CS22);			
		    KeyDown++;
		    break;
	    case 2:             //恒定高电平	        
            OCR2 = 0x00; 
	        break;
	    case 3:             //恒定低电平 
	        OCR2 = 0xFF;
	        break;
        case 4:             //減少占空比
	        OCR2 = 50;
	        break;
	    case 5:              //增加占空比 
	        OCR2 = 200;
	        break;
	    case 6:
		    TCCR2=0x00;      //关闭T/C0
			KeyDown=0;
		    break;
	    default:
		    KeyDown=0;
		    break;		
	    }	
	    PORTC=KeyDown;
		delay_ms(10);
    }  
} 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -