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

📄 subp.lst

📁 51单片机与SL811HST做从机的音频控制程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
C51 COMPILER V7.20   SUBP                                                                  07/05/2004 23:23:35 PAGE 1   


C51 COMPILER V7.20, COMPILATION OF MODULE SUBP
OBJECT MODULE PLACED IN subp.OBJ
COMPILER INVOKED BY: F:\keil\C51\BIN\C51.EXE subp.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          #include <sl811.h>
   2          #include <des.h>
   3          #include <reg51.h>
   4          #include <varial.h>
   5          
   6          
   7          //--------------------------------
   8           // wait  usb reset  5ms
   9           //-------------------------------
  10          void Delay(void)
  11          {
  12   1        BYTE   i,u;
  13   1       for(u=40;u>0;u--)
  14   1       {
  15   2       i=255;
  16   2       while(i--);
  17   2       }
  18   1       }
  19          //*****************************************************************************************
  20          //  BYTE Read from SL811H
  21          // a = register address
  22          // return = data in register
  23          //*****************************************************************************************
  24           BYTE SL811Read( BYTE a)
  25          {  
  26   1              SL811H_ADDR = a;                        
  27   1              return (SL811H_DATA);
  28   1      }
  29          
  30          //*****************************************************************************************
  31          //  BYTE Write to SL811H
  32          // a = register address
  33          // d = data to be written to this register address
  34          //*****************************************************************************************
  35          void SL811Write( BYTE a,  BYTE d)
  36          {  
  37   1              SL811H_ADDR = a;        
  38   1              SL811H_DATA = d;
  39   1         
  40   1      }
  41          
  42          //*****************************************************************************************
  43          // Buffer Read from SL811H
  44          // addr = buffer start address
  45          // s    = return buffer address where data are to be save/read
  46          // c    = buffer data length
  47          //*****************************************************************************************
  48          void SL811BufRead( BYTE addr,  BYTE *s,  BYTE c)
  49          {       
  50   1              SL811H_ADDR = addr;     
  51   1              while (c--) 
  52   1                      *s++ = SL811H_DATA;
  53   1      }
  54          
  55          //*****************************************************************************************
C51 COMPILER V7.20   SUBP                                                                  07/05/2004 23:23:35 PAGE 2   

  56          // Buffer Write  to SL811H
  57          // addr = buffer start address
  58          // s    = buffer address where data are to be written
  59          // c    = buffer data length
  60          //*****************************************************************************************
  61          void SL811BufWrite( BYTE addr,  BYTE *s,  BYTE c)
  62          {//      BYTE i;
  63   1              SL811H_ADDR = addr;     
  64   1              while (c--) 
  65   1              SL811H_DATA = *s++;
  66   1      
  67   1              // for(i=0;i<c;i++)
  68   1          //   SL811H_DATA = *(s+i);
  69   1      }
  70          
  71          //*****************************************************************************************
  72          // Swap high and low  BYTE 
  73          //*****************************************************************************************
  74          WORD WordSwap(WORD input)
  75          {
  76   1              return(((input&0x00FF)<<8)|((input&0xFF00)>>8));
  77   1      }
  78          
  79          //*****************************************************************************************
  80          // Audio Control Key Scanning Routine 
  81          //*****************************************************************************************
  82          void audio_key_scan(void)
  83          {
  84   1      //      Audio_Keys = (~P1) & AUDIO_KEYS;                                // Mute/Vol Up/Vol Down Keys
  85   1      //       if(Audio_Keys != Prev_Audio_Keys)                              // Detect for any changes
  86   1           
  87   1      //      {       
  88   1              key_temp=P1;
  89   1                   if((key_temp&0xff)!=0xff)
  90   1                          {  Delay();
  91   2                                 Delay();
  92   2                                key_temp=P1;
  93   2                    if((key_temp&0xff)!=0xff)
  94   2                                  { Delay();
  95   3                                    Delay();  
  96   3                                if((~key_temp)>=0x10)
  97   3                                          key2=~key_temp;
  98   3                                         else
  99   3                                         key1=~key_temp;
 100   3                                        flag_ep1=1;
 101   3                                        
 102   3                               
 103   3                        SL811Write(EP1A_Slave_Buf,key1);              // send bitmap back to host
 104   3                SL811Write(EP1A_Slave_Buf+1,key2);
 105   3             // SL811BufWrite(EP1A_Slave_Buf,(BYTE*)key,0x31);
 106   3                      EP1A_IN_Arm(EP1A_Slave_Buf,2,ep1_toggle);       // Arm Ep1 and toggle data
 107   3                  key1=key2=0;
 108   3                        }
 109   2                        }
 110   1                        else
 111   1                         EP1A_IN_Arm(0,0,ep1_toggle);
 112   1                        // SL811Write(EP1AControl,SEND_STALL);            //send nak
 113   1              //}    
 114   1              //Prev_Audio_Keys = Audio_Keys;                                 // update previous key states
 115   1      }
 116          
 117          //*****************************************************************************************
C51 COMPILER V7.20   SUBP                                                                  07/05/2004 23:23:35 PAGE 3   

 118          // Internet Control Key Scanning Routine
 119          //*****************************************************************************************
 120          /*void internet_key_scan(void)
 121          {
 122                  return;
 123          }
 124           */
 125          //*****************************************************************************************
 126          // EP1 interrupt service routine 
 127          //*****************************************************************************************
 128          void ep1_isr(void)
 129          //int ep1_isr(void)
 130          {
 131   1              SL811Write(IntStatus,EP1_DONE);                                 // clear EP1 interrupt  
 132   1      //      if(SL811Read(EP1AStatus) & EP_ACK)                              // check for ACK bit set
 133   1                      ep1_toggle = (((SL811Read(EP1AControl)&DATAX)==0) ? 1:0);                       
 134   1      //      else                                                                                    // toggle DATA sequence         
 135   1              audio_key_scan();
 136   1                 
 137   1      //      return;
 138   1      }
 139          
 140          //*****************************************************************************************
 141          // EP1's IN Token Arming (using Set A)
 142          //*****************************************************************************************
 143          void EP1A_IN_Arm( BYTE buf_adr,  BYTE len,  BYTE seq)
 144          {                                                                                               
 145   1          SL811Write(EP1AAddress,buf_adr);                            // ep1 address buffer start adress
 146   1              SL811Write(EP1AXferLen,len);                                    // max length of transfer allowed
 147   1              if(seq)
 148   1                  SL811Write(EP1AControl,DATA1_IN);                   // armed to transmit to host, DATA1
 149   1              else
 150   1                  SL811Write(EP1AControl,DATA0_IN);                   // armed to transmit to host, DATA0
 151   1      }
 152          
 153          //*****************************************************************************************
 154          // SOF interrupt service routine (act as 1ms timer)
 155          //*****************************************************************************************
 156          //int sof_isr(void)
 157          /*int sof_isr(void)
 158          {
 159                  SL811Write(IntStatus,SOF_DONE);                                 // clear SOF interrupt          
 160                  sof_cnt++;                                                                              // track msec timing
 161          

⌨️ 快捷键说明

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