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

📄 can-second.lst

📁 很完整的CAN总线项目应用例子
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   CAN_SECOND                                                            05/15/2008 21:34:02 PAGE 4   

 177   1                  dat[0]=ad/1000;
 178   1                      PutData(4,3,dat[0]);
 179   1                  for(n=1;n<4;n++)
 180   1                  PutData(5+n,3,dat[n]);
 181   1                PutString(0,4,str2);
 182   1                ////数据折算
 183   1                  ad=buf[1];
 184   1                      ad=ad*5000/255;
 185   1                  dat[3]=ad%10;
 186   1                  dat[2]=ad/10%10;
 187   1                  dat[1]=ad/100%10;
 188   1                  dat[0]=ad/1000;
 189   1                      PutData(4,4,dat[0]);
 190   1                  for(n=1;n<4;n++)
 191   1                  PutData(5+n,4,dat[n]);
 192   1                PutString(0,5,str3);
 193   1                ////数据折算
 194   1                  ad=buf[2];
 195   1                      ad=ad*5000/255;
 196   1                  dat[3]=ad%10;
 197   1                  dat[2]=ad/10%10;
 198   1                  dat[1]=ad/100%10;
 199   1                  dat[0]=ad/1000;
 200   1                      PutData(4,5,dat[0]);
 201   1                  for(n=1;n<4;n++)
 202   1                  PutData(5+n,5,dat[n]);
 203   1                PutString(0,6,str4);
 204   1                ////数据折算
 205   1                  ad=buf[3];
 206   1                      ad=ad*5000/255;
 207   1                  dat[3]=ad%10;
 208   1                  dat[2]=ad/10%10;
 209   1                  dat[1]=ad/100%10;
 210   1                  dat[0]=ad/1000;
 211   1                      PutData(4,6,dat[0]);
 212   1                  for(n=1;n<4;n++)
 213   1                  PutData(5+n,6,dat[n]);
 214   1              
 215   1      
 216   1      }
 217          
 218          
 219          /************************************************************************
 220                                              初始化界面
 221          ************************************************************************/
 222          void manu_init(uchar k)
 223          {         
 224   1         // uchar k=0x10;
 225   1              //for(k=0x11;k<0x121;k+=0x10)
 226   1          // {
 227   1               //if(manu1_flag==0)
 228   1              // {
 229   1                showword(wang_1, 0x20+k,0);
 230   1                showword(luo_1, 0x30+k,0);
 231   1            showword(hua_1, 0x40+k,0);  
 232   1                showword(shi,0x50+k,0); 
 233   1            showword(yan, 0x60+k,0);  
 234   1                showword(jiao_1,0x70+k,0); 
 235   1                showword(xue_1,0x80+k,0); 
 236   1                showword(xi,0x90+k,0); 
 237   1                showword(tong,0xa0+k,0); 
 238   1      
C51 COMPILER V7.50   CAN_SECOND                                                            05/15/2008 21:34:02 PAGE 5   

 239   1               // Delay(200);
 240   1               // LcmClear(0);
 241   1              //  }
 242   1              //}
 243   1      }
 244          
 245          void manu_select(void)
 246          {         
 247   1            #define k 0x22
 248   1                showword(qing_1, 0x10+k,0);
 249   1                showword(shu_1, 0x20+k,0);
 250   1            showword(ru_1, 0x30+k,0);  
 251   1                showword(shi,0x40+k,0); 
 252   1            showword(yan, 0x50+k,0); 
 253   1                showword(xu_1,0x60+k,0); 
 254   1            showword(hao_1, 0x70+k,0); 
 255   1                showword(mao_1, 0x80+k,0);
 256   1                showword(xia_x,0x90+k,0);
 257   1                showword(xia_x,0xa0+k,0);
 258   1      }
 259          
 260          //*****************中断0服务程序**********************
 261          void int0_service()   interrupt 0 
 262          {
 263   1              uchar state,yy;
 264   1              uchar xdata *int_poin;                  //SJA1000地址变量指针   
 265   1              P1_0=1;//开蜂鸣器
 266   1              EA=0;//////////////////////////
 267   1              int_poin=IR;                            //IR   0X0003   中断寄存器
 268   1              state=*int_poin;                                        //读中断寄存器清除中断位
 269   1              if((state&0x08)==0x08)                  //0000 1000 IR.3=1数据溢出错误中断
 270   1              {                                                       
 271   2                      int_poin=CMR;                           //CMR  0x0001   命令寄存器
 272   2                      *int_poin=0x0c;                                 //0000 1100 CMR.3,CMR.2=1 功能:清除数据溢出错误和释放接收缓冲区
 273   2              } 
 274   1              else if((state&0x04)==0x04)                     //0000 0100 IR.2=1 总线出错报警中断
 275   1              {
 276   2                      int_poin=SR;                    //SR 0X0002     状态寄存器
 277   2                      state=*int_poin;                //读总线错报类型
 278   2                      if ((state&0x80)==0x80)         //1000 0000 SR.7=1 总线关闭错误
 279   2                      {
 280   3                              int_poin=MODE;             
 281   3                              *int_poin=0x00;                         //进入工作模式
 282   3                              state=0x01;
 283   3                              while((state&0x01)==0x01)       //确保进入工作模式
 284   3                              {
 285   4                                      state=*int_poin;
 286   4                              }
 287   3                      }
 288   2              }
 289   1      /***********************接收数据中断**********************************/
 290   1              else if((state&0x01)==0x01)             //0000 0001 IR.0=1接收中断
 291   1              {                       
 292   2                      int_poin=CANRX;                 //CANRX 0X0010  报文接受缓冲区首址
 293   2                      state=*int_poin;                
 294   2                      state=state&0x0f;                       //截取数据长度,低四位为所接数据长度
 295   2               if (state==8)                      //数据长度为8
 296   2                      {
 297   3                       for(state=0;state<4;state++)
 298   3                              {
 299   4                                      int_poin++;
 300   4                                      ID2[state]=*int_poin;       //存放在ID2数组中           
C51 COMPILER V7.50   CAN_SECOND                                                            05/15/2008 21:34:02 PAGE 6   

 301   4                              }       
 302   3                              for(state=0;state<8;state++)
 303   3                              {
 304   4                                      int_poin++;
 305   4                                      buf[state]=*int_poin;       //存放在buf数组中           
 306   4                              }
 307   3      //---------------------------------------数据处理------------------------------------------------
 308   3              /*       if(ID2[3]==11||ID2[0]==11)           //若为学号
 309   3                              {
 310   3                              for(state=0,yy=0;state<6;yy+=2,state++)//只读6个字节的学号
 311   3                               {
 312   3                                XBYTE[state+0xdc00+ID2[0]]=buf[state];     //将学号存在以0xdc00+ID[0]为首地址的6个单元中
 313   3                                PutData2(6+yy,5,buf[state]);   
 314   3                               }                      
 315   3                      manu_xinxi();//显示 1# 试验台 操作者 学号及 连接成功
 316   3                              Delay(2000);
 317   3                              manu2=1;//回到初始化界面
 318   3                              }
 319   3                              if(ID2[3]==22||ID2[0]==22)           //若为数据
 320   3                              {
 321   3                                      for(state=0;state<8;state++)
 322   3                                       XBYTE[state+0xdc00+ID2[0]+add]=buf[state];  //将数据存在以0xdc00+ID[0]+10为首地址的8个单元中
 323   3                                       add+=10;
 324   3                                   flag_data=1;  /////接收新数据标志位
 325   3                              }
 326   3                  
 327   3                              P1_0=0;//关蜂鸣器*/
 328   3                      
 329   3                     
 330   3      
 331   3      //-------------------------------------数据处理---------------------------------------          
 332   3                      }//if (state==8) 
 333   2                      //若state=0,则为远程帧,暂不作处理
 334   2                      int_poin=CMR;                    
 335   2                      *int_poin=0x04;                 //释放当前报文空间
 336   2              }
 337   1              else                       //发送中断
 338   1              {   
 339   2                       Delay(200);
 340   2                       P1_0=0;//关蜂鸣器       //叫2次表示发送成功
 341   2              }
 342   1              EA=1;///////////////////////////////
 343   1      }
*** WARNING C280 IN LINE 263 OF CAN-SECOND.C: 'yy': unreferenced local variable
 344          
 345          
 346          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   2789    ----
   CONSTANT SIZE    =    992    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     15      47
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      3       3
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  2 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

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