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

📄 zj.lst

📁 我设计的CAN总线模块
💻 LST
📖 第 1 页 / 共 5 页
字号:
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 1   


DOS C51 COMPILER V4.01, COMPILATION OF MODULE ZJ
OBJECT MODULE PLACED IN E:\W\WZQ\GC\CAN668\C\ZJ.OBJ
COMPILER INVOKED BY: D:\COMP51\C51.EXE E:\W\WZQ\GC\CAN668\C\ZJ.C CD DB SB OE

stmt level    source

   1          #include<89c51.h>
   2          #include<89c668.h>
   3          #include<zj.h>
   4          #include<IIII.h>
   5          #include<ctype.h>
   6          #include<intrins.h>
   7          #include<24c04.h>
   8          //***********************************************************************
   9          jq_ys(unsigned int i);
  10          chishihua();
  11          dog_clr();
  12          fs_x(unsigned char x);
  13          fs_char(unsigned int a,unsigned char const *b);
  14          bit canx_out(unsigned char *j);
  15          can_chuli();
  16          uart_chuli();
  17          eeprom_can(unsigned char a,unsigned  char xdata *b);
  18          uart_bit();
  19          bit char_Comparison(unsigned char *a,unsigned char const *b);
  20          error_chuli();
  21          unsigned char read(unsigned int address);
  22          void write(unsigned int address,unsigned char dd);
  23          //***********************************************************************
  24          //***********************************************************************
  25          //***********************************************************************
  26          //***********************************************************************
  27          //***********************************************************************
  28          main()
  29          {
  30   1       chishihua();
  31   1       uart_bit();
  32   1        fs_char((sizeof("\rokok\r")),"\rokok\r");
  33   1      
  34   1      { unsigned int iuiu;
  35   2        for(iuiu=0;iuiu<=255;iuiu++)
  36   2           {
  37   3            EEPROM[iuiu]=0;
  38   3           }
  39   2       }
  40   1      
  41   1      
  42   1      
  43   1       while(1){
  44   2      
  45   2       //判断数据是否溢出
  46   2       if(can_Full==1)
  47   2         {
  48   3          fs_char((sizeof("error(3)\r")),"error(3)\r");
  49   3          can_Full=0;
  50   3         }
  51   2       dog_clr();
  52   2       //判断CANX接收缓冲区是否有等待处理的数据
  53   2       if(can_w_data!=can_r_data)  {can_chuli(); }
  54   2       dog_clr();
  55   2       //判断串口接收数据是否完成
  56   2       if(uart_data_w_Complete==1) {uart_chuli(); uart_data_w_Complete=0;}
  57   2       dog_clr();
  58   2       //判断错误状态是否改变
  59   2       if(can_error==1)          {error_chuli(); can_error=0;}
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 2   

  60   2      
  61   2       //EEPROM数据是否更新
  62   2       if((bb[1]&0x0f)==0x0f) { eeprom_can(1,&EEPROM[0X08]); bb[1]=bb[1]&0xf0; }
  63   2       if((bb[1]&0xf0)==0xf0) { eeprom_can(2,&EEPROM[0X0c]); bb[1]=bb[1]&0x0f; }
  64   2       if((bb[2]&0x0f)==0x0f) { eeprom_can(3,&EEPROM[0X10]); bb[2]=bb[2]&0xf0; }
  65   2       if((bb[2]&0xf0)==0xf0) { eeprom_can(4,&EEPROM[0X14]); bb[2]=bb[2]&0x0f; }
  66   2       if((bb[3]&0x0f)==0x0f) { eeprom_can(5,&EEPROM[0X18]); bb[3]=bb[3]&0xf0; }
  67   2       if((bb[3]&0xf0)==0xf0) { eeprom_can(6,&EEPROM[0X1c]); bb[3]=bb[3]&0x0f; }
  68   2       if((bb[4]&0x0f)==0x0f) { eeprom_can(7,&EEPROM[0X20]); bb[4]=bb[4]&0xf0; }
  69   2      
  70   2      }}
  71          //***********************************************************************
  72          //****************[  1ms ys   ]********************
  73           jq_ys(unsigned int i)               /***循环延时函数,延时基数为 1MS ***/
  74           {
  75   1        unsigned int a;
  76   1        while(i>=1)
  77   1             {
  78   2              i=i-1;
  79   2              a=68;
  80   2              while (a>=1)
  81   2                    {
  82   3                     a=a-1;
  83   3                    }
  84   2             }
  85   1       }
  86          //***********************************************************************
  87          chishihua()
  88          {
  89   1       P0=0XFF;
  90   1       P1=0XFF;
  91   1       P2=0XFF;
  92   1       P3=0XFF;
  93   1       //看门狗
  94   1       CCAPM4=0X4C;
  95   1       CCAP4L=0XFF;
  96   1       CCAP4H=0XFF;
  97   1       CMOD=0X44;
  98   1       CCON=0X40;
  99   1       //12c
 100   1       S1ADR=0XA0;
 101   1       S1CON=0X0c5;
 102   1       //串口初始化
 103   1       TMOD=0X22;     //定时器0用于看门狗
 104   1       TH0=TL0=0X090;
 105   1       TCON=0x00;
 106   1       TH1=TL1=0X0FD;
 107   1       SCON=0X50;
 108   1       TR1=1;
 109   1       TR0=1;         //定时器0用于看门狗
 110   1       ES=1;
 111   1       ES1=1;
 112   1       EX1=1;
 113   1       PS1=1;
 114   1       //设置内部RAM使用,当超过4K范围时读外部地址数据。
 115   1       AUXR=0;
 116   1       //SJA1000初始化
 117   1       {
 118   2       unsigned char xdata *j;
 119   2       RST=0;                 //设置CAN0
 120   2       jq_ys(100);
 121   2       RST=1;
 122   2       j=cdr;  *j=0x80;
 123   2       j=mod;  *j=0x01;        //复位.  错误、发送、接收中断准许。
 124   2       j=ier;  *j=0xa7;        //总线错误\错误消极\数据溢出\错误报警\发送\接收,中断准许
 125   2       j=amr0; *j=0xff;        //接收屏蔽0
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 3   

 126   2       j=amr1; *j=0xff;        //接收屏蔽1
 127   2       j=amr2; *j=0xff;        //接收屏蔽2
 128   2       j=amr3; *j=0xff;        //接收屏蔽3
 129   2       j=btr0; *j=0x7f;        //总线时序0
 130   2       j=btr1; *j=0x7f;        //总线时序1
 131   2       j=ocr;  *j=0x0aa;       //输出控制寄存器
 132   2       j=mod;  *j=0x00;        //进入工作模式
 133   2       j=cmr; *j=0x0c;
 134   2       }
 135   1       //can-id
 136   1       id=read(1);
 137   1       id=id<<8;
 138   1       id=id+read(2);
 139   1       if(id>0x07ff) id=2;
 140   1       //****************
 141   1       EA=1;        //开放中断
 142   1      }
 143          //***************************发送字符***********************************
 144          dog_clr()
 145          {
 146   1       CH=CL=0;
 147   1      }
 148          //***************************发送字符***********************************
 149          fs_x(unsigned char x)
 150          {
 151   1       EA=0;
 152   1       TI=0;
 153   1       SBUF=x;
 154   1       while(TI==0);
 155   1       TI=0;
 156   1       EA=1;
 157   1      }
 158          //***************************发送字符串*********************************
 159          fs_char(unsigned int a,unsigned char const *b)
 160          {
 161   1       unsigned int i;
 162   1       if(a>0) a=a-1;
 163   1       for(i=0;i<a;i++)
 164   1          {
 165   2           fs_x(*b);
 166   2           b++;
 167   2          }
 168   1      }
 169          //***********************************************************************
 170          bit canx_out(unsigned char *j)
 171          {
 172   1       unsigned char xdata *p;
 173   1       unsigned char a;
 174   1       unsigned long i;
 175   1       p=cmr; *p=0x02;              //取消发送
 176   1       p=sffdlc; *p=(*(j+1))&0x0f;
 177   1       p=sffid1; *p=*j; j=j+1;
 178   1       p=sffid2; *p=(*j)&0xe0; j=j+1;
 179   1       p=sffsj1; *p=*j; j=j+1;
 180   1       p=sffsj2; *p=*j; j=j+1;
 181   1       p=sffsj3; *p=*j; j=j+1;
 182   1       p=sffsj4; *p=*j; j=j+1;
 183   1       p=sffsj5; *p=*j; j=j+1;
 184   1       p=sffsj6; *p=*j; j=j+1;
 185   1       p=sffsj7; *p=*j; j=j+1;
 186   1       p=sffsj8; *p=*j; j=j+1;
 187   1       can_ti=0;
 188   1       p=cmr; *p=0x01;              //开始发送
 189   1      
 190   1       for(i=0;i<0x002fff;i++)
 191   1          {
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 4   

 192   2           if(can_ti==1)  {  can_ti=0;  FS=!FS; return(0); }
 193   2          }
 194   1       return (1);
 195   1      }
 196          //***********************************************************************
 197          can_chuli()
 198          {
 199   1       JS=!JS;
 200   1       { //串口数据处理
 201   2       unsigned char a;
 202   2       fs_char((sizeof("can-in")),"can-in");  //发送“CAN-IN”
 203   2       fs_char((sizeof(" id=0"))," id=0");  //发送“X id=0”
 204   2       a=can_data[can_r_data][0];  a=a>>1;
 205   2       fs_x(ascii[a>>4]);                             //发送id“X”
 206   2       fs_x(ascii[a&0x0f]);                           //发送id“X”
 207   2       a=can_data[can_r_data][1];  a=a>>5; a=a&0x07;
 208   2       if(((can_data[can_r_data][0])&0x01)!=0) a=a+8;
 209   2       fs_x(ascii[a&0x0f]);                           //发送id“X”
 210   2       fs_x(' ');                                     //发送“ ”
 211   2       fs_x(ascii[(can_data[can_r_data][2])>>4]);     //发送第1个数据
 212   2       fs_x(ascii[(can_data[can_r_data][2])&0x0f]);
 213   2       fs_x(' ');                                     //发送“ ”
 214   2       fs_x(ascii[(can_data[can_r_data][3])>>4]);     //发送第1个数据
 215   2       fs_x(ascii[(can_data[can_r_data][3])&0x0f]);
 216   2       fs_x(' ');                                     //发送“ ”
 217   2       fs_x(ascii[(can_data[can_r_data][4])>>4]);     //发送第1个数据
 218   2       fs_x(ascii[(can_data[can_r_data][4])&0x0f]);
 219   2       fs_x(' ');                                     //发送“ ”
 220   2       fs_x(ascii[(can_data[can_r_data][5])>>4]);     //发送第1个数据
 221   2       fs_x(ascii[(can_data[can_r_data][5])&0x0f]);
 222   2       fs_x(' ');                                     //发送“ ”
 223   2       fs_x(ascii[(can_data[can_r_data][6])>>4]);     //发送第1个数据
 224   2       fs_x(ascii[(can_data[can_r_data][6])&0x0f]);
 225   2       fs_x(' ');                                     //发送“ ”
 226   2       fs_x(ascii[(can_data[can_r_data][7])>>4]);     //发送第1个数据
 227   2       fs_x(ascii[(can_data[can_r_data][7])&0x0f]);
 228   2       fs_x(' ');                                     //发送“ ”
 229   2       fs_x(ascii[(can_data[can_r_data][8])>>4]);     //发送第1个数据
 230   2       fs_x(ascii[(can_data[can_r_data][8])&0x0f]);
 231   2       fs_x(' ');                                     //发送“ ”
 232   2       fs_x(ascii[(can_data[can_r_data][9])>>4]);     //发送第1个数据
 233   2       fs_x(ascii[(can_data[can_r_data][9])&0x0f]);
 234   2       fs_x('\r');
 235   2       }
 236   1       //i2c处理
 237   1            {
 238   2             unsigned int eee=0,uuu=0;
 239   2             eee=can_data[can_r_data][0];
 240   2             eee=eee<<8;
 241   2             eee=eee+can_data[can_r_data][1];
 242   2             eee=eee>>5;
 243   2             uuu=can_data[can_r_data][8];
 244   2             uuu=uuu<<8;
 245   2             uuu=uuu+can_data[can_r_data][9];
 246   2      
 247   2      
 248   2             if(   (eee==1)&& ((uuu==id)||(uuu==0))  &&  (can_data[can_r_data][2]<8)  &&  (can_data[can_r_data][
             -2]>0)  )
 249   2               {
 250   3                unsigned char ttt=0;
 251   3                ttt=can_data[can_r_data][2];
 252   3                ttt=ttt-1;
 253   3                EEPROM[0]=EEPROM[0]|(er[ttt]);
 254   3                ttt=ttt*4; ttt=ttt+0x24;
 255   3                EEPROM[ttt]=can_data[can_r_data][3];   ttt=ttt+1;
 256   3                EEPROM[ttt]=can_data[can_r_data][4];   ttt=ttt+1;
C51 COMPILER V4.01,  ZJ                                                                    11/06/03  12:01:37  PAGE 5   

 257   3                EEPROM[ttt]=can_data[can_r_data][5];   ttt=ttt+1;
 258   3                EEPROM[ttt]=can_data[can_r_data][6];
 259   3                INT_W=0;
 260   3               }
 261   2            }
 262   1       //接收计数器加一
 263   1       can_data[can_r_data][0]=0;
 264   1       can_data[can_r_data][1]=0;
 265   1       can_data[can_r_data][2]=0;
 266   1       can_data[can_r_data][3]=0;
 267   1       can_data[can_r_data][4]=0;
 268   1       can_data[can_r_data][5]=0;
 269   1       can_data[can_r_data][6]=0;
 270   1       can_data[can_r_data][7]=0;
 271   1       can_data[can_r_data][8]=0;
 272   1       can_data[can_r_data][9]=0;
 273   1      
 274   1       can_r_data=can_r_data+1;
 275   1       if(can_r_data>=700) can_r_data=0;
 276   1      }
 277          //***********************************************************************
 278          uart_chuli()
 279          {
 280   1       if(char_Comparison(uart_data,"can-out")==0)
 281   1         {
 282   2          unsigned char g;
 283   2          bit t=1;
 284   2          for(g=7;g<31;g++)
 285   2             {
 286   3              if(!(( isxdigit(uart_data[g])==1)||(uart_data[g]==' '))) goto ret;
 287   3             }
 288   2          if(uart_data[31]!='\r')                                   goto ret;
 289   2          t=0;
 290   2         ret:
 291   2          if(t==1)
 292   2            {

⌨️ 快捷键说明

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