📄 main.c
字号:
#include "common.h"
#include "config.h"
#include "timer.h"
#include "pca.h"
#include "findline.h"
#include "bizhang.h"
#define T3RUN temppage=SFRPAGE;SFRPAGE=0x01;TR3=1;SFRPAGE=temppage
#define T4RUN temppage=SFRPAGE;SFRPAGE=0x02;TR4=1;SFRPAGE=temppage
#define T4STOP temppage=SFRPAGE;SFRPAGE=0x02;TR4=0;SFRPAGE=temppage
#define T3STOP temppage=SFRPAGE;SFRPAGE=0x01;TR3=0;SFRPAGE=temppage
#define S TMR4 //S为路程计数值
/*定时器2。3。4寄存器和定时器2。3。4捕捉寄存器字声明*/
sfr16 RCAP2=0xca;
sfr16 RCAP3=0xca;
sfr16 RCAP4=0xca;
sfr16 TMR4=0xcc;
sfr16 TMR3=0xcc;
sfr16 TMR2=0xcc;
uchar temp;
uchar temp1;
uchar temp3;
uchar k; //避障接收次数计数
uchar ir[8];
uchar int0_count;
uchar temppage;
uchar tiepiancount=0x00;
bit c_flag; //到达C标志,1到达,0未到达
xdata uint s[6]; //16位
void delay1ms(uint time){//延迟1ms
uint i;
uint j;
for (i=0;i<time;i++){
for(j=0;j<300;j++);
}
}
void ring() //测试用的报警蜂鸣器程序,低电平报警
{
temppage=SFRPAGE;
SFRPAGE=0X0F;
P4_7=0;
delay_ms(1);
P4_7=1;
delay_ms(1);
SFRPAGE=temppage;
}
void ringl() //测试用的报警蜂鸣器程序,低电平报警
{
temppage=SFRPAGE;
SFRPAGE=0X0F;
P4_7=0;
delay_ms(25);
P4_7=1;
delay_ms(25);
SFRPAGE=temppage;
}
void main(void) //90s计时成功,40K方波成功,路程计数成功,金属探测成功8。20
{
config();
EA=1;
IE|=0x01; //开外部中断0
// t1_count_ini();
//t2_time90s_ini();
//t2_time90s_start(); //开始90计时
// t4_count_ini();//开始计路程,*/
// t3_ini();
//t3_fre_set(100);
//t3_fre_set40k();
// T3RUN;
//t0_ini();
pca_ini();
go_forward();
while(1);
/*hile(1) //寻迹
{
if(c_flag) //是否到达C点
break; //到达C点
else
findline(); //未到达C点
}*/
/*while(1)
{stop();
delay1ms(5000); //致达C点,停车5S
/*while(1)
{
if(S<0XFFFF) //是否越过障碍区,
{
//bizhang_tr();
bizhang_isr();
}
else
break;
}*/
}
void int0_isr() interrupt 0
{
EA=0;
//int0_count++;
//if(int0_count>=2) //450ms内有两次以上反射,则认为有障碍物,进行避障
//bizhang_isr();
//else
EA=1;
}
void T0_isr() interrupt 1
{
EA=0;
TH0 = 0x90; //定时器赋初值
TL0 = 0x0a;
int0_count=0; //450ms清零
EA=1;
}
void t2ISR() interrupt 5
{ //T2定时溢出处理,计数351次后停车90s
EA=0;
temppage=SFRPAGE;
SFRPAGE=0X00;
TF2=0;
ET2=0;
SFRPAGE=temppage;
t2count++;
if(t2count<20)
{
//P4_7=0;
void t2_start();
}
else
{
temppage=SFRPAGE;
SFRPAGE=0X0F;
P4_7=0;
delay_ms(10);
P4_7=1;
SFRPAGE=temppage;
//stop();
}
ET2=1;
EA=1;
}
void PCA_ISR(void) interrupt 9
{
uchar temp1; //temp保存第一次的探测结果,temp1保存第一次的探测结果,k保存记录次数
SFRPAGE=0x00;
EIE1&=0xF7; //关PCA中断
ring();
delay1ms(15);
temp1=PCA0CN&0X0C;
/* if(k<2)
{
temp=temp1;
k++;
//delay1ms(500);
}
else
{
if(temp1==temp)
{*/
switch(temp1)
{
case 0x0c: //前方有障碍
front_bi();
break;
case 0x08: //左方有障碍物
//delay1ms(300);
//if(CCF2==1)
//front_bi();
//else
left_bi();
break;
case 0x04: //右方有障碍物
/* if(CCF3==1)
front_bi();
else*/
right_bi();
break;
case 0x00: //没有障碍物
break;
}
k=0;
//}
// }
temppage=SFRPAGE;
SFRPAGE=0x00;
CCF2=0;
CCF3=0;
SFRPAGE=temppage;
EIE1|=0x08;//PCA中断使能,EPCA
}
/*void PCA_ISR(void) interrupt 9
{
ring();
EIE1&=0xF7; //关PCA中断
delay1ms(5);
P0|=0x0c;
if(k<2)
{
ir[k]=P0&0x0c;
k++;
}
else
{
if(ir[0]==ir[1])
{
switch(ir[0])
{
case 0x00:
temppage=SFRPAGE;
SFRPAGE=0x0f;
P5_1=0;
P5_0=0;
delay1ms(500);
P5_1=1;
P5_0=1;
delay1ms(500);
SFRPAGE=temppage;
break;
case 0x04:
temppage=SFRPAGE;
SFRPAGE=0x0f;
P5_1=0;
delay1ms(500);
P5_1=1;
delay1ms(500);
SFRPAGE=temppage;
break;
case 0x08:
temppage=SFRPAGE;
SFRPAGE=0x0f;
P5_0=0;
delay1ms(500);
P5_0=1;
delay1ms(500);
SFRPAGE=temppage;
break;
case 0x0c:
break;
}
k=0;
}
}
CCF2=0;
CCF3=0;
EIE1|=0x08;//PCA中断使能,EPCA
}*/
/*void PCA_CEX3_ISR(void) interrupt 9 //*CEX3负边沿触发模式,用来探测金属
{
EIE1&=0xF7; //关PCA中断
CCF3=0;
ring();
temppage=SFRPAGE;
SFRPAGE=0x00;
PCA0CPM3 = 0x31; // 正负边沿触发模式,CEX3捕捉中断使能
PCA0CPL3 = 0x00;
PCA0CPH3 = 0x00;
SFRPAGE=temppage;
if(S>0XFFFF)
c_flag=1;
else
{
tiepiancount++;
s[tiepiancount]=S;
}
}*/
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -