?? 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;
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 + -