📄 5、a-d转换单端.txt
字号:
//P0.4(20脚口)控转向;
//P0.5(19脚口)控制pwm;
//P1.4(12脚口)接电位器,正输入;
#include <c8051f330.h>
sbit a4=P0^4; //P0.4给定左右轮方向
sbit a5=P0^5; //PWM输出
void pwm123(void) //PWM的初始化
{
PCA0MD &= ~0x40;
PCA0CN=0x40; //允许PCA工作
PCA0MD=0x02; //PCA时钟为4分频
PCA0CPM0=0x42; //设置左轮为8为PWM输出
}
void pio(void)
{
P0MDIN=0xFF;//全为数字输入→1111 1111
P0MDOUT=0xEF; //P0.4控转向要驱动能力强选择开漏置0;P0.5控制转速就选择开关能力强更好些置1→1110 1111
P0SKIP=0x1F;//跳到P0.5,因为它是控制转速,要给CEX0功能留着→0001 1111
P1MDIN=0xEF; //P1.4接电位器,随时控制转速大小,为模拟输入0→1110 1111
P1MDOUT=0xEF; //P1.4接电位器属于接了负载,要驱动能力强的,选择开漏置0→1110 1111
P1SKIP=0xFF;//必须跳过P1.4其他就随便→1111 1111
XBR0=0x00;
XBR1=0xC1; //CEX0
}
void sysclk(void) //内部晶振
{
OSCICL=0x2D; //20MHZ
OSCICN=0xC2;// 二分频,分后为10MHZ
CLKSEL=0x00;
}
void AD(void)
{
AMX0P=0x0C;//正输入选择P1.4(12脚口)→0000 1100
AMX0N=0x11;//负输入选择地→0001 0001
REF0CN=0x08;//选择基准电压VDD→0000 1000
ADC0CF=0x24;//2M SAR,左对齐→0010 0100
ADC0CN=0x80;//→1000 0000
}
main( )
{
PCA0MD &= ~0x40;// 关狗
sysclk();
pio();
pwm123() ;
AD();
a4=1;//电机转向
a5=0;
while(1)
{
AD0BUSY=0;
AD0BUSY=1;
PCA0CPH0=ADC0H;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -