?? a-d轉換之電位器控制電機-差分.txt
字號:
#include <c8051f310.h>
#include <stdio.h>
#include <math.h>
#include <Intrins.h>
#include <absacc.h>
sbit a4=P0^4; //P0.4給定左右輪方向
sbit a5=P0^5; //PWM輸出
unsigned j,k,m;
void pwm1_1(void) //PWM的初始化
{
PCA0MD &= ~0x40;
PCA0CN=0x40; //允許PCA工作
PCA0MD=0x02; //PCA時鐘為4分頻
PCA0CPM0=0x42; //設置左輪為8為PWM輸出
PCA0CPH0=0;
}
unsigned L;
void pio(void)
{
P0MDIN=0xFF;//全為數字輸入→1111 1111
P0MDOUT=0xEF; //P0.4控轉向要驅動能力強選擇開漏置0;P0.5控制轉速就選擇開關能力強更好些置1→1110 1111
P0SKIP=0xDF;//不跳過P0.5,因為它是控制轉速,要給CEX0功能留著→1101 1111
P1MDIN=0xEF; //P1.4接電位器,隨時控制轉速大小,為模擬輸入→1110 1111
P1MDOUT=0xEF; //0為開漏,1為推挽,我覺得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=0x0D;
REF0CN=0x00;//選擇基準電壓→0000 0000
ADC0CF=0x24;//2M SAR,左對齊→0010 0100
ADC0CN=0x80;//→1000 0000
ADC0H=0xff;//左對齊用ADC0H
}
main( )
{
PCA0MD &= ~0x40;// 關狗
sysclk();
pio();
pwm1_1() ;
AD();
a4=1;//電機轉向
a5=0;
while(1)
{
AD0BUSY=0;
AD0BUSY=1;
if((ADC0H>0)&(ADC0H<127))
{
a4=0;
L=ADC0H;L=L*2;L=256-L;
PCA0CPH0=L;
}
else
{
a4=1;
L=ADC0H;L=(256-L);
L=L*2;L=256-L;
PCA0CPH0=L;
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -