金牌会员
- 积分
- 1683
- 金钱
- 1683
- 注册时间
- 2012-10-28
- 在线时间
- 62 小时
|
多谢了!麻烦看下.
#include <reg52.h>
#include<stdio.h>
#include<INTRINS.H>
#define Uchar unsigned char
#define Uint unsigned int
//sfr P4= 0xc0;
//sfr P4SW =0Xfe;
sbit LEFTEND=P2^2;//水平方向到达终点 为0是到了位置
sbit RIGHTEND=P2^3;//水平方向到达终点
sbit UPEND=P2^0;//向上走到了终点
sbit DOWNEND=P2^1;//向下走到了终点
sbit M1Switch=P0^0; //为0是工作
sbit M2Switch=P0^1;
sbit M3Switch=P0^2; //为0是工作
sbit M4Switch=P0^3;
sbit J1Switch=P0^4; //为0是工作
sbit J2Switch=P0^5; // 为0是工作
sbit  B2 = P1^2; //遥控器输入 0工作
sbit  B3 = P1^3; //遥控器输入 0工作
sbit  B1 = P1^1; //遥控器输入 0工作
sbit  B0 = P1^0; //遥控器输入 0工作
sbit RX = P3^0;
sbit TX = P3^1;
Uchar right, left, up, down;
Uchar SHUIPINGPOINTER;
Uchar SHUZHIPOINTER;
Uchar P0BUF;
Uint ZIJIANNUM=800;//
Uint RIGHTNUM;//自检时用来计算右转了几步
Uint DOWNNUM;//自检时用来计下转了几步
Uint SHUIPINGNUM;//水平方向所走的步数
Uint SHUZHINUM;//竖直方向所走的步数
Uint SHUIPINGSET;//水平方向应该走到的位置
Uint SHUZHISET;//竖直方向应该走到的位置
Uint SHUIPINGTOTALNUM;//5800
Uint SHUZHITOTALNUM;//2200
Uchar header_D;
Uchar Pelco_D[7] = {0,0,0,0,0,0,0};
void Delay(Uint Num) //延时
{
Uchar i,j;
while(--Num)
for(j=0;j<2;j++)
for(i=0;i<4;i++);
}
void main()
{
Uchar a;
 1=0Xff; //所有的繼電器不工作
 2=0XFF;
 3=0X00;
 0=0X00;
SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80;
TH1 = 0xfa; //波特率9600、数据位8、停止位1。效验位无 (11.0592M)
TL1 = 0xfa;
TR1 = 1;
ES = 1; //开串口中断
EA = 1; // 开总中断
while(1)
{
 0=0X00;
a=P1&0X0F;
if(  elco_D[2]==0X00&&Pelco_D[3]==0X0B&&Pelco_D[4]==0X00&&Pelco_D[5]==0X02&&Pelco_D[6]==0X0E) //右转
{
//灯光 FF 01 00 0B 00 02 0E
//FF 01 00 09 00 02 0C
J2Switch = 1;
Delay(5);
if( Pelco_D[2]==0X00&&Pelco_D[3]==0X09&&Pelco_D[4]==0X00&&Pelco_D[5]==0X02&&Pelco_D[6]==0X0C)//停止工作
{
J2Switch = 0;
}
}
if( Pelco_D[2]==0X00&&Pelco_D[3]==0X04&&Pelco_D[4]==0X3F&&Pelco_D[5]==0X00&&Pelco_D[6]==0X04) //右转
{
M1Switch = 1;
M2Switch = 0;
Delay(5);
if( Pelco_D[2]==0X00&&Pelco_D[3]==0X00&&Pelco_D[4]==0X00&&Pelco_D[5]==0X00&&Pelco_D[6]==0X01)//不工作
{
M1Switch = 0;
M2Switch = 0;
}
//FF 01 00 04 3F 00 44
//FF 01 00 00 00 00 01
}
}
}
void ser_int (void) interrupt 4 using 1
{
Uchar i;
if(RI == 1) //RI接受中断标志
{
for (i = 0; i<7; i++)//接收7次
{
Pelco_D= SBUF;
Delay(1);
if(i>=7)i=0;
}
RI = 0; //清除RI接受中断标志
}
}
用485控制马达和灯,怎么控制啊,用的派尔高协议,头大啊.多谢了........
|
|