📄 yalibiao.c
字号:
//#include<reg51.h>
#include<NI51REG.h>
//#define THISADDR 0x2A
#define ISP_WAIT 0x03
#define ISP_READ 1
#define ISP_WRITE 2
#define ISP_ERASE 3
bit pulse_sign = 0;//pulse level sign
bit NewCmd_sign = 1;
bit TrStar_sign = 0;//transport start
bit De = 0;
unsigned char TIMH = 0xfd;
unsigned char TIML = 0xff;
unsigned char THISADDR = 0x2A;
unsigned char TrCounter = 0;
unsigned char TrData[5] = 0;
unsigned char AimData[5] = 0;
unsigned char mode = 0;
unsigned long Delay_num;
unsigned int Change_P;
unsigned int Aim_P;
unsigned int Time_D;
unsigned int Now_P;
unsigned int Dis_P;
unsigned long Time;
unsigned int T = 9;
unsigned int MINPOS = 0xFB10;
unsigned int T2;
sbit out = P1^2;
void pulse() interrupt 1
{
if(pulse_sign)
{
pulse_sign = 0;
out = 0;
TH0 = 0xc7;
TL0 = 0x00;
}
else
{
pulse_sign = 1;
out = 1;
TH0 = TIMH;
TL0 = TIML;
}
}
void serial() interrupt 4
{
//unsigned char i;
if(RI)
{
RI = 0;
if((!TrStar_sign)&&(SBUF == 0x0c))
{
TrStar_sign = 1;
TrCounter = 0;
}
else if(TrStar_sign)
{
if(TrCounter < 5)
{
TrData[TrCounter] = SBUF;
TrCounter++;
}
else if(SBUF == 0xbb)
{
if(TrData[0] == THISADDR)
{
AimData[0] = TrData[0];
AimData[1] = TrData[1];
AimData[2] = TrData[2];
AimData[3] = TrData[3];
AimData[4] = TrData[4];
NewCmd_sign = 1;
TrCounter++;
}
TrCounter = 0;
TrStar_sign = 0;
}
}
}
}
unsigned char isp_read(unsigned int addr)
{
unsigned char nop;
ISP_ADDRH = (addr >> 8);
ISP_ADDRL = (addr & 0x00ff);
EA = 0;
ISP_CONTR = ISP_WAIT;
ISP_CONTR |= 0x80;
ISP_CMD = ISP_READ;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
nop = 1;
ISP_CONTR = 0x00;
ISP_CMD = 0x0;
ISP_TRIG = 0x0;
ISP_ADDRH = 0x0;
ISP_ADDRL = 0x0;
EA = 1;
return ISP_DATA;
}
void isp_erase(unsigned int addr)
{
unsigned char nop;
ISP_ADDRH = (addr >> 8);
ISP_ADDRL = (addr & 0x00ff);
EA = 0;
ISP_CONTR = ISP_WAIT;
ISP_CONTR |= 0x80;
ISP_CMD = ISP_ERASE;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
nop = 1;
ISP_CONTR = 0x00;
ISP_CMD = 0x0;
ISP_TRIG = 0x0;
ISP_ADDRH = 0x0;
ISP_ADDRL = 0x0;
EA = 1;
}
void isp_write(unsigned int addr,unsigned char dat)
{
unsigned char nop;
ISP_DATA = dat;
ISP_ADDRH = (addr >> 8);
ISP_ADDRL = (addr & 0x00ff);
EA = 0;
ISP_CONTR = ISP_WAIT;
ISP_CONTR |= 0x80;
ISP_CMD = ISP_WRITE;
ISP_TRIG = 0x46;
ISP_TRIG = 0xb9;
nop = 1;//无意义 延时操作
ISP_CONTR = 0x00;
ISP_CMD = 0x0;
ISP_TRIG = 0x0;
ISP_ADDRH = 0x0;
ISP_ADDRL = 0x0;
EA = 1;
}
void delay(unsigned int kk)
{
unsigned int t1,t2;
for (t1 = 0;t1<60;t1++)
{
for(t2 = 0;t2 < kk;t2++);
}
}
run()
{ unsigned int T1;
if (De)
{
for (T1 = Now_P; T1<=Aim_P; ++T1 )
{
if(!NewCmd_sign)
{
delay(Delay_num);
T2 = (0xfdff - MINPOS)*5;
T2 /= 27;
Change_P = 0xfdff - (T1*T2)/50;
TIMH = Change_P>>8;
TIML = Change_P&0x00ff;
}
else
{
Now_P = T1;
return(0);
}
Now_P = T1;
}
}
else
{
for (T1 = Now_P; T1 > Aim_P; --T1 )
{
if(!NewCmd_sign)
{
delay(Delay_num);
T2 = (0xfdff - MINPOS)*5;
T2 /= 27;
Change_P = 0xfdff - (T1*T2)/50;
TIMH = Change_P>>8;
TIML = Change_P&0x00ff;
}
else
{
Now_P = T1;
return(0);
}
Now_P = T1;
}
}
}
test_mode()
{
Delay_num = ;
while(1)
{
if(!NewCmd_sign)
{
Aim_P = (De)?0x10E:0x00;
Now_P = (De)?0x00:0x10E;
run();
De = ~De;
}
else
return(0);
}
}
shake_mode()
{
Delay_num = 5;
while(1)
{
if(!NewCmd_sign)
{
Aim_P = (De)?(Aim_P+10):(Aim_P-10);
Now_P = (De)?(Aim_P-10):(Aim_P+10);
run();
De = ~De;
}
else
return(0);
}
}
use_mode()
{
Aim_P = ((unsigned int)(AimData[2])<<8)+AimData[3];
Time_D = AimData[4];
if (Aim_P > Now_P)
{
Dis_P = Aim_P - Now_P;
De = 1;
}
else
{
Dis_P = Now_P - Aim_P;
De = 0;
}
Time = (Time_D*1000)/Dis_P;
Delay_num = Time*T;
run();
return(0);
}
int main()
{ AUXR &= 0x1f;
SCON = 0x50;
TMOD = 0x21;
IE = 0x92;
TH0 = 0xfc;
TL0 = 0x00;
TH1 = 0xfa;
TL1 = 0xfa;
out = 1;
TrStar_sign = 0;
pulse_sign = 1;
MINPOS = (int)(isp_read(0x1000)<<8)+(int)(isp_read(0x1001));
if(MINPOS == 0x0000)
{
MINPOS = 0xfb10;
}
THISADDR = isp_read(0x1200);
if((THISADDR == 0xff)||(THISADDR == 0x0))
{
THISADDR = 0x2A;
}
//AimData[0] = THISADDR;
AimData[1] = 0x01;
//AimData[2] = 0x00;
//AimData[3] = 0x5A;
//AimData[4] = 0x10;
mode = 0x01;
TR0 = 1;
TR1 = 1;
NewCmd_sign =1;
while(1)
{
if(NewCmd_sign)
{
NewCmd_sign = 0;
mode = AimData[1];
if(mode == 0x01)
{
test_mode();
}
else if(mode == 0x02)
{
shake_mode();
}
else if(mode == 0x03)
{
use_mode();
}
else if(mode == 0x04)
{
isp_erase(0x1000);
isp_write(0x1000,AimData[2]);
isp_write(0x1001,AimData[3]);
MINPOS = (int)(AimData[2]<<8)+(int)(AimData[3]);
}
else if(mode == 0x05)
{
isp_erase(0x1200);
isp_write(0x1200,AimData[2]);
THISADDR = AimData[2];
}
else
{ //return(0) ;
}
}
else
{
//return (0);
}
}
return (0);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -