📄 main.c
字号:
#include <c8051f020.h>
#define uint8 unsigned char
#define uint16 unsigned int
#define FORWORD 0XC0
#define BACK 0XE0
#define STOP 0X00
void DELAY(uint16 time)//控制电机的延时 ,1为1.9us
{
while(time--);
}
void Init_PORT(void)
{
XBR0=0X06;
XBR2=0X40;
//P0MDOUT=0XFF;
//P0=0;
}
void Init_Spi(void)
{
SPI0CN=0X03;
SPI0CFG=0Xc7;
SPI0CKR=199;
}
void Write_spi(uint8 DATA)
{
while(TXBSY);
//CS=0;
SPI0DAT=DATA;
//CS=1;
}
//----------------------左电机初始化------------------//
void Init_Ch1Duty(uint8 duty) //7f为50%
{
Write_spi(0x53);
//DELAY(3000);
DELAY(200);
Write_spi(duty);
//DELAY(3000);
DELAY(200);
}
void Init_Ch1Mode(uint8 NUM)
{
Write_spi(0x50);
//DELAY(3000);
DELAY(200);
Write_spi(NUM);
//DELAY(3000);
DELAY(200);
}
//----------------------右电机初始化--------------------//
void Init_Ch2Duty(uint8 duty)
{
Write_spi(0x57);
//DELAY(3000);
DELAY(200);
Write_spi(duty);
//DELAY(3000);
DELAY(200);
}
void Init_Ch2Mode(uint8 NUM)
{
Write_spi(0x54);
//DELAY(3000);
DELAY(200);
Write_spi(NUM);
//DELAY(3000);
DELAY(200);
}
//----------------左电机状态控制-----------------------//
void Ch1_Forword(void)
{
Init_Ch1Duty(0xee);
DELAY(5000);
Init_Ch1Mode(FORWORD);
DELAY(5000);
}
void Ch1_Back(void)
{
Init_Ch1Duty(0xee);
DELAY(5000);
Init_Ch1Mode(BACK);
DELAY(5000);
}
void Ch1_Stop(void)
{
Init_Ch1Duty(0x00);
DELAY(5000);
Init_Ch1Mode(STOP);
DELAY(5000);
}
//-------------右电机状态控制--------------------------//
void Ch2_Forword(void)
{
Init_Ch2Duty(0xee);
DELAY(5000);
Init_Ch2Mode(FORWORD);
DELAY(5000);
}
void Ch2_Back(void)
{
Init_Ch2Duty(0xde);
DELAY(5000);
Init_Ch2Mode(BACK);
DELAY(5000);
}
void Ch2_Stop(void)
{
Init_Ch2Duty(0x00);
DELAY(5000);
Init_Ch2Mode(STOP);
DELAY(5000);
}
void Init_SYSCLK(void)
{
uint8 i;
OSCXCN = 0X67;//开始外部22.1184M晶振
for(i = 0;i < 128;i++); //等待外部起振
while(!(OSCXCN & 0X80)); //查询标志位
OSCICN = 0X88;//用外部晶振,并使能始终丢
}
//-----------------主函数---------------------------------//
void main(void)
{
WDTCN = 0xde;
WDTCN = 0xad;//关闭看门狗
Init_SYSCLK();
Init_PORT();
DELAY(27);//延时60us
Init_Spi();
//Init_Ch1Duty(0xEE);
//DELAY(2000);
// DELAY(10);//延时60us
//Init_Ch1Mode(BACK);
//DELAY(1000);
Ch2_Forword();
// DELAY(10000);
//DELAY(1000);
Ch1_Forword();
//EnableInterrupts;
while(1)
{
// Ch2_Forword();
// DELAY(15000);
//DELAY(1000);
//Ch1_Forword();
/*P0=~P0;
DELAY(1);*/
//DELAY(15);
} /* wait forever */
/* please make sure that you never leave this function */
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -