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

📄 main.lst

📁 多路语音控制及MAC地址加密以供上位机验证
💻 LST
字号:
C51 COMPILER V8.08   MAIN                                                                  10/18/2008 19:47:34 PAGE 1   


C51 COMPILER V8.08, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <AT89X52.H> 
   2          #include <string.h> 
   3          
   4          sbit sousel    = P1^7;
   5          sbit ch0       = P1^6;
   6          sbit ch1       = P1^5;
   7          sbit ch2       = P1^4;
   8          sbit ch3       = P1^3;
   9          sbit ch4       = P1^2;
  10          sbit ch5       = P1^1;
  11          sbit ch6       = P1^0;
  12          sbit ch7       = P0^0;
  13          sbit ch8       = P0^1;
  14          sbit ch9       = P0^2;
  15          sbit ch10      = P0^3;
  16          sbit jt        = P0^4;
  17          sbit rl0       = P0^5;
  18          sbit rl1       = P0^6;
  19          sbit rl2       = P0^7;
  20          sbit rl3       = P2^0;
  21          sbit rl4       = P2^1;
  22          sbit rl10      = P2^2;
  23          sbit rl9       = P2^3;
  24          sbit rl8       = P2^4;
  25          sbit rl7       = P2^5;
  26          sbit rl6       = P2^6;
  27          sbit rl5       = P2^7;
  28          sbit sou       = P3^6;
  29          sbit s42       = P3^7;
  30          
  31          
  32          #define INBUF_LEN 9 //数据长度 
  33          
  34          unsigned char rec[INBUF_LEN], swstr[6]; 
  35          
  36          //unsigned char checksum; 
  37          unsigned char strleng, count;
  38          bit rightflag, same = 0;
  39          unsigned char ss[] = "GuoChao Soft co, V1.1!";
  40          code unsigned mac[6] = {0x00, 0x03, 0x0d, 0x3f, 0x60, 0x28};
  41          code unsigned char pos[6] = {3, 1, 5, 2, 4, 0};
  42          code unsigned char swap[6] = {0x24, 0x15, 0x02, 0x13, 0x06, 0x21};
  43          bit read_flag= 0 ;          
  44          bit incept = 0;
  45          void init_serialcomm( void ) 
  46          { 
  47   1        SCON = 0x50 ; //SCON: serail mode 1, 8-bit UART, enable ucvr 
  48   1        TMOD |= 0x20 ; //TMOD: timer 1, mode 2, 8-bit reload 
  49   1        PCON |= 0x80 ; //SMOD=1; 
  50   1        TH1 = 0xFA ; //Baud:9600 fosc=11.0592MHz 
  51   1        IE |= 0x90 ; //Enable Serial Interrupt 
  52   1        TR1 = 1 ; // timer 1 run 
  53   1        // TI=1; 
  54   1      } 
  55          
C51 COMPILER V8.08   MAIN                                                                  10/18/2008 19:47:34 PAGE 2   

  56          //向串口发送一个字符 
  57          void send_char_com( unsigned char ch) 
  58          { 
  59   1        SBUF=ch; 
  60   1        while (TI== 0 ); 
  61   1          TI= 0 ; 
  62   1      } 
  63          
  64          /*/向串口输出一个字符串(非中断方式)
  65          void ComOutStr(unsigned char *Str)
  66          {
  67            while(*Str != 0x00)   //判断是否到了字符串的尾部
  68            {
  69              SBUF = *Str;        //输出字符
  70              while(!TI);         //空语句判断字符是否发完
  71              TI = 0;             //清TI
  72              Str++;              //字符串指针加一
  73            }
  74          }*/
  75          
  76          //向串口发送一个字符串,strlen为该字符串长度 
  77          void send_string_com( unsigned char *str, unsigned int strlen) 
  78          { 
  79   1        unsigned char k = 0 ; 
  80   1        do 
  81   1        { 
  82   2          send_char_com(*(str + k)); 
  83   2          k++; 
  84   2        } while (k < strlen); 
  85   1      } 
  86          
  87          //串口接收中断函数 
  88          void serial () interrupt 4 using 3 
  89          { 
  90   1        unsigned char i;
  91   1        if (RI) 
  92   1        { 
  93   2          unsigned char ch; 
  94   2          RI = 0 ; 
  95   2          ch=SBUF; 
  96   2          if (ch == 0x55) 
  97   2          { 
  98   3            incept = 1; 
  99   3            count = 0;
 100   3            for(i = 0; i < 9; i ++)
 101   3              rec[i] = 0;
 102   3          }
 103   2          if(incept)
 104   2          { 
 105   3            rec[count]=ch; 
 106   3            count++; 
 107   3            if (count == 2)
 108   3            {
 109   4              if ((rec[1]  == 0x01) | (rec[1]  == 0x02))
 110   4              {
 111   5                if (rec[1]  == 0x01)        //验证串
 112   5                  strleng = 9;
 113   5                if (rec[1]  == 0x02)        //命令字
 114   5                  strleng = 5;
 115   5              }
 116   4              else
 117   4              {
C51 COMPILER V8.08   MAIN                                                                  10/18/2008 19:47:34 PAGE 3   

 118   5                incept = 0;                 //第二字节无效,恢复接收状态
 119   5                count = 0;
 120   5              }
 121   4            }
 122   3            if (count >= strleng)           //收齐规定长度
 123   3            {
 124   4              incept = 0;
 125   4              rightflag = 1;
 126   4            }
 127   3          }
 128   2        }
 129   1      } 
 130          
 131          void delay(unsigned char x)
 132          {
 133   1        while(x --);
 134   1      }
 135          
 136          //解析收到有效串
 137          void decode(void)
 138          {
 139   1        unsigned char i, tem, chansel = 0xff;
 140   1        
 141   1        same = 0;
 142   1        if(rightflag & (rec[1] & 0x03 == rec[1]) & (rec[2] & 0x03 == rec[2])) //第2第3字节是否合法(整条数据是
             -否合法)
 143   1        {
 144   2          if (strleng == 9)        //验证串,做编码
 145   2          {
 146   3            for(i = 0; i < 6; i ++) 
 147   3            {
 148   4              swstr[i] = rec[pos[i] + 3];
 149   4            }
 150   3            swstr[0] = ~swstr[0];  //第0位取反
 151   3            tem = swstr[1] & 0x1f; //第1右5
 152   3            swstr[1] >>= 5;
 153   3            swstr[1] |= tem << 3;
 154   3            tem = swstr[2] & 0xb0; //第2位左2
 155   3            swstr[2] <<= 2;
 156   3            swstr[2] |= tem >> 4;
 157   3            tem = swstr[3] & 0x07; //第3位右3
 158   3            swstr[3] >>= 3;
 159   3            swstr[3] |= tem << 5;
 160   3            tem = swstr[4] & 0x3f; //第4位右6
 161   3            swstr[4] >>= 6;
 162   3            swstr[4] |= tem << 2;
 163   3            swstr[5] = ~swstr[5];
 164   3            send_string_com(swstr, 6);
 165   3          }    
 166   2          if (strleng == 4)        //命令串,解析
 167   2          {
 168   3            for (i = 0; i < 5; i ++)
 169   3            {
 170   4              if (swstr[i] != rec[i])
 171   4                {same = 1;}
 172   4              swstr[i] = rec[i];
 173   4            }
 174   3            if (same)
 175   3            {
 176   4              //通道0
 177   4              if ((rec[3] & 0x80) == rec[3])
 178   4              {
C51 COMPILER V8.08   MAIN                                                                  10/18/2008 19:47:34 PAGE 4   

 179   5                ch0 = 0;
 180   5                rl0 = 0;
 181   5              }
 182   4              else
 183   4              {
 184   5                ch0 = 1;
 185   5                rl0 = 1;
 186   5              }
 187   4              //通道1
 188   4              if ((rec[3] & 0x40) == rec[3])
 189   4              {
 190   5                ch1 = 0;
 191   5                rl1 = 0;
 192   5              }
 193   4              else
 194   4              {
 195   5                ch1 = 1;
 196   5                rl1 = 1;
 197   5              }
 198   4              //通道2
 199   4              if ((rec[3] & 0x20) == rec[3])
 200   4              {
 201   5                ch2 = 0;
 202   5                rl2 = 0;
 203   5              }
 204   4              else
 205   4              {
 206   5                ch2 = 1;
 207   5                rl2 = 1;
 208   5              }
 209   4              //通道3
 210   4              if ((rec[3] & 0x10) == rec[3])
 211   4              {
 212   5                ch3 = 0;
 213   5                rl3 = 0;
 214   5              }
 215   4              else
 216   4              {
 217   5                ch3 = 1;
 218   5                rl3 = 1;
 219   5              }
 220   4              //通道4
 221   4              if ((rec[3] & 0x08) == rec[3])
 222   4              {
 223   5                ch5 = 0;
 224   5                rl5 = 0;
 225   5              }
 226   4              else
 227   4              {
 228   5                ch0 = 5;
 229   5                rl0 = 5;
 230   5              }
 231   4              //通道6
 232   4              if ((rec[3] & 0x04) == rec[3])
 233   4              {
 234   5                ch6 = 0;
 235   5                rl6 = 0;
 236   5              }
 237   4              else
 238   4              {
 239   5                ch6 = 1;
 240   5                rl6 = 1;
C51 COMPILER V8.08   MAIN                                                                  10/18/2008 19:47:34 PAGE 5   

 241   5              }
 242   4              //通道7
 243   4              if ((rec[3] & 0x02) == rec[3])
 244   4              {
 245   5                ch7 = 0;
 246   5                rl7 = 0;
 247   5              }
 248   4              else
 249   4              {
 250   5                ch7 = 1;
 251   5                rl7 = 1;
 252   5              }
 253   4              //通道8
 254   4              if ((rec[4] & 0x80) == rec[4])
 255   4              {
 256   5                ch8 = 0;
 257   5                rl8 = 0;
 258   5              }
 259   4              else
 260   4              {
 261   5                ch8 = 1;
 262   5                rl8 = 1;
 263   5              }
 264   4              //通道9
 265   4              if ((rec[4] & 0x40) == rec[4])
 266   4              {
 267   5                ch9 = 0;
 268   5                rl9 = 0;
 269   5              }
 270   4              else
 271   4              {
 272   5                ch9 = 1;
 273   5                rl9 = 1;
 274   5              }
 275   4              //通道10
 276   4              if ((rec[4] & 0x20) == rec[4])
 277   4              {
 278   5                ch10 = 0;
 279   5                rl10 = 0;
 280   5              }
 281   4              else
 282   4              {
 283   5                ch10 = 1;
 284   5                rl10 = 1;
 285   5              }
 286   4              //监听通道
 287   4              if ((rec[4] & 0x10) == rec[4])
 288   4              {
 289   5                jt = 0;
 290   5      //          rl0 = 0;
 291   5              }
 292   4              else
 293   4              {
 294   5                jt = 1;
 295   5      //          rl0 = 1;
 296   5              }
 297   4              //音源选择通道1音频
 298   4              if ((rec[2] & 0x02) == rec[2])
 299   4              {
 300   5                sousel = 0;
 301   5                sou = 0;
 302   5              }
C51 COMPILER V8.08   MAIN                                                                  10/18/2008 19:47:34 PAGE 6   

 303   4              else
 304   4              {
 305   5                sou = 1;
 306   5              }
 307   4              //音源选择通道1TTS
 308   4              if ((rec[2] & 0x01) == rec[2])
 309   4              {
 310   5                sousel = 1;
 311   5                s42 = 0;
 312   5              }
 313   4              else
 314   4              {
 315   5                s42 = 1;
 316   5              }
 317   4            }
 318   3          
 319   3          }  
 320   2          rightflag = 0;
 321   2        }
 322   1      }
 323          
 324          
 325          void main(void) 
 326          { 
 327   1        unsigned char i, tem;
 328   1        for(i = 0; i < 22; i ++)
 329   1        {
 330   2          rec[i] = i;
 331   2        } 
 332   1        for(i = 0; i < 22; i ++)
 333   1        {
 334   2          swstr[i] = rec[pos[i]];
 335   2        }
 336   1        init_serialcomm(); //初始化串口 
 337   1        send_string_com(ss, 22);
 338   1        while ( 1 ) 
 339   1        { 
 340   2          decode();
 341   2        } 
 342   1      }
*** WARNING C280 IN LINE 327 OF MAIN.C: 'tem': unreferenced local variable


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    696    ----
   CONSTANT SIZE    =     24    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     40       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      4    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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