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

📄 pwm.c

📁 IAR-2148.rar 这是IAR上做的2148所有的例程
💻 C
字号:
/********************************************************************
*File :PWM.c
*Autor:GongJun
*Date :
*Modifier:GongJun
*Date:2005-8-5
*Description:PWM6 ouput PWM signal
*********************************************************************/
#include <iolpc2148.h>
//#include "demo.h"
#define XTALFREQ 12000000        //XTAL frequency in Hz
//#define  CYCLE_DATA				2000
//#define  DUTY_CYCLE_DATA		1000		
/*********************************************************************
*Function   :void Delay(U32 ms)
*Object     :delay n ms
*Description:No
*Parameter	:U32 ms :millisecond
*Return		:No
**********************************************************************/
void Delay( unsigned int ms )
{
	unsigned int CLK = ( XTALFREQ / 1000 ) * ms / 2 ;

	while ( CLK-- ) ;		
}

/********************************************************************
*Function   :void PWM5_Beep( U32 CYCLE_DATA, U32 DUTY_CYCLE_DATA )
*Object     :make PWM5 ouput certain PWM wave
*Description:No
*Parameter	:
*Return		:No
*********************************************************************/
void PWM2_Beep( unsigned int CYCLE_DATA , unsigned int DUTY_CYCLE_DATA )
{
	PWMPR = 0x00;				//count frequency:Fpclk
	PWMMCR = 0x02;				
	PWMMR0 = CYCLE_DATA;		// set PWM cycle
	PWMMR5 = DUTY_CYCLE_DATA;	

	PWMLER = 0x21;				// PWMMR0、PWMMR6 latch
	PWMPCR = 0x2000;			//PWM5 enable
	PWMTCR = 0x09;				//start timer,PWM enable
}

/********************************************************************
*Function   :void PWM5_Beep( U32 CYCLE_DATA, U32 DUTY_CYCLE_DATA )
*Object     :make PWM5 ouput certain PWM wave
*Description:No
*Parameter	:CYCLE_DATA: range from :1---100000,10us
			 DUTY_CYCLE_DATA: range from:1--100000,0.001%-100%
*Return		:No
*********************************************************************/
void PWM2_Set( unsigned int CYCLE_DATA , unsigned int DUTY_CYCLE_DATA )
{
	
	PWMTCR =0x02;
	PWMPR = 0x00;				// count frequency:Fpclk
	//PWMMCR = 0x02;	
	PWMMCR = 0x42;			
	PWMMR0 = CYCLE_DATA;		        // set PWM cycle
	PWMMR2 = DUTY_CYCLE_DATA;	

	PWMLER = 0x05;				// PWMMR0、PWMMR6 latch
	PWMPCR = 0x400;			        // PWM2 enable
	PWMTCR = 0x09;				// start timer,PWM enable
}

/*********************************************************************
*Function       :PWM5_Stop( void )
*Object         :stop PWM5
*Description    :No
*Parameter	:No
*Return		:No
**********************************************************************/
void PWM2_Stop( void )
{
	PWMMCR = PWMMCR | ( 1 << 8 ) ;
	
}		

/*********************************************************************
*Function   :Beep( U32 time)
*Object     :PWM5 control BUZZER
*Description:No
*Parameter	:U32 time: beep time
*Return		:No
**********************************************************************/
void Beep( unsigned int time )
{
	PWM2_Set( 3000 , 1500 ) ;
	Delay( time ) ;
	PWM2_Stop() ;
}

/*********************************************************************
*Function   :PWM5_Beep_Test( void )
*Object     :use PWM5 to make BUZZER beep
*Description:No
*Parameter	:No
*Return		:No
**********************************************************************/
void PWM5_Beep_Test(void)
{
	unsigned short CYCLE = 3000;
	unsigned short i=5;

	//printf( "PWM5 Test( Beep ) !\n\n" ) ;
	//printf( "Press +/- to increase/reduce the frequency of beep !\n" ) ;
	//printf( "Press 'ESC' to Exit this test program !\n\n" );

	PWM2_Set( CYCLE , ( CYCLE / 2 ) ) ;

	while (i--)
	{
		//U8 key;		
		
		if(CYCLE<2000)CYCLE=CYCLE+10;

		PWM2_Set( CYCLE , ( CYCLE / 2 ) ) ;
		Delay(100);
		//printf( "\tNow beep CYCLE is %duS\n" , ( CYCLE * 10 ) ) ;
	}

	PWM2_Stop() ;
	//return 1 ;
}

⌨️ 快捷键说明

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