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

📄 占空比可变方波.txt

📁 用ATmega8单片机产生占空比可变PWM方波
💻 TXT
字号:
/*****************************************************************/
/*                  方波产生程序                    */
/*                2008年9月4日                */
/*  目标MCU:ATmega8L   晶振:内部RC(INT)8MHz */
/******************************************************************/
#include<iom8v.h>
#define uchar  unsigned char
#define uint  unsigned int
uchar i;
void init_port(void)
{
 	 	DDRB=0x08; 			//设置OC2口为输出
		PORTB=0xff;
		DDRC|=0xff;
		PORTC=0x00; 
		DDRD|=0xff;
		PORTD=0x00; 
}

void init_timer2(void)
{
	 	TCCR2=0x00;	  		//先停止T/C2
		TCNT2=0x00;			//赋计数初值为0
		//OCR2=0xc0;			//比较匹配参考值
		TIMSK|=0x80;		//打开比较匹配中断
		TCCR2=0x69;			//T/C2为快速PWM模式,比较匹配时清零OC2,0xff时置位oc2,不分频
}

void init_devices(void)
{
 	 	 //SREG&=0x00;
		 SREG|=0x80;
	     init_port();
		 
		 init_timer2();
		 
}

void delay(uint z)
{
 	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--); 
}

/*void change_rate(uchar number)
{
 	 OCR2=number;
	 init_devices();
	
}*/

void main(void)
 {
 unsigned int a=184;
 init_devices();    //器件初始化
 OCR2=a;    //匹配初值
 while(1)
  {
  //init_devices();    //器件初始化
  a-=5;    
  OCR2=a; 
  if(a<=5)   
   {
   a=234;
   }
   delay(1000);
  }
 }








/*****************************************************************/
/*                  AD转换程序                    */
/*                2007年12月21日                */
/*  目标MCU:ATmega8L   晶振:内部RC(INT)8MHz */
/******************************************************************/
#include<iom8v.h>
#define uchar  unsigned char
#define uint  unsigned int
uchar i;
void init_port(void)
{
 	 	DDRB=0x08; 			//设置OC2口为输出
		PORTB=0xff;
		DDRC|=0xff;
		PORTC=0x00; 
		DDRD|=0xff;
		PORTD=0x00; 
}

void init_timer2(void)
{
	 	TCCR2=0x00;	  		//先停止T/C2
		TCNT2=0x00;			//赋计数初值为0
		//OCR2=0xc0;			//比较匹配参考值
		TIMSK|=0x80;		//打开比较匹配中断
		TCCR2=0x69;			//T/C2为快速PWM模式,比较匹配时清零OC2,0xff时置位oc2,不分频
}

void init_devices(void)
{
 	 	 //SREG&=0x00;
		 SREG|=0x80;
	     init_port();
		 
		 init_timer2();
		 
}

void delay(uint z)
{
 	uint x,y;
	for(x=z;x>0;x--)
		for(y=110;y>0;y--); 
}

void change_rate(uchar number)
{
 	 OCR2=number;
	
}

void main(void)
 {
 unsigned char i;
 unsigned int a=0x20;
 init_devices();    //器件初始化
 //OCR2=a;    //匹配初值
 while(1)
 {
  	for(i=0;i<40;i++)
	{
	change_rate(a);
	a+=20;
	delay(1000);
	}
  }
}

⌨️ 快捷键说明

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