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

📄 i2c.lst

📁 此程序为本人在公司开发的继电器功能测试仪
💻 LST
字号:
C51 COMPILER V7.06   I2C                                                                   08/06/2007 17:38:09 PAGE 1   


C51 COMPILER V7.06, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN I2C.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE I2C.C OPTIMIZE(9,SPEED) BROWSE DEBUG OBJECTEXTEND

stmt level    source

   1            #include <intrins.h>
   2            #include "i2c.h"
   3            //typedef unsigned char byte;
   4            //bit WRITEBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte DATABYTE);
   5            //bit READBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE);
   6            //bit WRITEDATAARRAY(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE);
   7            //bit READDATAARRAY(byte N,byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE);
   8            //sbit SDA=0X90; //P1.0
   9            //sbit SCL=0X92; //P1.2
  10            //#define DELAY1US() _nop_();_nop_();_nop_();_nop_();_nop_()
  11            //#define DELAY2US() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
  12            //#define DELAY5US() _nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_()
  13            //void START_BIT(void);
  14            //void STOP_BIT(void);
  15            //bit SEND_BYTE(unsigned char BYTEVALUE);
  16            //unsigned char RECEIVE_BYTE(void);
  17            //void ACK(bit IFACK);
  18            /* 发送一个起始位 */
  19            void START_BIT(void)
  20            {
  21   1            SDA=1;
  22   1            DELAY1US();
  23   1            SCL=1;
  24   1            DELAY5US();
  25   1            SDA=0;
  26   1            DELAY5US();
  27   1            SCL=0;
  28   1            DELAY1US();
  29   1        }
  30            /*发送一个停止位*/
  31            void STOP_BIT(void)
  32            {
  33   1            SDA=0;
  34   1            DELAY1US();
  35   1            SCL=1;
  36   1            DELAY5US();
  37   1            SDA=1;
  38   1            DELAY5US();
  39   1            DELAY1US();
  40   1        }
  41            /* 发送一个字节,如果收到应答,返回1 */
  42            bit SEND_BYTE(byte BYTEVALUE)
  43            {
  44   1            byte BITMASK=0X80;
  45   1            byte i;
  46   1            bit ACK_BIT;
  47   1            for(i=0;i<8;i++)
  48   1            {
  49   2                SDA=(BYTEVALUE&BITMASK)?1:0;
  50   2                    DELAY1US();
  51   2                    SCL=1;
  52   2                    DELAY5US();
  53   2                    SCL=0;
  54   2                    BITMASK=BITMASK>>1;
  55   2            }
C51 COMPILER V7.06   I2C                                                                   08/06/2007 17:38:09 PAGE 2   

  56   1            DELAY2US();
  57   1            SDA=1;
  58   1            DELAY2US();
  59   1            SCL=1;
  60   1            DELAY2US();
  61   1            ACK_BIT=SDA?0:1;
  62   1            SCL=0;
  63   1            return(ACK_BIT);
  64   1        }
  65            /*接收一个字节*/
  66            byte RECEIVE_BYTE(void)
  67            {
  68   1            byte BITMASK=0X80;
  69   1            byte i;
  70   1            byte RETURNVALUE=0;
  71   1            for(i=0;i<8;i++)
  72   1            {
  73   2                SDA=1;
  74   2                    SCL=0;
  75   2                    DELAY5US();
  76   2                    SCL=1;
  77   2                    DELAY2US();
  78   2                    if(SDA) RETURNVALUE|=BITMASK;
  79   2                    BITMASK=BITMASK>>1;
  80   2            }
  81   1            SCL=0;
  82   1            return(RETURNVALUE);
  83   1        }
  84            /*发出应答信号*/
  85            void ACK(bit IFACK)
  86            {
  87   1            SDA=IFACK?1:0;
  88   1            DELAY2US();
  89   1            SCL=1;
  90   1            DELAY5US();
  91   1            SCL=0;
  92   1            DELAY2US();
  93   1        }
  94            /*写一个字节,如果成功,返回0;*/
  95            bit WRITEBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte DATABYTE)
  96            {
  97   1            START_BIT();
  98   1            if(!SEND_BYTE(CON_ADDR)) return(1);
  99   1            if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
 100   1            if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
 101   1            if(!SEND_BYTE(DATABYTE)) return(1);
 102   1            STOP_BIT();
 103   1            return(0);
 104   1        }
 105            /*读一个字节,如果成功,返回0;*/
 106          /*  bit READBYTE(byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE)
 107            {
 108                START_BIT();
 109                if(!SEND_BYTE(CON_ADDR)) return(1);
 110                    if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
 111                if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
 112                    START_BIT();
 113                if(!SEND_BYTE(CON_ADDR|0X01)) return(1);
 114                *DATABYTE=RECEIVE_BYTE();
 115                ACK(0);
 116                STOP_BIT();
 117                return(0);
C51 COMPILER V7.06   I2C                                                                   08/06/2007 17:38:09 PAGE 3   

 118            }*/
 119            bit WRITEDATAARRAY(byte N,byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE)
 120            {
 121   1            char i;
 122   1            START_BIT();
 123   1                if(!SEND_BYTE(CON_ADDR)) return(1);
 124   1            if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
 125   1            if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
 126   1            for(i=0;i<N;i++)
 127   1                {
 128   2                    if(!SEND_BYTE(*DATABYTE)) return(1);
 129   2                DATABYTE++;
 130   2                }
 131   1                STOP_BIT();
 132   1                return(0);
 133   1        }
 134            bit READDATAARRAY(byte N,byte CON_ADDR,byte UNIT_ADDR_H,byte UNIT_ADDR_L,byte *DATABYTE)
 135            {
 136   1            char I;
 137   1            START_BIT();
 138   1                if(!SEND_BYTE(CON_ADDR)) return(1);
 139   1                if(!SEND_BYTE(UNIT_ADDR_H)) return(1);
 140   1            if(!SEND_BYTE(UNIT_ADDR_L)) return(1);
 141   1                START_BIT();
 142   1            if(!SEND_BYTE(CON_ADDR|0X01)) return(1);
 143   1                for(I=0;I<N;I++)
 144   1                {
 145   2                    *DATABYTE=RECEIVE_BYTE();
 146   2                        if(I==N-1)
 147   2                    {
 148   3                            ACK(1);
 149   3                        }
 150   2                else ACK(0);
 151   2                        DATABYTE++;
 152   2                }
 153   1                STOP_BIT();
 154   1                return(0);
 155   1        }
 156          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    471    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      20
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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