欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 4440|回復: 2
收起左側

89c51控制42步進電機轉動一定角度,轉動角度不對,求指教!!!

[復制鏈接]
回帖獎勵 10 黑幣 回復本帖可獲得 10 黑幣獎勵! 每人限 1 次
ID:255195 發表于 2017-11-29 14:53 | 顯示全部樓層 |閱讀模式
本帖最后由 suellasun 于 2017-11-29 14:56 編輯

#include<reg51.h>
#define MotorTabNum 5
unsigned char T0_NUM;
unsigned char END_FLAG = 0;

sbit MotorEn = P2^1;     // 使能
sbit FX = P2^0;          // 方向
sbit CLK = P2^2;         // 脈沖
unsigned char g_MotorSt = 0;     // 啟停
unsigned char g_MotorDir = 0;    // 正反
unsigned int SET_MotorPulse = 0;  //相應角度對應的脈沖數量
unsigned int CLK_OUT_NUM = 0;  // 脈沖計數
signed int MotorSpedNum = 0;      // 速度檔
float CUR_MotorAngle = 0.0;   // 當前角度
int MotorAngle;      
unsigned char MotorTab[6] = {12, 10, 8, 6, 4, 2};

signed char g_MotorNum = 0;
//--------------
void delayms(xms);
void mDelay(unsigned int DelayTime);  //延時函數
void T0_Init();
unsigned char Recive();
void SecondPro();
// 串口接收主程序
void main(void)
{
unsigned char lsData = 0;
T0_Init();      // 定時器0 1 初始化
MotorEn = 0;     // 使能關閉
FX = 0;          // 方向
while(1)
{
  lsData = Recive();
  if(lsData == 'A')      
  {
   MotorAngle=90;
   SET_MotorPulse=(unsigned int)((MotorAngle/0.9)*8.0);
   SecondPro();  
  }
}
}
void SecondPro()
{
if (END_FLAG)   // 角度目標達到
{
  END_FLAG = 0; // 清
  g_MotorSt = 0; // 電機關閉標志
  MotorEn = 0;
}
else
{
  TR0 = 1; //開啟定時器
  g_MotorSt = 1;//開電機
  MotorEn = 1;  //電機使能
}
}

/********定時器初始化***********************************************************/

void T0_Init()
{
TMOD = 0x21;   //定時器0 1
SCON |= 0x50;
PCON |= 0x00;
TH0 = (65535-100)/256;  // 1ms
TL0 = (65535-100)%256;
TH1 = 0xf3;    // 12MHZ    2400波特率
TL1 = 0xf3;
EA = 1;
ET0 = 1;
TR1 = 1;
REN = 1;
}  
void Timer0_Init()    ////////
{
TMOD = 0x20;
SCON = 0x50;
PCON = 0x00;
TH1 = 0xf3;    // 12MHZ    2400波特率
TL0 = 0xf3;
TR1 = 1;
REN = 1;
}
unsigned char Recive()   // 串口接收程序
{
unsigned char  date;
while(RI == 0);
  RI = 0;
date = SBUF;
return date;
}
/********定時器中斷*****************/
void T0_time() interrupt 1
{
TH0 = (65535-100)/256;   
TL0 = (65535-100)%256;
T0_NUM++;
if(T0_NUM >= MotorTab[g_MotorNum]) // 增加按鍵g_MotorNum++   減小按鍵g_MotorNum--
{
  T0_NUM = 0;
  CLK=CLK^0x01;        //   輸出脈沖
  CLK_OUT_NUM++;  
  if(CLK_OUT_NUM >= SET_MotorPulse) // 達到角度目標
  {
   CLK_OUT_NUM = 0;       // 脈沖清空
   TR0 = 0;               // 關閉定時器
   END_FLAG = 1;          // 目標達到標志
  }
}
}  
/********延時函數***********************************************************/
void delayms(xms)
{
  unsigned int x,y;
  for(x=xms;x>0;x--)
   for(y=110;y>0;y--)
   ;
}

回復

使用道具 舉報

ID:74784 發表于 2017-11-29 22:31 | 顯示全部樓層
很想幫你
可惜看不懂C語言
回復

使用道具 舉報

ID:661664 發表于 2019-12-26 10:35 | 顯示全部樓層
樓主怎么解決的啊
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表