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

📄 bus.lst

📁 采用台湾MRT晶捷公司的MRT4方案的液晶电视的程序
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V6.23a  BUS                                                                   09/10/2004 16:09:02 PAGE 1   


C51 COMPILER V6.23a, COMPILATION OF MODULE BUS
OBJECT MODULE PLACED IN BUS.OBJ
COMPILER INVOKED BY: d:\Keil\C51\BIN\C51.EXE BUS.C OPTIMIZE(6,SIZE) ORDER DEFINE(DEBUGMSG=0,DEBUGTOOL=0) DEBUG OBJECTEXT
                    -END CODE SYMBOLS SRC(.\BUS.SRC) 

stmt level    source

   1          /************************************************
   2          *                                               *
   3          * BUS.C:  BUS control routines.                 *
   4          *                                               *
   5          *************************************************/
   6          #include <reg51.h>
   7          #include <intrins.h>
   8          #include "mascot.h"
   9          #include "OSD.h"
  10          #include "global.h"
  11          
  12          
  13          
  14          #define USE_ASM         1
  15          
  16          /*******************************************************************
  17          * Send SCL pin high and wait for any clock stretching peripherals  *
  18          ********************************************************************/
  19          #define SCLHigh()       { SCLPin  = 1; while(!SCLPin);  }
  20          #define SCLHigh2()      { SCLPin2 = 1; while(!SCLPin2); }
  21          
  22          
  23          
  24          /********************************************************
  25          * Grasp the I2C bus, send slave address and command     *
  26          *********************************************************/
  27          void GoI2CMaster(unsigned char adr)
  28          {
  29   1      
  30   1              BusBusy = 1;
  31   1      
  32   1              if (!SCLPin) SCLHigh();
  33   1      
  34   1          NoAck = 0; 
  35   1          BusFault = 0;
  36   1      
  37   1          if (SCLPin & SDAPin) {
  38   2              SDAPin = 0; 
  39   2              _nop_();
  40   2              SCLPin = 0; 
  41   2              _nop_(); 
  42   2              SendI2CByte(adr);
  43   2          } else
  44   1              BusFault = 1;
  45   1      }
  46          
  47          
  48          
  49          
  50          /*********************************************
  51          * Send one byte of data to an I2C device     *
  52          **********************************************/
  53          void SendI2CByte(unsigned char val)
  54          {
C51 COMPILER V6.23a  BUS                                                                   09/10/2004 16:09:02 PAGE 2   

  55   1      
  56   1      #if USE_ASM
  57   1      
  58   1              ACC = val;
  59   1      #pragma asm     
  60   1      
  61   1              MOV     R7,#8
  62   1              
  63   1      SendByte1:      
  64   1              RLC             A
  65   1              MOV             SDAPin,C
  66   1              NOP
  67   1              SETB    SCLPin
  68   1              JNB             SCLPin,$
  69   1              NOP
  70   1              CLR             SCLPin
  71   1              DJNZ    R7,SendByte1    
  72   1      
  73   1              SETB    SDAPin
  74   1              NOP
  75   1              SETB    SCLPin
  76   1              JNB             SCLPin,$
  77   1              JNB             SDAPin,SendByte2
  78   1              SETB    NoAck
  79   1              
  80   1      SendByte2:      
  81   1              CLR             SCLPin
  82   1              
  83   1      #pragma endasm  
  84   1      
  85   1      #else
                      unsigned char bmsk = 0x80;
              
                  while (bmsk) {
                      SDAPin = (val & bmsk) ? 0x01 : 0x00;
                      SCLHigh(); 
                      bmsk >>= 1;
                      SCLPin = 0; 
                  }
              
              
                  SDAPin = 1;
                  SCLHigh();
                  
                  if (SDAPin) NoAck = 1;
                  
                  SCLPin = 0; 
              
              #endif
 104   1      
 105   1      }         
 106          
 107          
 108          
 109          /*********************************************
 110          * Receive byte of data from an I2C device    *
 111          **********************************************/
 112          unsigned char RcvI2CByte(unsigned char cnt)
 113          {
 114   1      #if USE_ASM
 115   1              
 116   1              B = cnt;
C51 COMPILER V6.23a  BUS                                                                   09/10/2004 16:09:02 PAGE 3   

 117   1      #pragma asm     
 118   1      
 119   1              MOV     R7,#8
 120   1              
 121   1      RcvByte1:
 122   1          SETB    SCLPin
 123   1          JNB         SCLPin,$
 124   1          MOV     C,SDAPin
 125   1          RLC     A
 126   1          CLR     SCLPin
 127   1          DJNZ    R7,RcvByte1
 128   1      
 129   1              PUSH    ACC
 130   1              MOV             A,B
 131   1          CJNE    A,#1,RcvByte2
 132   1          SETB    SDAPin
 133   1          SJMP    RcvByte3    
 134   1          
 135   1      RcvByte2:
 136   1          CLR     SDAPin
 137   1              NOP
 138   1      RcvByte3:
 139   1          SETB    SCLPin
 140   1          JNB         SCLPin,$
 141   1              NOP
 142   1              CLR     SCLPin
 143   1              NOP
 144   1              SETB    SDAPin
 145   1              POP     ACC
 146   1              
 147   1      #pragma endasm
 148   1      
 149   1              return ACC;
 150   1      
 151   1      #else
                              
                  unsigned char bval = 0, b;
              
                  for(b=0; b < 8; b++) {
                      SCLHigh(); 
                      bval <<= 1;
                      bval |= SDAPin;
                      SCLPin = 0;     
                      }
              
                  SDAPin = (cnt==1) ? 1 : 0;
                  SCLHigh();
                  SCLPin = 0;
                  SDAPin = 1;         //Clear acknowledge bit.
                  return bval;
              #endif    
 168   1      }
 169          
 170          /*************************************
 171          * Send I2C STOP, release bus         *
 172          **************************************/
 173          void SendI2CStop(void)
 174          {
 175   1          SDAPin = 0; 
 176   1          _nop_();  
 177   1          SCLHigh(); 
 178   1          _nop_();  
C51 COMPILER V6.23a  BUS                                                                   09/10/2004 16:09:02 PAGE 4   

 179   1          SDAPin = 1; 
 180   1              _nop_();
 181   1          BusBusy = 0;
 182   1      }
 183          
 184          
 185          
 186          #if USE_I2C_2
              
              /********************************************************
              * Grasp the I2C bus, send slave address and command     *
              *********************************************************/
              void GoI2CMaster2(unsigned char adr)
              {
              
                      BusBusy = 1;
              
                  if (!SCLPin2) SCLHigh2();
              
                  NoAck  = 0; 
                  BusFault = 0;
              
                  if(SCLPin2 & SDAPin2) {
                      SDAPin2 = 0; 
                      _nop_();  
                      SCLPin2 = 0; 
                      _nop_();  
                      SendI2CByte2(adr);
                  } else
                      BusFault = 1;
              }
              
              /*********************************************
              * Send one byte of data to an I2C device     *
              **********************************************/
              void SendI2CByte2(unsigned char val)
              {
              #if USE_ASM
              
                      ACC = val;
              #pragma asm     
              
                      MOV     R7,#8
                      
              SendByte1:      
                      RLC             A
                      MOV             SDAPin2,C
                      SETB    SCLPin2
                      JNB             SCLPin2,$
                      CLR             SCLPin2
                      DJNZ    R7,SendByte1    
              
                      SETB    SDAPin2
                      SETB    SCLPin2
                      JNB             SCLPin2,$
                      JNB             SDAPin2,SendByte2
                      SETB    NoAck
                      
              SendByte2:      
                      CLR             SCLPin2
                      
              #pragma endasm  
C51 COMPILER V6.23a  BUS                                                                   09/10/2004 16:09:02 PAGE 5   

              
              #else
              
                      unsigned char bmsk = 0x80;
              
                  while (bmsk) {

⌨️ 快捷键说明

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