|
以下代碼有部分定義未用到,請大家?guī)臀铱纯礊槭裁窗凑毡壤艘詫?yīng)的細(xì)分后的單位脈沖,得到的角度不是自己設(shè)定的,也就是最終的脈沖數(shù)不正確,無法精確控制角度,是什么原因呀。
- #include <reg52.h>
- sbit led=P0;
- //--------定義使用的IO口---------//
- sbit PWM=P1^0; //脈沖輸出
- sbit key_run=P1^4; //啟動
- sbit led_run=P0^0; //運(yùn)行l(wèi)ed指示燈
- sbit led_d=P0^3; //數(shù)據(jù)是否相同檢測
- sbit led1=P0^4; //接收串口數(shù)據(jù)測試燈
- //-------定義全局變量--------//
- unsigned char pwm_duty=0,adc=0;
- unsigned char receiveData=0;
- void Turn_the_Setting_Angle(unsigned int dat);
- void TimeConfig();
- void delay(unsigned int c);//延時(shí)函數(shù)
- void main(void)
- {
- TimeConfig();
- led_d=0;
- led1=0;
- while(1)
- {
-
- if(adc==1) //P0.4口測試數(shù)據(jù)led/接收數(shù)據(jù)閃爍
- {
- led1=1;
- adc=0;
- }
- Turn_the_Setting_Angle((unsigned int)(receiveData));//來自串口發(fā)來的數(shù)據(jù)
- receiveData=0;
- delay(1000);
- led1=0;
- }
- }
- void TimeConfig()
- {
- EA = 0;
- //***********串口時(shí)鐘設(shè)置************//
- TCLK=1;//串口設(shè)置時(shí)鐘為定時(shí)器2
- RCLK=1;
- TH2=0xFF; //9600bps 11.0592MHz的時(shí)鐘頻率
- TL2=0xDB;
- RCAP2H=0xFF; //方式1和方式3的波特率=fosc/(32*(65535-(RCAP2H,RCAP2L))
- RCAP2L=0xDB;
- SCON=0x50;//SM0? SM1? SM2? REN? TB8 RB8? TI RI
- PCON &= 0x7F; //sMOD=0;
- ET2=1;
- ES=1;
- EA = 1;
- TR2=1;
- }
- //**************串口延時(shí)函數(shù)************//
- void Usart() interrupt 4
- {
- adc=1;
- receiveData=SBUF; //出去接收到的數(shù)據(jù)
- if(receiveData==0x02)//判斷是否接收到相同數(shù)據(jù)
- led_d=1;
- else
- led_d=0;
- RI = 0; //清除接收中斷標(biāo)志位
- SBUF=receiveData; //將接收到的數(shù)據(jù)放入到發(fā)送寄存器
- while(!TI); //等待發(fā)送數(shù)據(jù)完成
- TI=0; //清除發(fā)送完成標(biāo)志位
- }
- //********************讓電機(jī)轉(zhuǎn)到設(shè)定的角度***********************//
- //***************************************************************//
- //dat為設(shè)定角度
- void Turn_the_Setting_Angle(unsigned int dat)
- {
- float i=2.222,j; // 細(xì)分開關(guān)配置 800/360=2.222 200/360=0.555 1600/360=4.44 3200/360=8.888 6400/360=17.778
- unsigned int Pulse_number; // Pulse_number為脈沖數(shù)
- j=dat*i;
- // j=dat/1.8; //200脈沖時(shí)對應(yīng)的步距角1.8,無細(xì)分
- // Pulse_number= (unsigned int)(j);
- Pulse_number= (unsigned int)(j*1.412); //1.412為上位機(jī)發(fā)來的16進(jìn)制數(shù)轉(zhuǎn)換為對應(yīng)比例角度
- while(Pulse_number)
- {
- PWM=0;
- delay(20);
- PWM=1;
- delay(20);
- Pulse_number=Pulse_number-1;
- }
- }
- void delay(unsigned int x) //延時(shí)1ms
- {
- unsigned int i,j;
- for(i=x;i>0;i--)
- {
- for(j=110;j>0;j--) ;
- }
- }
復(fù)制代碼
|
評分
-
查看全部評分
|