|
|
本帖最后由 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; //相應(yīng)角度對(duì)應(yīng)的脈沖數(shù)量
unsigned int CLK_OUT_NUM = 0; // 脈沖計(jì)數(shù)
signed int MotorSpedNum = 0; // 速度檔
float CUR_MotorAngle = 0.0; // 當(dāng)前角度
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); //延時(shí)函數(shù)
void T0_Init();
unsigned char Recive();
void SecondPro();
// 串口接收主程序
void main(void)
{
unsigned char lsData = 0;
T0_Init(); // 定時(shí)器0 1 初始化
MotorEn = 0; // 使能關(guān)閉
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) // 角度目標(biāo)達(dá)到
{
END_FLAG = 0; // 清
g_MotorSt = 0; // 電機(jī)關(guān)閉標(biāo)志
MotorEn = 0;
}
else
{
TR0 = 1; //開(kāi)啟定時(shí)器
g_MotorSt = 1;//開(kāi)電機(jī)
MotorEn = 1; //電機(jī)使能
}
}
/********定時(shí)器初始化***********************************************************/
void T0_Init()
{
TMOD = 0x21; //定時(shí)器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;
}
/********定時(shí)器中斷*****************/
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) // 達(dá)到角度目標(biāo)
{
CLK_OUT_NUM = 0; // 脈沖清空
TR0 = 0; // 關(guān)閉定時(shí)器
END_FLAG = 1; // 目標(biāo)達(dá)到標(biāo)志
}
}
}
/********延時(shí)函數(shù)***********************************************************/
void delayms(xms)
{
unsigned int x,y;
for(x=xms;x>0;x--)
for(y=110;y>0;y--)
;
}
|
|