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

📄 i2c_intf.lst

📁 display port接受芯片ANX9813的驱动代码。MCU使用LPC936FDH,内部包含AN9813寄存器设置
💻 LST
📖 第 1 页 / 共 2 页
字号:
C51 COMPILER V7.50   I2C_INTF                                                              10/03/2008 17:53:12 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE I2C_INTF
OBJECT MODULE PLACED IN ..\hex\i2c_intf.obj
COMPILER INVOKED BY: D:\Program Files\KEIL_UV3\C51\BIN\C51.EXE i2c_intf.c LARGE OPTIMIZE(SIZE) BROWSE DEBUG OBJECTEXTEND
                    - CODE OBJECT(..\hex\i2c_intf.obj)

line level    source

   1          //  *******************************************
   2          
   3          //  *******************************************
   4          
   5          #include <stdio.h>
   6          #include "i2c_intf.h"
   7          
   8          void print_byte(char *s, unsigned char b);
   9          
  10          
  11          
  12          #define NOP_DELAY do { _NOP_; _NOP_; } while (0)
  13          
  14          
  15          #define SCL_PULSE do { SCL_P = 1; NOP_DELAY; SCL_P = 0; NOP_DELAY; } while (0)
  16          
  17          unsigned char i2c_dev_addr;
  18          
  19          void i2c_init(void)
  20          {
  21   1              SDA_P = 1;
  22   1              SCL_P = 1;
  23   1      }
  24          
  25          void i2c_send_start_bit(void)
  26          {
  27   1              SDA_P = 0; NOP_DELAY;
  28   1              SCL_P = 0; NOP_DELAY;
  29   1      }
  30          
  31          void i2c_send_restart_bit(void)
  32          {
  33   1              SDA_P = 1; NOP_DELAY;
  34   1              SCL_P = 1; NOP_DELAY;
  35   1              SDA_P = 0; NOP_DELAY;
  36   1              SCL_P = 0; NOP_DELAY;
  37   1      }
  38          
  39          void i2c_send_stop_bit(void)
  40          {
  41   1              SDA_P = 0; NOP_DELAY;
  42   1              SCL_P = 1; NOP_DELAY;
  43   1              SDA_P = 1; NOP_DELAY;
  44   1      }
  45          
  46          void i2c_send_byte(unsigned char b)
  47          {
  48   1              unsigned char i;
  49   1              
  50   1              for (i=0; i<8; i++) {
  51   2                      ACC = b;
  52   2                      SDA_P = ACC_7;
  53   2                      SCL_PULSE;
  54   2                      b = b << 1;
C51 COMPILER V7.50   I2C_INTF                                                              10/03/2008 17:53:12 PAGE 2   

  55   2              }
  56   1      }
  57          
  58          unsigned char i2c_read_byte(void)
  59          {
  60   1              unsigned char c, i;
  61   1              
  62   1              SDA_P = 1;
  63   1              
  64   1              for (i=0; i<8; i++) {
  65   2                      SCL_P = 1; NOP_DELAY;
  66   2                      
  67   2                      ACC = c;
  68   2                      ACC = ACC << 1;
  69   2                      ACC_0 = SDA_P;
  70   2                      c = ACC;
  71   2                      SCL_P = 0; NOP_DELAY;
  72   2              }
  73   1              return c;
  74   1      }
  75          
  76          char i2c_read_ack(void)
  77          {
  78   1              char result;
  79   1              
  80   1              SDA_P = 1; NOP_DELAY;
  81   1              SCL_P = 1; NOP_DELAY;
  82   1              result = SDA_P;
  83   1              SCL_P = 0; NOP_DELAY;
  84   1              SDA_P = 1; NOP_DELAY;
  85   1              return result;
  86   1      }
  87          
  88          void i2c_send_ack(char ack)
  89          {
  90   1              SDA_P = ack; NOP_DELAY;
  91   1              SCL_P = 1; NOP_DELAY;
  92   1              SCL_P = 0; NOP_DELAY;
  93   1              SDA_P = 1; NOP_DELAY;
  94   1      }
  95          
  96          
  97          char i2c_write_reg(unsigned char offset, unsigned char d)
  98          {
  99   1              i2c_send_start_bit();
 100   1              i2c_send_byte(i2c_dev_addr);
 101   1              if (i2c_read_ack()) {
 102   2                      i2c_send_stop_bit();
 103   2                      return 1;       // no device acknowledge
 104   2              }
 105   1              i2c_send_byte(offset);
 106   1              if (i2c_read_ack()) {
 107   2                      i2c_send_stop_bit();
 108   2                      return 2;       // device no accept the data, terminate transfer
 109   2              }
 110   1              i2c_send_byte(d);
 111   1              i2c_read_ack();
 112   1              i2c_send_stop_bit();
 113   1              return 0;
 114   1      }
 115          
 116          char i2c_write_p0_reg(unsigned char offset, unsigned char d)
C51 COMPILER V7.50   I2C_INTF                                                              10/03/2008 17:53:12 PAGE 3   

 117          {
 118   1              i2c_dev_addr = PORT0_ADDR;
 119   1              return i2c_write_reg(offset, d);
 120   1      }
 121          
 122          char i2c_write_p1_reg(unsigned char offset, unsigned char d)
 123          {
 124   1              i2c_dev_addr = PORT1_ADDR;
 125   1              return i2c_write_reg(offset, d);
 126   1      }
 127          
 128          char i2c_read_reg(unsigned char offset, unsigned char *d)
 129          {
 130   1              i2c_send_start_bit();
 131   1              i2c_send_byte(i2c_dev_addr);
 132   1              if (i2c_read_ack()) {
 133   2                      i2c_send_stop_bit();
 134   2                      return 1;       // no device acknowledge
 135   2              }
 136   1              i2c_send_byte(offset);
 137   1              if (i2c_read_ack()) {
 138   2                      i2c_send_stop_bit();
 139   2                      return 2;       // device no accept the data, terminate transfer
 140   2              }
 141   1              i2c_send_restart_bit();
 142   1              i2c_send_byte(i2c_dev_addr | 0x01);
 143   1              if (i2c_read_ack())
 144   1                      return 1;       // no device acknowledge
 145   1              *d = i2c_read_byte();
 146   1              i2c_send_ack(1);
 147   1              i2c_send_stop_bit();
 148   1              return 0;
 149   1      }
 150          
 151          char i2c_read_p0_reg(unsigned char offset, unsigned char *d)
 152          {
 153   1              i2c_dev_addr = PORT0_ADDR;
 154   1              return i2c_read_reg(offset, d);
 155   1      }
 156          
 157          char i2c_read_p1_reg(unsigned char offset, unsigned char *d)
 158          {
 159   1              i2c_dev_addr = PORT1_ADDR;
 160   1              return i2c_read_reg(offset, d);
 161   1      }
 162          
 163          
 164          
 165          
 166          
 167          
 168          
 169          
 170          
 171          
C51 COMPILER V7.50   I2C_INTF                                                              10/03/2008 17:53:12 PAGE 4   

ASSEMBLY LISTING OF GENERATED OBJECT CODE


             ; FUNCTION i2c_init (BEGIN)
                                           ; SOURCE LINE # 19
                                           ; SOURCE LINE # 20
                                           ; SOURCE LINE # 21
0000 D293              SETB    P1_3
                                           ; SOURCE LINE # 22
0002 D292              SETB    P1_2
                                           ; SOURCE LINE # 23
0004 22                RET     
             ; FUNCTION i2c_init (END)

             ; FUNCTION i2c_send_start_bit (BEGIN)
                                           ; SOURCE LINE # 25
                                           ; SOURCE LINE # 26
                                           ; SOURCE LINE # 27
0000 C293              CLR     P1_3
0002 00                NOP     
0003 00                NOP     
                                           ; SOURCE LINE # 28
0004 C292              CLR     P1_2
0006 00                NOP     
0007 00                NOP     
                                           ; SOURCE LINE # 29
0008 22                RET     
             ; FUNCTION i2c_send_start_bit (END)

             ; FUNCTION i2c_send_restart_bit (BEGIN)
                                           ; SOURCE LINE # 31
                                           ; SOURCE LINE # 32
                                           ; SOURCE LINE # 33
0000 D293              SETB    P1_3
0002 00                NOP     
0003 00                NOP     
                                           ; SOURCE LINE # 34
0004 D292              SETB    P1_2
0006 00                NOP     
0007 00                NOP     
                                           ; SOURCE LINE # 35
0008 C293              CLR     P1_3
000A 00                NOP     
000B 00                NOP     
                                           ; SOURCE LINE # 36
000C C292              CLR     P1_2
000E 00                NOP     
000F 00                NOP     
                                           ; SOURCE LINE # 37
0010 22                RET     
             ; FUNCTION i2c_send_restart_bit (END)

             ; FUNCTION i2c_send_stop_bit (BEGIN)
                                           ; SOURCE LINE # 39
                                           ; SOURCE LINE # 40
                                           ; SOURCE LINE # 41
0000 C293              CLR     P1_3
0002 00                NOP     
0003 00                NOP     
                                           ; SOURCE LINE # 42
0004 D292              SETB    P1_2
0006 00                NOP     
C51 COMPILER V7.50   I2C_INTF                                                              10/03/2008 17:53:12 PAGE 5   

0007 00                NOP     
                                           ; SOURCE LINE # 43
0008 D293              SETB    P1_3
000A 00                NOP     
000B 00                NOP     
                                           ; SOURCE LINE # 44
000C 22                RET     
             ; FUNCTION i2c_send_stop_bit (END)

             ; FUNCTION _i2c_send_byte (BEGIN)
                                           ; SOURCE LINE # 46
;---- Variable 'b' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 47
                                           ; SOURCE LINE # 50
;---- Variable 'i' assigned to Register 'R6' ----
0000 E4                CLR     A
0001 FE                MOV     R6,A
0002         ?C0032:
                                           ; SOURCE LINE # 51
0002 EF                MOV     A,R7
                                           ; SOURCE LINE # 52
0003 A2E7              MOV     C,ACC_7
0005 9293              MOV     P1_3,C
                                           ; SOURCE LINE # 53
0007 D292              SETB    P1_2
0009 00                NOP     
000A 00                NOP     
000B C292              CLR     P1_2
000D 00                NOP     
000E 00                NOP     
                                           ; SOURCE LINE # 54
000F 25E0              ADD     A,ACC
0011 FF                MOV     R7,A
                                           ; SOURCE LINE # 55
0012 0E                INC     R6
0013 EE                MOV     A,R6
0014 B408EB            CJNE    A,#08H,?C0032
                                           ; SOURCE LINE # 56
0017         ?C0044:
0017 22                RET     
             ; FUNCTION _i2c_send_byte (END)

             ; FUNCTION i2c_read_byte (BEGIN)
                                           ; SOURCE LINE # 58
;---- Variable 'c' assigned to Register 'R7' ----
                                           ; SOURCE LINE # 59
                                           ; SOURCE LINE # 62

⌨️ 快捷键说明

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