📄 4、单片机控制两个电机.txt
字号:
//P0.4(20脚口)--L298的5口--控制0转向
//P0.5(19脚口)--L298的6口--控制PWM
//P1.0(16脚口)--L298的12口--控制1转向
//P1.1(15脚口)--L298的11口--控制1PWM
#include <c8051f330.h>
sbit a4=P0^4; //给定0轮方向,
sbit a5=P0^5; //PWM,定0轮速度
sbit a0=P1^0;//给定1轮方向
sbit a1=P1^1;//PWM,定1轮速度
unsigned j,k,m;
void pwm(void) //PWM的初始化
{
PCA0MD &= ~0x40;
PCA0CN=0x40; //允许PCA工作
PCA0MD=0x02; //PCA时钟为4分频
PCA0CPM0=0x42; //设置0轮为8位PWM输出
PCA0CPL0=0;
PCA0CPH0=156;
PCA0CPM1=0x42; //设置1轮为8位PWM输出
PCA0CPL1=0;
PCA0CPH1=156;
}
void delay(m)
{
unsigned i;
for(i=0;i<200;i++)
{
for(j=0;j<m;j++)
{; ;}
}
}
void pio(void)
{
P0MDIN=0xff;
P0MDOUT=0xEF; //0为开漏(接负载),1为推挽(开关能力强)P0^4定0轮方向置0,P0^5定0轮速度置1→1110 1111
P0SKIP=0xDF; //P0.5控制电机0转速的→1101 1111
P1MDIN=0xff;
P1MDOUT=0xFE; //0为开漏,1为推挽,P1^0定1轮方向置0,P1^1定1轮速度置1→1111 1110
P1SKIP=0xFD;//P1.1控制电机1转速→1111 1101
XBR0=0x00;
XBR1=0xc2;//选择CEX0,CEX1通过交叉开关后,CEX0对应(P1^0定0轮方向,P1^1定0轮速度) ;CEX1对应(P0^4定1轮方向,P0^5定1轮速度)
}
void sysclk(void) //内部晶振
{
OSCICL=0x2d; //20MHZ
OSCICN=0xC2;// 10MHZ
CLKSEL=0x00;
}
main( )
{
PCA0MD &=~0x40;// 关狗
sysclk();
pio();
pwm();
while(1)
{
a4=1;
a0=1;
PCA0CPH0=0;
PCA0CPH1=0;
delay(5000);//2秒左右
a4=0;
a0=0;
PCA0CPH0=255;
PCA0CPH1=255;
delay(5000);
a4=0;
a0=0;
PCA0CPH0=0;
PCA0CPH1=0;
delay(5000);
a4=1;
a0=1;
PCA0CPH0=255;
PCA0CPH1=255;
delay(5000);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -