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

📄 servomotor.c

📁 利用脉冲控制伺服电机运转
💻 C
字号:
/////////////////////////////////////
//  Generated Initialization File  //
/////////////////////////////////////

#include "C8051F120.h"
#define M 5529
sbit p = P3 ^ 0;     //伺服电机脉冲
sbit a = P4 ^ 0;     //伺服电机son信号,实际上并不需要son信号了,因为BRKR一直处于on状态
sbit dirs = P3 ^ 1;	 //伺服电机方向信号
sbit m = P5^0;
sbit n = P2^4;
sbit k = P7^0;
unsigned long T=0;
// Peripheral specific initialization functions,
// Called from the Init_Device() function
void Reset_Sources_Init()
{
    WDTCN     = 0xDE;
    WDTCN     = 0xAD;
}

void Port_IO_Init()
{
    // P0.0  -  TX0 (UART0), Open-Drain, Digital
    // P0.1  -  RX0 (UART0), Open-Drain, Digital
    // P0.2  -  TX1 (UART1), Open-Drain, Digital
    // P0.3  -  RX1 (UART1), Open-Drain, Digital
    // P0.4  -  Unassigned,  Open-Drain, Digital
    // P0.5  -  Unassigned,  Open-Drain, Digital
    // P0.6  -  Unassigned,  Open-Drain, Digital
    // P0.7  -  Unassigned,  Open-Drain, Digital

    // P1.0  -  Unassigned,  Open-Drain, Digital
    // P1.1  -  Unassigned,  Open-Drain, Digital
    // P1.2  -  Unassigned,  Open-Drain, Digital
    // P1.3  -  Unassigned,  Open-Drain, Digital
    // P1.4  -  Unassigned,  Open-Drain, Digital
    // P1.5  -  Unassigned,  Open-Drain, Digital
    // P1.6  -  Unassigned,  Open-Drain, Digital
    // P1.7  -  Unassigned,  Open-Drain, Digital

    // P2.0  -  Unassigned,  Open-Drain, Digital
    // P2.1  -  Unassigned,  Open-Drain, Digital
    // P2.2  -  Unassigned,  Open-Drain, Digital
    // P2.3  -  Unassigned,  Open-Drain, Digital
    // P2.4  -  Unassigned,  Open-Drain, Digital
    // P2.5  -  Unassigned,  Open-Drain, Digital
    // P2.6  -  Unassigned,  Open-Drain, Digital
    // P2.7  -  Unassigned,  Open-Drain, Digital

    // P3.0  -  Unassigned,  Push-Pull,  Digital
    // P3.1  -  Unassigned,  Push-Pull,  Digital
    // P3.2  -  Unassigned,  Push-Pull,  Digital
    // P3.3  -  Unassigned,  Push-Pull,  Digital
    // P3.4  -  Unassigned,  Push-Pull,  Digital
    // P3.5  -  Unassigned,  Push-Pull,  Digital
    // P3.6  -  Unassigned,  Push-Pull,  Digital
    // P3.7  -  Unassigned,  Push-Pull,  Digital

    SFRPAGE   = CONFIG_PAGE;
    P3MDOUT   = 0xFF;
    P4MDOUT   = 0xFF;
    P5MDOUT   = 0xFF;
    P6MDOUT   = 0xFF;
    P7MDOUT   = 0xFF;
    XBR0      = 0x04;
    XBR2      = 0x44;
}

void Oscillator_Init()
{  
	int i = 0;
    SFRPAGE   = CONFIG_PAGE;
    OSCXCN    = 0x67;
    for (i = 0; i < 3000; i++);  // Wait 1ms for initialization
    while ((OSCXCN & 0x80) == 0);
    CLKSEL    = 0x01;  	

}

// Initialization function for device,
// Call Init_Device() from your main program
void Init_Device(void)
{
    Reset_Sources_Init();
    Port_IO_Init();
    Oscillator_Init();
}

 /******************************************************************************
函数:Timer0Isr
描述:定时器3中断服务程序,Timer0
参数:无
返回:无                          
******************************************************************************/
void Timer0Isr (void) interrupt 1 using 1
{  
	ET0 = 0;
   	//TH0 = 0xF8;
  	//TL0 = 0xCD;
	SFRPAGE = 0x00;
	TH0 = -M/256;           
   	TL0 = -M%256; 
   	T++;
   	if(T <= 400)
   	{
   		p = !p;    
   	}
   	else 
  	{   
		SFRPAGE = 0x0F;
		a = 1; 
		SFRPAGE = 0x00;   
		TR0 = 0;
    	T = 0;
	}
	ET0=1;
}
    
void pulse(void)
{   
	p=0;
    SFRPAGE   = TIMER01_PAGE;
    TMOD|= 0x01;            //TMOD: timer 0, mode 1, 16-bit timer
   	//TH0 = 0xF8;             //Timer0 TH0 high byte reload initial value
   	//TL0 = 0xCD;             //Timer0 TL0 low byte write initial value(1ms)
	TH0 = -M/256;           
   	TL0 = -M%256; 
   	EA = 1;	
    ET0 = 1;                //Timer0 Interrupt Unable(IE.1)
	SFRPAGE = 0x00;
 	TR0 = 1;
	
 }
main()
{ 
	/*   
	 long j = 0;
	 Init_Device();
	 dirs = 1;
	 SFRPAGE = 0x0F;
     a = 1;
     for(;j <= 10000;j++);
	 pulse(); 
    while(1);
	*/
	Init_Device();
	SFRPAGE = 0x0F;
	//P5 = P2&0xFF;
	
	P7 = 0x00;

	m = k&n;
}

⌨️ 快捷键说明

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