单片机 > 单片机程序设计 > 详情

TJA1020+51单片机实现的LIN总线通讯源程序(master+slave)

发布时间:2021-01-18 发布时间:
|

 
LIN mater的51单片机代码


/**************master*****************/

#include

#include

sbit  p31=P3^1;

sbit  k1=P1^0;

sbit  k2=P1^1; 

sbit  p20=P2^0;

unsigned char t;

unsigned char sendflag, flag;

void delay(unsigned int i)

{  

   while(i--);

}


void send()

{

                                      //           同步   ID   data1 data2 data3 data4 data5 data6 data7 data8  checksum

            unsigned char code table1[11]={0x55, 0x55, 0x3f, 0x80 ,0x00 ,0x00 ,0xff ,0x64 ,0x10 , 0xfc ,  0x79  };

                                             //           同步   ID   data1 data2 data3 data4 data5 data6 data7 data8  checksum

            unsigned char code table2[11]={0x55, 0x55, 0x3f, 0x80 ,0x00 ,0xff ,0x00 ,0x64 ,0x10 , 0xfc ,  0x79  };

          

          /*  发送一帧报文    */


         unsigned char i ;                 

             p31=0;        //间歇场

             delay(96);        //96

             p31=1;

                delay(2); 

                //_nop_();         _nop_(); _nop_(); 

              for(i=0;i<11;i++)      

                  {

                    if(flag==1)

                     SBUF=table1[i];

                    if(flag==2)

                        SBUF=table2[i];

                    while(TI==0);

                    TI=0;

                  }

  }


void delayms(unsigned int x)  //报文间隔发送延时

{

  unsigned int i;

unsigned char j;

  for(i=0;i

    for(j=0;j<122;j++);

}

void init(void)

{        


         /*******19.2k波特率****** */

           

            SCON=0x50;           //串口方式1 8个数据位 

         TMOD=0x20;

     PCON=0x80;        //0x80=19.2k/s

         TH1 =TL1 = 0xfd;

        // ES=1;                                                                                                                                                                                             //串行中断允许

         TR1=1; //启动定时器1 

     EA= 1;    

            IP=0x10;//串口中断优先        

         

}



void main()

{         


          init();

          flag=1;

          while(1)

         {                                

           

           P2=0xFE;

           P0=0x92;

           send();

         /*  发送完成    */


            delayms(200) ;          //发送间隔周期

                   if(k1==0)

         {

                  while(k1==0);

                  flag=1;

                  }                  

                if(k2==0)

                 {

                    while(k2==0); //抬键程序才往下执行

                  flag=2;

                 }


   }        


}




『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
PIC单片机基础知识之二