📄 main.c
字号:
/****************************************************************************
10m晶振,定时器T1进行8分频,即定时器的指令周期为0.8us
时间: 0.5ms 1.5ms 2.5ms
十进制: 625 1875 3125
十六进制: 271 753 C35
****************************************************************************/
#include"2407regs.h"
#include<stdlib.h>
extern int ad,mode,on_off,adflag,swimmode[20],swimtime; //mode,速度模式,on_off,遥控开关
int adresult; //读取AD转换的结果
char receive[10]; //读取无线通讯的结果
int flag; //无线通讯的一个指令是否接收完毕
int workup,workdown,times; //workup,workdown,丝杠电机的前后运动,times用来作在只有前方有障碍时左转弯的记数
char order,getorder; //无线通讯接收到的指令
int m,count=0,j=0,test=0,which;//which,用来标记是无线通讯还是红外模式
void interrupt sci(){
switch(PIVR){
case 0x6:
{
receive[j]=SCIRXBUF;
if(j==9) {j=0;flag=1;}
else j++;
}break;
case 0x7:break;
}
IFR=0x0010; //清除IFR中相应的中断标志
enable(); //开总中断(因为当进入中断服务程序时总中断就会自动关闭)
}
//检测无线通讯接收到的命令
int scicheck(char * p)
{
int i=0;
for(i=0;i<10;i++)
{
if(*(p+i)!='F' )
continue;
else
if(*(p+i+1)=='I' && *(p+i+2)=='S' && *(p+i+3)=='H')
{
switch(*(p+i+4))
{
case 'S': for(i=0;i<10;i++) *(p+i)=0;return('S'); //停止
case 's': for(i=0;i<10;i++) *(p+i)=0;return('s'); //复位
case 'I': for(i=0;i<10;i++) *(p+i)=0;return('I'); //待机
case 'F': for(i=0;i<10;i++) *(p+i)=0;return('F'); //前进,摆幅较大,快
case 'Q': for(i=0;i<10;i++) *(p+i)=0;return('Q'); //前进,摆幅较小,快
case 'R': for(i=0;i<10;i++) *(p+i)=0;return('R'); //右转快
case 'L': for(i=0;i<10;i++) *(p+i)=0;return('L'); //左转快
case 'f': for(i=0;i<10;i++) *(p+i)=0;return('f'); //前进,摆幅较大,快
case 'q': for(i=0;i<10;i++) *(p+i)=0;return('q'); //前进,摆幅较小,慢
case 'r': for(i=0;i<10;i++) *(p+i)=0;return('r'); //右转慢
case 'l': for(i=0;i<10;i++) *(p+i)=0;return('l'); //左转慢
case 'U': for(i=0;i<10;i++) *(p+i)=0;return('U'); //上浮
case 'D': for(i=0;i<10;i++) *(p+i)=0;return('D'); //下沉
default:for(i=0;i<10;i++) *(p+i)=0;return('\000');
}//switch
}//else if
}//for
}
void main(){
initial();
sciinitial();
timerinitial();
adinitial();
WSGR=0x00; // 禁止I/O引脚等待
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -