📄 单端adc控制两电机.txt
字号:
#include <c8051f310.h>
#include <stdio.h>
#include <math.h>
#include <Intrins.h>
#include <absacc.h>
sbit a0=P1^0;//给定左轮方向
sbit a1=P1^1;//PWM,定左轮速度
sbit a4=P0^4; //P04给定右轮方向,
sbit a5=P0^5; //PWM,定右轮速度
unsigned j,k,m;
void pwm(void) //PWM的初始化
{
PCA0MD &= ~0x40;
PCA0CN=0x40; //允许PCA工作
PCA0MD=0x02; //PCA时钟为4分频
PCA0L=230;//设置没什么关系
PCA0H=230;//设置没什么关系
PCA0CPM0=0x42; //设置左轮为8位PWM输出
PCA0CPL0=0; //左轮
PCA0CPH0=256;
PCA0CPM1=0x42; //设置右轮为8位PWM输出
PCA0CPL1=0; //右轮
PCA0CPH1=256;
}
void adc(void)
{AMX0P=0x11;//正输入选择电源VDD--0001 0001
AMX0N=0x0C;//负输入选择P1.4(12脚口)--0000 1100
ADC0CF=0x24;//2M,左对齐
ADC0H=0xFF;
ADC0L=0x00;
ADC0CN=0x90;
REF0CN=0x01;
}
void delay(m)
{
unsigned i;
for(i=0;i<200;i++)
{
for(j=0;j<m;j++);
{_nop_(); _nop_();}
}
}
void pio(void)
{
P0MDIN=0xff;
P0MDOUT=0x20; //0为开漏(接负载),1为推挽(开关能力强)0010 0000
P0SKIP=0xDF; //P0.5就是PWM控制转速的—1101 1111
P1MDIN=0xef;//一定要让P1.4为模拟输入--1110 1111
P1MDOUT=0x02; //0为开漏,1为推挽—0000 0010
P1SKIP=0x11;//跳过P1.0,因为P1.1就是PWM来控制转速的,再跳过P1.4,留给adc的负输入选择—0001 0001
XBR0=0x00;
XBR1=0xc2;//选择CEX0,CEX1 PCA0ME
}
void sysclk(void) //内部晶振
{
OSCICL=0x2D; //20MHZ
OSCICN=0xc2;// 10MHZ
CLKSEL=0x00;
}
main( )
{
PCA0MD &=~0x40;// 关闭
sysclk();
pio();
pwm();
adc();
a4=1;
a0=1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -