?? 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 + -