⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rdr.c

📁 接收前面的雷达信息
💻 C
字号:
//特殊功能寄存器定义
unsigned char a 		@ 0x05;
unsigned char status 	@ 0x0a;
unsigned char intc 		@ 0x0b;
unsigned char tmr 		@ 0x0d;
unsigned char tmrc 		@ 0x0e;
unsigned char pa 		@ 0x12;
unsigned char pac 		@ 0x13;
unsigned char pb 		@ 0x14;
unsigned char pbc 		@ 0x15;
unsigned char pc 		@ 0x16;
unsigned char pcc 		@ 0x17;

//状态寄存器位定义
#define c 		_0a_0
#define ac 		_0a_1
#define z 		_0a_2
#define ov 		_0a_3
#define pdf  	_0a_4
#define to  	_0a_5

//中断控制寄存器位定义
#define emi _0b_0
#define eei _0b_1
#define eti _0b_2
#define eif _0b_4
#define t0f _0b_5

//定时器控制寄存器tmrc位定义
#define psc0  _0e_0
#define psc1  _0e_1
#define psc2  _0e_2
#define te0   _0e_3
#define ton0  _0e_4
#define tm0   _0e_6
#define tm1   _0e_7


//端口管脚位定义
#define pa0 _12_0
#define pa1 _12_1
#define pa2 _12_2
#define pa3 _12_3
#define pa4 _12_4
#define pa5 _12_5
#define pa6 _12_6
#define pa7 _12_7

#define pb0 _14_0

#define pc0 _16_0
#define pc1 _16_1

unsigned char RadarStep @ 0x70;//接收步骤计数器
unsigned char RadarHcount @ 0x71;//雷达高电平脉宽计数器
unsigned char RadarLcount @ 0x72;//雷达低电平脉宽计数器
unsigned char RadarHcountbuf @ 0x73;//高电平脉宽计数值缓存
unsigned char RadarLcountbuf @ 0x74;//低电平脉宽计数值缓存
unsigned char Have_RadarData_Flg @ 0x75;//接收到有效雷达信号态标志缓存器
unsigned char holdtime @ 0x76;
unsigned char SyncOK_HoldTimer @ 0x77;
unsigned char Header_OK @ 0x78;
unsigned char Hpa0 @ 0x79;
unsigned char pa0count @ 0x7b;
//unsigned char pa0count1 @ 0x7c;
unsigned char RadarDataBitCount @ 0x7a; //雷达数据bit位计数
unsigned char RadarStart @ 0x7e; //雷达引导码0xAA
#define RadarStartBit0 _7e_0
#define RadarStartBit1 _7e_1
#define RadarStartBit2 _7e_2
#define RadarStartBit3 _7e_3
#define RadarStartBit4 _7e_4
#define RadarStartBit5 _7e_5
#define RadarStartBit6 _7e_6
#define RadarStartBit7 _7e_7
unsigned char RadarData @ 0x7f;  //收到的雷达数据
#define RadarDataBit0 _7f_0 
#define RadarDataBit1 _7f_1
#define RadarDataBit2 _7f_2
#define RadarDataBit3 _7f_3
#define RadarDataBit4 _7f_4
#define RadarDataBit5 _7f_5
#define RadarDataBit6 _7f_6
#define RadarDataBit7 _7f_7

#pragma vector isr_extint @ 0x4
#pragma vector isr_timer  @ 0x8


//ISR for safequard
// external ISR
void isr_extint()
{
//	eif = 0;	//清标志
	eei = 0;	//屏蔽外部中断
	if(Have_RadarData_Flg)
    {
      RadarHcount  = 0;
	  RadarLcount  = 0;
      return;
	}	
	RadarHcountbuf =RadarHcount;
	RadarLcountbuf =RadarLcount;
	RadarHcount = 0;
	RadarLcount = 0;
//	t0f = 0;
//	ton0= 0;
//	tmr =0x83;
//	ton0= 1;

    switch(RadarStep)
    {
	   case 0:    
	        if(RadarHcountbuf>=52 && RadarHcountbuf<=60)
            {       
                RadarHcountbuf=0;
                RadarHcountbuf=0;
    	        RadarStep=1;
    	        RadarDataBitCount=0;
                eei=1;
                return;
            }
            else goto Checking_error;
	        break;
	   case 1:               
            RadarDataBitCount++;            
            if((RadarLcountbuf>=4 && RadarLcountbuf<=9)&&(RadarHcountbuf>=1 && RadarHcountbuf<=4))
            {
                RadarHcountbuf  = 0;
	            RadarLcountbuf  = 0;
	            
                switch(RadarDataBitCount)
                {
                    case 1:RadarStartBit7=1;break;
                    case 2:RadarStartBit6=1;break;
                    case 3:RadarStartBit5=1;break;
                    case 4:RadarStartBit4=1;break;
                    case 5:RadarStartBit3=1;break;
                    case 6:RadarStartBit2=1;break;
                    case 7:RadarStartBit1=1;break;
                    case 8:RadarStartBit0=1;break;
                    
                    case 9:RadarDataBit7=1;break;
                    case 10:RadarDataBit6=1;break;
                    case 11:RadarDataBit5=1;break;
                    case 12:RadarDataBit4=1;break;
                    case 13:RadarDataBit3=1;break;
                    case 14:RadarDataBit2=1;break;
                    case 15:RadarDataBit1=1;break;
                    case 16:RadarDataBit0=1;break;

                    default:break;
                }
            }
            else if((RadarLcountbuf>=1 && RadarLcountbuf<=4)&&(RadarHcountbuf>=4 && RadarHcountbuf<=9))
                 {
                     RadarHcountbuf  = 0;
	                 RadarLcountbuf  = 0;
	            
                     switch(RadarDataBitCount)
                     {
                        case 1:RadarStartBit7=0;break;
                        case 2:RadarStartBit6=0;break;
                        case 3:RadarStartBit5=0;break;
                        case 4:RadarStartBit4=0;break;
                        case 5:RadarStartBit3=0;break;
                        case 6:RadarStartBit2=0;break;
                        case 7:RadarStartBit1=0;break;
                        case 8:RadarStartBit0=0;break;
                    
                        case 9:RadarDataBit7=0;break;
                        case 10:RadarDataBit6=0;break;
                        case 11:RadarDataBit5=0;break;
                        case 12:RadarDataBit4=0;break;
                        case 13:RadarDataBit3=0;break;
                        case 14:RadarDataBit2=0;break;
                        case 15:RadarDataBit1=0;break;
                        case 16:RadarDataBit0=0;break;
                    
                        default:break;
                     }
                 }
                 else
                 {
                     goto Checking_error;
                  }
            if(RadarDataBitCount==16)
            {
                RadarDataBitCount=0;
                if((RadarStart==0xAA)&&(RadarData==0x43 || RadarData==0x4B || RadarData==0x53 || RadarData==0x5B || RadarData==0x80))
                {
                    RadarStart=0;
//                    RadarData=0;
                    Have_RadarData_Flg=1;
                    SyncOK_HoldTimer=0;     // 雷达同步时间
                    Header_OK=1;            //控制雷达同步
                }
                else if((RadarStart==0xAA)&&(RadarData==0x55)) 
                     {
                      SyncOK_HoldTimer=0;     // 雷达同步时间
                      Header_OK=1;            //控制雷达同步
                     } 
                RadarHcountbuf  = 0;
	            RadarLcountbuf  = 0;
	            RadarStep=0;
                eei=1;
                return;                
            }
            break;
        
       default:break;
    }
    RadarHcountbuf  = 0;
	RadarLcountbuf  = 0;
	eei=1;
    return;
    
Checking_error :

    RadarStep  = 0;
	RadarHcountbuf  = 0;
	RadarLcountbuf  = 0;
	RadarDataBitCount=0;

	eei=1;	// enable Ext int
	
	return;
}
 
// timer ISR -125us
void isr_timer()
{
//	t0f = 0;	//清标志
	if(pc0)
	RadarHcount++;
	else
	RadarLcount++;	
    holdtime++;
    if(	holdtime>=240) 
    {
      holdtime=0;
      SyncOK_HoldTimer++;
    }
    if(Hpa0)
    {
      pa0count++;
      if(pa0count==80) 
      {
       pa0count=0;
       Hpa0=0;
       pa0=1;
       pa1=1;
       pa3=1;
       pa4=1;
       
      }
    }  
	return;	
} 


//initialize registers for safeguard
void safeguard_init()
{
	intc = 0;
	tmrc = 0;
	tmr = 0x83;
	pac = 0xff; //input mode
	pbc = 0xff;
	pcc = 0xff;
	
}

void SyncHeadOK_Clr()              //070622
{//取得同步时SyncOK_HoldTimer清0,
    if(SyncOK_HoldTimer>=130)
    {//超时仍未取得再次同步,清除同步信号标志  大概3秒

        Header_OK=0;
        SyncOK_HoldTimer=0;
    }
}


void main()
{


	unsigned char i,j;
	safeguard_init();
	
	//i/o port initial:
	pac = 0x00;	//0000-0000B
    pbc=0xfe;
	pa = 0x00;
	pc = 0xff;
    pb=0;
	
	//变量初始化:	
    RadarStep=0;
	RadarHcount = 0;
	RadarLcount = 0;
    RadarHcountbuf=0;
    RadarLcountbuf=0;
    Have_RadarData_Flg=0;
    RadarDataBitCount=0;
    RadarStart=0;
    RadarData=0;

    holdtime=0;
    SyncOK_HoldTimer=0;
    Header_OK=0;  
    pa0count=0;
//    pa0count1=0;

	//set timer/counter as a pulse width measurement mode (脉宽测量模式)
	//设置定时/计数器工作方式为:定时器模式, bit7-bit6: 10
	//开定时器: bit4 =1;
	//active edge(rising/falling):bit3: 0/1
	// fint=fsys/4, bit2-bit0: 101, tmr_isr = 125us.
	//tmr初始值0x83, 脉宽溢出周期=125us,@fsys=4.0MHz.
	tmr  = 0x83;	//set tmr initial value
	tmrc = 0x91;	//10010001B
	

	//set intc
	//设置中断控制寄存器:
	//清除中断标志: bit4-bit5 = 0;
	//开启定时器: bit2 = 1;
	//开启外部中断: bit1 = 1;
	//开启全局中断: bit0 = 1;
	intc = 0x07;	//00000111B	


	while(1)
	{
      SyncHeadOK_Clr();
      if(!Hpa0)
      {
        if(Header_OK) {pa4=1;pa3=1;pa1=1;pa0=1;}
        else {pa4=0; pa3=0;pa1=0;pa0=0;}
      }
      if(Have_RadarData_Flg) 
      {
       Have_RadarData_Flg=0;
       switch(RadarData)
       {
          case 0x43:  pa0=1;pa1=0;pa3=0;pa4=0;break;
          case 0x4B:  pa0=0;pa1=1;pa3=0;pa4=0;break;
          case 0x53:  pa0=0;pa1=0;pa3=1;pa4=1;break;
          case 0x5B:  pa0=1;pa1=1;pa3=0;pa4=0;break;
          case 0x80:  pa0=1;pa1=0;pa3=1;pa4=1;break;
          default :break;
       }
       RadarData=0;
       Hpa0=1;
      }
//        if(pa1) pb0=1;
//        else pb0=0;

      
	}//end while
}//end main

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -