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

📄 main.c

📁 自己以前编的avr_gcc的pwm程序
💻 C
字号:
   #include <avr/io.h>
   #include <avr/interrupt.h>
   #include <util/delay.h>
   #include <avr/signal.h>
   
   #define  uint  unsigned int
   #define  uchar unsigned char
    uchar m;
	
	///延时1Ms
	void delayMs(uint t)
	  {
	      uint i=0;
         for(;i<t;i++) 
	        
			_delay_loop_2(250*4);
	   
	  }
	
  /////T1的PWM
   
   void time1_PWM_init(void)
     {                            ///8M/2*1024*TOP=4Hz
	    OCR1AH=0x03;              ///定时TOP值         时间约为5秒 频率为0.2Hz	 
		OCR1AL=0xff;              ///8000000/(1024*0.2)=19531   39061
								 
								 
        OCR1BH=0x01;              ///设定0C1B的PWM值  时间约为2秒  占空比40%   								 
	    OCR1BL=0xff;              ///8000000/(1024*0.5)=7812.5   15624
		TCCR1B|=_BV(CS12)|_BV(CS11)|_BV(CS10);	               ///1024分频
        TCCR1A|=_BV(WGM10)|_BV(COM1B0);   ///PWM模式9  OCB1输出PWM			 
		TCCR1B|=_BV(WGM13)/*|_BV(WGM12)*/;     ///OCA1为普通I/O口
		TCNT1H=0;
		TCNT1L=0;
			                                                
	 }
	 
	
   int main(void)
	 {

	     DDRD=0xff;
	     DDRB|=_BV(PB2);
         PORTB&=~_BV(PB2);              //设置0CB1为输出 
		 time1_PWM_init();
	     while(1)
			{
				PORTD=0x0F;
				
			}
	     return(0);
		 
	 }
	 
	  
     ////匹配中断服务程序  
     /*  
     SIGNAL(SIG_OUTPUT_COMPARE1A)
     
      {
	      OCR1AH=0x1e;
	      OCR1AL=0x84; 
		  m++;
		  if(m==255)   {m=0;}
	     // PORTB&=~_BV(PB1);
		   
	  }

 
	void time1_init(void)
       {  
	      OCR1AH=0x1e;
	      OCR1AH=0x1e;
	      OCR1AL=0x84;                  ///TOP=8000000/(2*64*1000)-1=61.5  选61 
	      TCCR1B=(0<<WGM13)|(1<<WGM12)|(1<<CS12)|(0<<CS11)|(1<<CS10);   
		  TCCR1A=(0<<WGM11)|(0<<WGM10)|(0<<COM1A1)|(1<<COM1A0);
		                               ///当比较匹配OC1B取反 
	                                   ///1024分频,CTC模式
	   
	      
	   }	 
	 
	
	 
	 int main(void)
	   {
	     
		 DDRD=0xff;
	     DDRB|=_BV(PB1);
		 PORTB|=_BV(PB1);
	     time1_init();
		 sei();
		 TIMSK|=_BV(OCIE1A);
		 TCNT1H=0;
		 TCNT1L=0;
		 while(1)
		      {
			     PORTD=m;
			     delayMs(100);
			  
			  }
		 return(0);
	    
	   }
	   
	   */

⌨️ 快捷键说明

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