📄 main0.c
字号:
#include <reg51.h>
#define XTAL 22118400
#define baudrate 9600
#define INLEN 5
sbit cpulamp=P3^7; //CPU灯控制
bit newnum; //有新的数据标识
bit key; //调试用***
char inbuf[INLEN];
char getbuf[INLEN];
char buf_sit;
int angel_gd;
int angel_fw;
/*串口接收程序*/
static void comm_get (void) interrupt 4 using 1
{
char i;
inbuf[buf_sit++]=SBUF;
RI=0;
newnum=1;
if(buf_sit>=5)
{
buf_sit=0;
newnum=1;
for(i=0;i<INLEN;i++)getbuf[i]=inbuf[i];
}
}
/*初始化串行口*/
void ini_comm (void)
{
buf_sit=0;
newnum=0;
PCON|=0x80;
TMOD|=0x20;
TH1=(unsigned char)(256-(XTAL/(16L*12L*baudrate)));
TR1=1;
SCON=0x50;
ES=1;
}
/* 初始化定时器0*/
void ini_time(void)
{
cpulamp=1;
TMOD&=0xF0;
TMOD|=0x01;
ET0=1;
TR0=1;
}
/*定时器中断程序*/
time0() interrupt 1 using 2
{
cpulamp=!cpulamp;
TH0=0;
TL0=0;
}
/****调试用外部中断****/
void ex0_int() interrupt 0 using 3
{
if(key==0)
{
angel_gd=200;
angel_fw=200;
}
else
{
angel_gd=-200;
angel_fw=-200;
}
key=!key;
}
/*主程序*/
main()
{
char temp;
char i;
unsigned char p1_img;
EA=1;
/*调试用程序*/
EX0=1;
angel_gd=0;
angel_fw=0;
ini_time();
ini_comm();
p1_img=0x20;
P1=p1_img; //给电机解锁,初始化
do
{
if(newnum) //如果有新的接收数据
{
newnum=0;
temp=0;
for(i=0;i<INLEN-1;i++) //求校验和
{
temp+=getbuf[i];
}
if(temp==getbuf[INLEN-1]) //如果校验正确,取出高低方位角
{
angel_gd=getbuf[0];
angel_gd=angel_gd<<8;
angel_gd=angel_gd+getbuf[1];
angel_fw=getbuf[2];
angel_fw=angel_fw<<8;
angel_fw=angel_fw+getbuf[3];
if(angel_gd<0);
{
angel_gd&=0x7f;
angel_gd=~angel_gd;
angel_gd++;
}
if(angel_fw<0)
{
angel_fw&=0x7f;
angel_fw=~angel_fw;
angel_fw++;
}
angel_gd*=6;
angel_fw*=6;
}
}
if(angel_gd!=0||angel_fw!=0) //驱动电机
{
p1_img&=0xde; //打开电机开关;两电机同时打开
P1=p1_img;
if(angel_gd>0)
{
p1_img|=0x06;
angel_gd--;
}
if(angel_gd<0)
{
p1_img&=0xfd;
p1_img|=0x04;
angel_gd++;
}
if(angel_fw>0)
{
p1_img|=0x18;
angel_fw--;
}
if(angel_fw<0)
{
p1_img&=0xef;
p1_img|=0x08;
angel_gd++;
}
P1=p1_img;
for(i=0;i<75;i++) //延时,大约0.3ms
{;}
p1_img&=0xf3;
P1=p1_img;
for(i=0;i<30;i++) //延时,大约0.12ms
{;}
p1_img&=0x21;
P1=p1_img; //关电机
}
}while(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -