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

📄 demo232.lst

📁 用AMBE-1000语音压缩芯片来做窄带无线语音传输的源码
💻 LST
字号:
C51 COMPILER V8.05a   DEMO232                                                              04/20/2009 19:12:12 PAGE 1   


C51 COMPILER V8.05a, COMPILATION OF MODULE DEMO232
OBJECT MODULE PLACED IN Demo232.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Demo232.C BROWSE DEBUG OBJECTEXTEND TABS(6)

line level    source

   1          /*
   2          
   3          #define LOOPBACK  如果想本地回放,不能注释掉此定义
   4          #define PARALLEL  0
   5          南京梧桐 11:27:06
   6          这个定义,放开是并行工作方式
   7          南京梧桐 11:27:17
   8          注释掉是串行工作方式
   9          
  10          */
  11          
  12          
  13          
  14          
  15          
  16          
  17          
  18          
  19          
  20          
  21          
  22          
  23          
  24          
  25          #include "Demo232.h"
  26          #define PARALLEL
  27          #define LOOPBACK                                            //如果想本地回放,不能注释掉此定义
  28          
  29          HIBYTE pFrameData[34];
  30          
  31          BYTE nRXD_STATE = STATE_RXD_IDLE;
  32          BYTE pRXBUF[8];
  33          BYTE nRxByteCnt;
  34          BOOL bReceived = 0;
  35          
  36          main()
  37          {
  38   1            BYTE nI;
  39   1      
  40   1            DISABLE;
  41   1      
  42   1      #ifdef PARALLEL
  43   1      
  44   1            PS1_SDO = 0;
  45   1            PS2_SOCK = 0;     
  46   1      #else
                    PS2_SOCK = 0;
                    PS1_SDO = 1;
                    PRD_SOSTRB = 1;
                    P0 = 0;
              #endif
  52   1      
  53   1            //Reset AMBE1000
  54   1            _AMBERST = 0;
  55   1            for(nI = 0; nI < 100; nI++)   Delay15uS();
C51 COMPILER V8.05a   DEMO232                                                              04/20/2009 19:12:12 PAGE 2   

  56   1            _AMBERST = 1;
  57   1      
  58   1            pFrameData[0] = 0x13;
  59   1            pFrameData[1] = 0xec;
  60   1            for(nI = 2; nI < 34; nI++)
  61   1            {
  62   2                  pFrameData[nI] = 0;
  63   2            }
  64   1      
  65   1            Uart_Initial();
  66   1      
  67   1            ES = 1;
  68   1            ENABLE;
  69   1      
  70   1            
  71   1      #ifdef PARALLEL
  72   1            while(1)
  73   1            {
  74   2                  while(!EPR);
  75   2                  AMBEReadParallel();
  76   2      
  77   2                  TXData();
  78   2      
  79   2                  while(!DPE);
  80   2      
  81   2                  AMBEWriteParallel();
  82   2            }
  83   1      #else
                    while(1)
                    {
                          while(!EPR);
                          //if(EPR)
                          AMBEReadSerial();
              
                          while(!DPE);
                          //if(DPE)
                          AMBEWriteSerial();
                    }
              #endif
  95   1      
  96   1      }
  97          
  98          void AMBEReadParallel(void)
  99          {
 100   1            BYTE nI;
 101   1            P0 = 0xFF;  
 102   1            for(nI = 0; nI < 34; nI++)
 103   1            {
 104   2                  PRD_SOSTRB = 0;
 105   2                  pFrameData[nI]= P0;
 106   2                  PRD_SOSTRB = 1;
 107   2                  Delay15uS();//大于350个AMBE1000的时钟周期
 108   2            }
 109   1      }
 110          
 111          void AMBEWriteParallel(void)
 112          {
 113   1            BYTE nI;
 114   1            P0 = 0x00;
 115   1            #ifdef LOOPBACK
 116   1      
 117   1            for(nI = 0; nI < 34; nI++)
C51 COMPILER V8.05a   DEMO232                                                              04/20/2009 19:12:12 PAGE 3   

 118   1            {
 119   2                  P0 = pFrameData[nI];
 120   2                  PWR_SISTRB = 0;
 121   2                  PWR_SISTRB = 1;
 122   2                  Delay15uS();//大于350个AMBE1000的时钟周期
 123   2            }
 124   1      
 125   1            #else
              
                    if(bReceived)
                    {
                          DISABLE;
                          for(nI = 0; nI < 6; nI++)
                          pFrameData[nI+10] = pRXBUF[nI];
                          bReceived =0;
                    
                          ENABLE;
              
                          for(nI = 0; nI < 34; nI++)
                          {
                                P0 = pFrameData[nI];
                                PWR_SISTRB = 0;
                                PWR_SISTRB = 1;
                                Delay15uS();//大于350个AMBE1000的时钟周期
                          }
                    }
                    #endif
 145   1      }
 146          
 147          
 148          void AMBEReadSerial(void)
 149          {
 150   1            BYTE nI, nK ,nTemp;
 151   1            for(nI = 0; nI < 17; nI ++)
 152   1            {
 153   2                  PRD_SOSTRB = 0;
 154   2                  nTemp = 0;//xFF;
 155   2                  for(nK = 0; nK < 8; nK ++)
 156   2                  {
 157   3                        PS2_SOCK = 1;
 158   3                        if(PS1_SDO == 1) Sfr_Bit_Set(nTemp,7-nK);
 159   3                        PS2_SOCK = 0;
 160   3                  }
 161   2                  pFrameData[2*nI] = nTemp;
 162   2                  PRD_SOSTRB = 1;
 163   2                  nTemp = 0;
 164   2                  for(nK = 0; nK < 8; nK ++)
 165   2                  {
 166   3                        PS2_SOCK = 1;
 167   3                        if(PS1_SDO == 1) Sfr_Bit_Set(nTemp,7-nK);
 168   3                        PS2_SOCK = 0;
 169   3                  }
 170   2                  pFrameData[2*nI+1] = nTemp;
 171   2                  Delay15uS();//大于350个AMBE1000的时钟周期
 172   2            }
 173   1      }
 174          
 175          
 176          void AMBEWriteSerial(void)
 177          {
 178   1            BYTE nI, nK ,nTemp;
 179   1            for(nI = 0; nI < 17; nI++)
C51 COMPILER V8.05a   DEMO232                                                              04/20/2009 19:12:12 PAGE 4   

 180   1            {
 181   2                  PWR_SISTRB = 0;
 182   2                  //Delay();
 183   2                  SICK = 0;
 184   2                  SICK = 1;
 185   2                  nTemp = pFrameData[2*nI];
 186   2                  for(nK = 0; nK <=7; nK++)
 187   2                  {
 188   3                        SICK = 0;
 189   3                        SDI = Sfr_Bit_Test_True(nTemp ,7-nK);
 190   3                        SICK = 1;
 191   3                  }
 192   2                  PWR_SISTRB = 1;
 193   2                  nTemp = pFrameData[2*nI+1];
 194   2                  for(nK = 0; nK <=7; nK++)
 195   2                  {
 196   3                        SICK = 0;
 197   3                        SDI = Sfr_Bit_Test_True(nTemp ,7-nK);
 198   3                        SICK = 1;
 199   3                  }
 200   2                  Delay15uS();//大于350个AMBE1000的时钟周期
 201   2            }     
 202   1      }
 203          
 204          
 205          //P89C51  24Mhz
 206          void Delay15uS(void)
 207          {
 208   1            _nop_();_nop_();_nop_();_nop_();_nop_();
 209   1            _nop_();_nop_();_nop_();_nop_();_nop_();
 210   1            _nop_();_nop_();_nop_();_nop_();_nop_();
 211   1            _nop_();_nop_();_nop_();_nop_();_nop_();
 212   1            _nop_();_nop_();_nop_();_nop_();_nop_();
 213   1            _nop_();_nop_();_nop_();_nop_();_nop_();
 214   1      
 215   1      }     
 216          
 217          void Uart_Initial(void)
 218          {
 219   1            //Mode 1 ,Receive Enable
 220   1            SCON = 0x50;
 221   1            //Mode 3 ,Receive Enable
 222   1      
 223   1      //    SCON = 0xD0;
 224   1            //SMOD = 1
 225   1            PCON = 0x80;
 226   1            //T0 T1 Mode 2(8bit auto reload Timer)
 227   1            TMOD = 0x22;
 228   1            
 229   1      //    PCON = 0x00;//9600BPS
 230   1      //    SM2 = 1;
 231   1      //    TB8 = 1;
 232   1            
 233   1            //19200BPS 22.1184MHz Crystal
 234   1            TL1 = 0xFA;
 235   1            TH1 = 0xFA;
 236   1            
 237   1      //    TL1 = 0xFB;
 238   1      //    TH1 = 0xFB; 
 239   1            bReceived = 0;
 240   1      
 241   1            TR1 = 1;
C51 COMPILER V8.05a   DEMO232                                                              04/20/2009 19:12:12 PAGE 5   

 242   1      }
 243          
 244          void TXData(void)
 245          {
 246   1            BYTE nI;
 247   1            SBUF = 0x13;
 248   1            while(!TI);
 249   1            TI = 0;
 250   1            SBUF = 0xEC;
 251   1            while(!TI);
 252   1            TI = 0;
 253   1      
 254   1            for(nI = 0; nI < 6; nI++)
 255   1            {
 256   2                  SBUF = pFrameData[nI+10];
 257   2                  while(!TI);
 258   2                  TI = 0;
 259   2            }
 260   1      
 261   1      }
 262          
 263          //AMBE1000:2.4kbps 
 264          //Head:0x13ec
 265          //Packet:Head + 6 Bytes Voice Data
 266          
 267          void Uart_INTService(void) interrupt INTERRUPT_UART
 268          {
 269   1      
 270   1            BYTE nRxData;
 271   1            //if(TI == 1) return;
 272   1      
 273   1            if(RI == 1)
 274   1            {
 275   2                  RI = 0;
 276   2                  if(bReceived) return;
 277   2      
 278   2                  nRxData = SBUF;
 279   2      
 280   2                  switch(nRXD_STATE)
 281   2                  {     
 282   3                        case STATE_RXD_IDLE:
 283   3                        {
 284   4                              if (nRxData == 0x13) //Head
 285   4                              {
 286   5                                    nRXD_STATE = STATE_RXD_HEAD; 
 287   5                                    nRxByteCnt = 0;         
 288   5                              }
 289   4                              break;
 290   4                        }
 291   3                        case STATE_RXD_HEAD:
 292   3                        {
 293   4                              if (nRxData == 0xEC) //Head
 294   4                              {
 295   5                                    nRXD_STATE = STATE_RXD_DATA; 
 296   5                                    nRxByteCnt = 0;         
 297   5                              }
 298   4                              else
 299   4                              {
 300   5                                    nRXD_STATE = STATE_RXD_IDLE; 
 301   5                                    nRxByteCnt = 0;         
 302   5                              }
 303   4                              break;
C51 COMPILER V8.05a   DEMO232                                                              04/20/2009 19:12:12 PAGE 6   

 304   4                        }
 305   3      
 306   3                        case STATE_RXD_DATA: //Voice Data
 307   3                        {           
 308   4                        
 309   4                              pRXBUF[nRxByteCnt] = nRxData; 
 310   4                              nRxByteCnt ++;
 311   4                              if(nRxByteCnt == 6)
 312   4                              {
 313   5                                    nRxByteCnt = 0;
 314   5                                    bReceived = 1;
 315   5                                    nRXD_STATE = STATE_RXD_IDLE;
 316   5                              }
 317   4                        break;
 318   4                        }
 319   3                        default: break;
 320   3                  }
 321   2            }
 322   1      }
 323          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    541    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     10       6
   IDATA SIZE       =     34    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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