?? zhjbjdj1.c
字號:
/*旋轉適粘度計步進電機驅動程序晶振24MHZ*/
#include <at89x51.h>
#include <absacc.h>
#include <intrins.h>
#define DA1 XBYTE[0x8000]//定義硬件地址
#define DA2 XBYTE[0x8100]
#define LEVEL1 XBYTE[0x8200]
#define LEVEL2 XBYTE[0x8300]
unsigned char Command=0,Command_up,Step_Num=0,Speed=0,Addr=4,Start_f=0,Start_stepnum=2,Start_steptimes=10;
unsigned char Iasuffix=0,Ibsuffix=0;TimeH=0,TimeL=0;
unsigned char code IAB[256]={0,3,6,9,12,16,19,22,25,28,31,34,37,40,43,46
,49,51,54,57,60,63,65,68,71,73,76,78,81,83,85,88,90,92,94,96,98,100,102
,104,106,107,109,111,112,113,115,116,117,118,120,121,122,122,123,124,125
,125,126,126,126,127,127,127,127,127,127,127,126,126,126,125,125,124,123
,122,122,121,120,118,117,116,115,113,112,111,109,107,106,104,102,100,98
,96,94,92,90,88,85,83,81,78,76,73,71,68,65,63,60,57,54,51,49,46,43,40,37
,34,31,28,25,22,19,16,12,9,6,3,0,131,134,137,140,144,147,150,153,156,159
,162,165,168,171,174,177,179,182,185,188,191,193,196,199,201,204,206,209
,211,213,216,218,220,222,224,226,228,230,232,234,235,237,239,240,241,243
,244,245,246,248,249,250,250,251,252,253,253,254,254,254,255,255,255,255
,255,255,255,254,254,254,253,253,252,251,250,250,249,248,246,245,244,243
,241,240,239,237,235,234,232,230,228,226,224,222,220,218,216,213,211,209
,206,204,201,199,196,193,191,188,185,182,179,177,174,171,168,165,162,159
,156,153,150,147,144,140,137,134,131};
void init(void)
{
TMOD|=0x21;//初始化T1及串口,波特率9600,24M時鐘
SCON=0xf0;//T1為16位計數器
PCON|=0x80;
TH1=0xf3;
TL1=0xf3;
TR1=1;
TR0=0;
ES=1;
ET0=1;
EA=1;
//RI=0;
//TI=0;
}
void servial(void) interrupt 4 using 3
{
if (RI==1)
{
RI=0;
if (SM2==1&&SBUF==Addr)
{SM2=0;TB8=1;SBUF=Addr;
while (TI!=1);
TI=0;
}
else
{if(SM2==0&&SBUF==0xff&&RB8==1) SM2=1;
else if (SM2==0&&RB8==0)
{Command=SBUF;
TB8=1;
SBUF=Command;
if (Command>=1&&Command<=18)TR0=0;
while (TI!=1);
TI=0;
}
}
}
}
void time0(void) interrupt 1 using 1
{
TH0=TimeH;
TL0=TimeL;
TR0=1;
Command=32;
}
main()
{
init();
while(1)
switch(Command)
{
case 0:
LEVEL1=0xff;
_nop_();_nop_();
LEVEL2=0xff;
_nop_();_nop_();
DA1=0x00;
_nop_();_nop_();
DA2=0x00;
Iasuffix=0;
Ibsuffix=64;
Start_f=0;
Command=88;
break;
case 1:
Step_Num=1;
TimeH=0xc2;
TimeL=0xf6;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 2:
Step_Num=1;
TimeH=0xDB;
TimeL=0x60;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 3:
Step_Num=1;
TimeH=0xe1;
TimeL=0x7a;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 4:
Step_Num=1;
TimeH=0xed;
TimeL=0xaf;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 5:
Step_Num=1;
TimeH=0xf3;
TimeL=0xca;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 6:
Step_Num=4;
TimeH=0xdb;
TimeL=0x60;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 7:
Step_Num=4;
TimeH=0xe2;
TimeL=0xb3;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 8:
Step_Num=4;
TimeH=0xe5;
TimeL=0x97;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 9:
Step_Num=4;
TimeH=0xed;
TimeL=0xaf;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 10:
Step_Num=4;
TimeH=0xf1;
TimeL=0x59;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 11:
Step_Num=16;
TimeH=0xcf;
TimeL=0x2b;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 12:
Step_Num=16;
TimeH=0xe2;
TimeL=0xb3;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 13:
Step_Num=16;
TimeH=0xe7;
TimeL=0x95;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 14:
Step_Num=16;
TimeH=0xf1;
TimeL=0x59;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 15:
Step_Num=16;
TimeH=0xf6;
TimeL=0x3b;
TH0=TimeH;
TL0=TimeL;
Command=88;
break;
case 16:
Step_Num=32;
TimeH=0xf4;
TimeL=0x47;
TH0=TimeH;
TL0=TimeL;
Start_f=1;
Command=88;
break;
case 17:
Step_Num=32;
TimeH=0xf6;
TimeL=0x3b;
TH0=TimeH;
TL0=TimeL;
Start_f=1;
Command=88;
break;
case 18:
Step_Num=32;
TimeH=0xfa;
TimeL=0x23;
TH0=TimeH;
TL0=TimeL;
Start_f=1;
Command=88;
break;
case 30://開始運轉命令
Iasuffix=0;
Ibsuffix=64;
TR0=1;
Command=88;
break;
case 31://停止運轉命令
TR0=0;
Command=0;
break;
case 32://運轉
if (Start_f==1) {Command=33;break;}
DA1=IAB[Iasuffix];
DA2=IAB[Ibsuffix];
Iasuffix+=Step_Num;
Ibsuffix+=Step_Num;
//if (Iasuffix>255)Iasuffix=0;
//if (Ibsuffix>255)Ibsuffix=0;
Command=88;
break;
case 33://啟動曲線
DA1=IAB[Iasuffix];
DA2=IAB[Ibsuffix];
Iasuffix+=Start_stepnum;
Ibsuffix+=Start_stepnum;
//if (Iasuffix>255)Iasuffix=0;//Iasuffix Ibsuffix為8位
//if (Ibsuffix>255)Ibsuffix=0;
Start_steptimes--;
if (Start_steptimes<=0)
{Start_steptimes=10;Start_stepnum=Start_stepnum*2;}
if (Start_stepnum==32) Start_f=0;
Command=88;
break;
case 88:
break;
default:
break;
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -