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

📄 text1

📁 基于陀螺仪原理的惯性导航程序 用于测量量角速度
💻
字号:
//*****************************************
//slave1
//!@#$
//2006.5.15-
//*******************************************

#include <ADUC842.H>


#define localaddress 0x40   //slave 1
#define shakehand 0
#define keyframefeedback 7
sbit eTXD=P3^3; 
struct data_to_host {
         unsigned char k_ail;//keyframeflag/address instruction length
         unsigned char dat[7];
                      }*globalp,globalbuf,global_send_buf;


unsigned char rbf_l,shf,trsf, gkeyframesendflag,shakehandflag,flag_send1_receive0,gbufready,flag_local;//receicvebeginflag_length,shake hand flag,transmit success flag

unsigned  char code slaverespondcode[3]={9,8,7};
unsigned char transmitaddcheck,timesofshakehand,globalcheck,address,instruction,length,gcheck,slave,global_localaddress_flag;
void init();
void delay(unsigned long d);
void respondshakehand(void);
void info_send(struct data_to_host *p);
void uart_send(struct data_to_host *p);
void send(unsigned char d);
void setreceivetimer(unsigned char t);

void savekeyframe(void);
thenumof1(unsigned char d);
//******************************************************
main()
{
code struct data_to_host xx={0x8f,23,65,98,45,32,79,23 };  
 
init();
globalp=&xx;
while(1);
//while(trsf==0);

  // {
//  info_send(&xx);
  // }while(1);  

}

//******************************************************
void savekeyframe(void)
{
}
//*****************************************
void init(void)
{   
    
    eTXD    =   0;                    //disable the TXD
    T3CON   =   0x83;                 //set baud rate 9600
    T3FD    =   0x09;
    SCON    =   0x50;                 //mode 1,8bits

    CFG842  =   0x01;                 //use p26and p27,use pll clock            
    PLLCON  =   0x00;                 //16.777216MHz

    EA=1;  
    ES=1;           
    gbufready=0;
    global_localaddress_flag=0    ;//!@#$%^&@#^&         
    TI=0; 
    rbf_l=0xff;
    trsf=0;  
    flag_send1_receive0=1;            
}
//****************************************
void delay(unsigned long d)
{do{
     d--;
    }while(d>1);  
}
//*************************************88
void send(unsigned char tosend)
{


SBUF=tosend;
while (!TI);
TI=0;
//delay(1000);

//P2=tosend;
}
//******************************************************
void respondshakehand(void)
{
    eTXD=1;
    send(0x02);
    send('A');
    send('B');
    send('C');
    eTXD=0;
    ES=1;
    //while(1);

   /* global_send_buf.k_ail=0x02;
    global_send_buf.dat[0]='A';
    global_send_buf.dat[1]='B';
    global_send_buf.dat[2]='C';
    uart_send(&global_send_buf);

    ES=0;
    while(1);*/
}
//******************************************************

void uart_send(struct data_to_host *p)
{
      unsigned char addcheck,quantityofdata,i;
      eTXD=1;
      ES=0;
      send(p->k_ail);
      //while(1);
      addcheck=p->k_ail;
      quantityofdata=(p->k_ail)&0x07;
      //ES=0;
      for(i=0;i<quantityofdata;i++)
        {//delay(10000);
          send(p->dat[i]);
          addcheck+=p->dat[i];
        }
       send(addcheck);
       flag_send1_receive0=1;
       ES=1;   
       eTXD=0;
}
//******************************************************
void info_send(struct data_to_host *p)
{
     uart_send(p);
     rbf_l=0xff;
}
//******************************************************
//******************************************************
//******************************************************
//******************************************************
void rec() interrupt 4
{
    unsigned char buf;
    if(RI)
    {
        RI=0;
        ES=0;
        buf=SBUF;

        if(0xff == rbf_l)
        {     
              global_localaddress_flag=0;
              rbf_l=(0x07&buf);
              flag_local=0;
                if(((0xc0)&buf)==localaddress)
                  { 
                    flag_local=1;
                    gbufready=0;
                    instruction=0x38&buf;
                //  send(instruction);
                    global_localaddress_flag=1;
                    //send(0xbb);
                    globalcheck=buf;
                    trsf=0;
                   
                  }
        		 
                //  send(global_localaddress_flag);//!@#$^&(#$%*(
             // setreceivetimer(length);//set timer,divide buf

              //   send(rbf_l); 
         }
     else
         {     
              //send(0xdd);
              if(global_localaddress_flag==0)   //not local address,count the num. of the data
                  {    
                      if(rbf_l==0)
                        {                           
                          // send(0x11);//cancel timer 
                         } 
                        rbf_l--;
                        //if(1 == rbf_l)
                		//send(0);
                  }
              else
                  {  
                       if(rbf_l!=0)
                            {
                              globalbuf.dat[rbf_l]=buf;//evalue the struct
                              globalcheck=globalcheck+buf;
                        	  //if(rbf_l==4)
                              //send(globalbuf.dat[rbf_l]);
                              rbf_l--;
        				
                             }
                			 
                       else 
                            {     //send(0xcc);
                                    
                                    rbf_l--; //cancel timer
                                	flag_send1_receive0=0;
                        			//send(rbf_l);
                                	//send(globalcheck);
                                  if(globalcheck==buf)
                                     {  //ES=0;
                                       //send(globalbuf.dat[3]);
                            		   //send(0x33);
                                        trsf=1;
                                        if(instruction==shakehand)
                                            {
                                            respondshakehand();                                                                                                                                                                                 
                                            gbufready=0;

                							 }  
                                    	else
										   {
										   		gbufready=1;
									       		info_send(globalp); 
           								   }
                                      }
                                    
                                  else
                                     {   //send(0xaa);
                                         if(gkeyframesendflag)
                                               {
                                                      if(thenumof1(globalbuf.dat[0])>4)   //number of '1'>4
                                                       savekeyframe();
                                                  
                                                }
                                          else
                                                {
                                                 trsf=0;  //abort//
                                                 }
                                  
                                      }  
                                 
                            }
                        //rbf_l=0xff;
                        //global_localaddress_flag=0;
                        

                  }

          }
//if(rbf_l==0xff)
//send(0xee);
ES=1; 
//RI=0;
}
} 

⌨️ 快捷键说明

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