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

📄 motor.c

📁 有刷电机控制硬件
💻 C
字号:
/*************************************************************************/


/*************************************************************************/
#include "f2407.h"
void inline disable();
void inline enable();
void initial();
void pwm1(int);
void pwm7(int);
void interrupt nothing();


/*************************
          主程序
**************************/
main()
{
 disable( );	                    	/*禁止总中断*/
 
 initial( );                        	/*系统初始化*/
 
 T2CON=T2CON|0X0040;		        /*启动定时器2*/
 T4CON=T4CON|0X0040; 		        /*启动定时器4*/
 
 enable( ); 	                    	/*开总中断*/
 
 PBDATDIR=PBDATDIR&0xFFDF;    /*IOPB5=0,允许电机9转*/
 pwm1(125);                     /*电机9正转*/
 
 PFDATDIR=PFDATDIR&0xFFF7;    /*IOPF3=0,允许电机8*/
 pwm7(50);                     /*电机8正转*/
 
// PBDATDIR=PBDATDIR|0x0020;   /*IOPB5=1,禁止电机9转 */
// PFDATDIR=PFDATDIR|0x0008;   /*IOPF3=1,禁止电机8转 */

} 

/************************************
  系统初始化子程序
*************************************/
void  initial()
{    

   //asm(" setc INTM");   /* 禁止所有中断*/
   asm(" setc SXM");	/* 符号位扩展有效*/
   asm(" clrc OVM");	/* 累加器中结果正常溢出*/
   asm(" clrc CNF");	/* B0被配置为数据存储空间*/
   SCSR1=0x02FD;	    /* CLKIN=10M,CLKOUT=2*CLKIN=20M*/
   WDCR=0x0E8;	        /* 不使能看门狗,因为SCSR2中的WDOVERRIDE*/
			            /* 即WD保护位复位后的缺省值为1,故可以用*/
	  		            /* 软件禁止看门狗*/ 
   MCRA=0x00FF;                   /*A组引脚,配置通用IOPB0-IOPB7端口,PWM1/2,CAP1/CAP2*/
   MCRB=0xFFFF;                   /*B组引脚配置为基本功能口*/
   MCRC=0x03FF;                   /*C组引脚,配置PWM7/8端口,CAP4/CAP5*/
   PBDATDIR=PBDATDIR|0xFFFF;      /*端口为输出,且输出1*/
   PFDATDIR=PFDATDIR|0xFFFF;      /*端口为输出,且输出1*/ 
   T1CON=0x0000;                  /*禁止定时器1*/ 
   T2CON=0x0000;                  /*禁止定时器2*/
   T3CON=0x0000;                  /*禁止定时器3*/ 
   T4CON=0x0000;                  /*禁止定时器4*/

   GPTCONA=0x0400;                /*配置GPTCONA*/
   GPTCONB=0x0000;                /*配置GPTCONB*/ 
	  		        
   EVAIFRA=0XFFFF;  /*清除中断*/
   EVAIFRB=0XFFFF;  /*清除中断*/
   EVAIFRC=0XFFFF;  /*清除中断*/
   EVBIFRA=0XFFFF;  /*清除中断*/
   EVBIFRB=0XFFFF;  /*清除中断*/
   EVBIFRC=0XFFFF;  /*清除中断*/
   
   EVAIMRA=0X0000;  /*禁止中断*/
   EVAIMRB=0X0000;  /*禁止中断*/
   EVAIMRC=0X0000;  /*禁止中断*/
   EVBIMRA=0X0000;  /*禁止中断*/
   EVBIMRB=0X0000;  /*禁止中断*/
   EVBIMRC=0X0000;  /*禁止中断*/  

   IFR=0xFFFF;	    /*清除全部中断标志,"写1清0"*/	  	  		        
   IMR=0x0000;	    /*允许INT1,INT4中断0009*/  
}
 
 
/************************************
PWM输出初始化,产生周期20KHZ的PWM脉冲
*************************************/  
 void pwm1(int pwm_duty1)
{
	/*定时器1配置在PWM1-6引脚处,为PWM提供时钟*/
	
	T1CNT=0x0000;                  /*清除定时器计数器*/
	T1PR=500;                      /*设置定时器周期*/
	DBTCONA=0x0000;                /*死区单元关闭*/
	CMPR1=pwm_duty1;               /*设置PWM1占空比为(T1PR-pwm_duty1)/T1PR */
	ACTRA=0x0666;                  /*PWM1/3/5引脚设置高电平有效,PWM2/4/6为低有效*/
	COMCONA=0x8200;                /*配置COMCONA寄存器*/
	T1CON=0x0840;                  /*配置T1CON寄存器*/
}

void pwm7(pwm_duty7)
{
	/*定时器3配置在PWM7-12引脚处,为PWM提供时钟*/
	
	T3CNT=0x0000;                  /*清除定时器计数器*/
	T3PR=500;                      /*设置定时器周期*/
	DBTCONB=0x0000;                /*死区单元关闭*/
	CMPR4=pwm_duty7;                /*设置PWM7占空比为2*(T3PR-pwm_duty7)/T3PR */
	ACTRB=0x0666;                  /*PWM7/9/11引脚设置高电平有效,PWM8/10/12为低有效*/
	COMCONB=0x8200;                /*配置COMCONB寄存器*/
	T3CON=0x0840;                  /*配置T3CON寄存器*/
}




/**************************** 
      屏蔽中断子程序
****************************/        
void inline disable() 
{
    asm(" setc INTM");
} 


/****************************
开总中断子程序
*****************************/
void inline enable()
{
    asm(" clrc INTM"); 
}


/************************************
若是由于干扰引起其它中断,则执行此子程序
************************************/         
void  interrupt nothing()
{
	asm(" clrc  INTM");	/*返回前开中断*/
	return;
}

⌨️ 快捷键说明

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