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

📄 main.c

📁 这是本人基于dsp编写的利用各种方法产生PWM,看了这些程序
💻 C
字号:
/*Main.c*/ 
#include "global.c"

void PWM_Init() ; 
void KickDog();
void SystemInit();

unsigned int numled0=4000;   
unsigned int XPWM=200;  


main()
{  
   SystemInit();         	         //系统初始化   
   MCRA=MCRA & 0xC0FF; 	          //IOPB0-6设为IO口模式
   PBDATDIR=0xFFC2;   	         //所有LED=0 
   PBDATDIR=PBDATDIR |0x003D;   //所有LED=1     
   PWM_Init() ;               //定时器初始化   
   asm(" CLRC INTM ");      //中断使能
   while(1);
   
} 

void SystemInit() 
{  
    asm(" SETC	INTM ");	        // 关闭总中断
    asm(" CLRC  SXM  ");	        // 禁止符号位扩展 
    asm(" CLRC  CNF  ");           // B0块映射为 on-chip DARAM
    asm(" CLRC  OVM  ");          //累加器结果正常溢出
    SCSR1=0x83FE;         	     // 系统时钟CLKOUT=20*2=40M
                                //打开ADC,EVA,EVB,CAN和SCI的时钟,系统时钟CLKOUT=40M 
    WDCR=0x006F;			    // 禁止看门狗,看门狗时钟64分频 
    KickDog();    			    // 初始化看门狗 
    IFR=0xFFFF;				    // 清除中断标志 
    IMR=0x0002;				    // 打开中断2 
}  

void PWM_Init()           
{ 
    MCRA=MCRA | 0x1000;		    //T1PWM/T1CMP/IOPB4为PWM口
    EVAIFRA=0xFFFF;			   //清除中断标志 
    GPTCONA=0x0042;        //使能定时器的输出、比较输出高有效
    T1CNT=0; 	
    T1PR=800;			  //定时器1周期值,定时0.025us*800=15us   
    T1CMPR=XPWM;          //定时器1的比较寄存器
    EVAIMRA=0x0080;		//定时器1周期中断使能  
    T1CON=0x104E;    //增模式, TPS系数40M,T1使能
}  
 

/*定时器1中断服务程序*/
void c_int2()              
{
    if(PIVR!=0x27)
		{  	asm(" CLRC INTM ");
        	return;
		}
    numled0--;  
    if(numled0==0)
    {   numled0=4000;
		if((PBDATDIR & 0x0001)==0x0001) 
			PBDATDIR=PBDATDIR & 0xFFFE;    	//IOPB0=0;LED灭  
		else
			PBDATDIR=PBDATDIR |0x0101;     //IOPB0=1;LED亮 
    } 
      
	//T1CNT=0; 
	//XPWM=300;
    //T1CMPR=XPWM;  
    EVAIFRA=0x0080;   
    asm(" CLRC	INTM ");
}  

/*踢除看门狗 */
void KickDog()				
{
    WDKEY=0x5555;
    WDKEY=0xAAAA;
}

⌨️ 快捷键说明

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