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

📄 saa1064.lst

📁 4 BIT LED 静态驱动接口芯片的KC51程序
💻 LST
字号:
C51 COMPILER V8.01   SAA1064                                                               10/10/2007 09:48:36 PAGE 1   


C51 COMPILER V8.01, COMPILATION OF MODULE SAA1064
OBJECT MODULE PLACED IN SAA1064.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE SAA1064.c OPTIMIZE(9,SPEED) BROWSE INCDIR(..\SAA1064) DEBUG OBJECTEXTEND TA
                    -BS(8) PREPRINT

line level    source

   1          //......................................
   2          //名称: SAA1064.c 4位LED驱动芯片的接口程序
   3          //编程: 机灵小老鼠(QQ: 879381753)
   4          //日期: 20071010
   5          //
   6          //发现问题请指点,谢谢!
   7          //......................................
   8          //CPU:  89C52   11.0592MHz
   9          //环境: Keil C51 V8.01
  10          //引脚定义:
  11          //      CPU_P2.0        ---     SAA1064_SCL     时钟
  12          //      CPU_P2.1        ---     SAA1064_SDA     数据
  13          //......................................
  14          #include <Public.h>
  15          #include <Intrins.h>
  16          #include "delay_s.h"
  17          #include "saa1064.h"
  18          
  19          
  20          //内部函数
  21          static void i2c_start_cond(void);
  22          static void i2c_stop_cond(void);
  23          static uchar i2c_read_byte(void);
  24          static uchar i2c_read_byte_nack(void);
  25          static void i2c_write_byte(uchar da);
  26          
  27          //=============================================================================
  28          //接口调用函数部分
  29          //*******************************************************
  30          //序号:
  31          //              HD_SAA1064_S01
  32          //功能: 
  33          //              读出芯片的复位状态
  34          //输入: 
  35          //              add 器件的子地址 0~3
  36          //输出: 
  37          //              =1 芯片已经复位,=0 芯片在复位中
  38          //********************************************************
  39          bit     SAA1064_read_status(uchar add)
  40          {
  41   1      uchar i;
  42   1              i2c_start_cond();
  43   1              
  44   1              i2c_write_byte(SAA1064_READ |((add <<1) &0x06));//器件地址=0111 0 A1 A0 r/w
  45   1              i =i2c_read_byte_nack();                        //顺序读的方式读出一个字节
  46   1              i2c_stop_cond();
  47   1              return((i &0x80) ?1:0);
  48   1      }
  49          
  50          //*******************************************************
  51          //序号:
  52          //              HD_SAA1064_S02
  53          //功能: 
  54          //              写入指令字节和数据
C51 COMPILER V8.01   SAA1064                                                               10/10/2007 09:48:36 PAGE 2   

  55          //输入: 
  56          //              add_of_part:    器件的子地址 0~3
  57          //              add_of_reg:     器件内的寄存器地址
  58          //              len_of_all:     指定长度 1~5
  59          //              str:            存放写入指令和数据串的地址指针
  60          //str中的数据排列决定于add_of_reg和len_of_all,完整的数据如下:
  61          //ctl_byte, led1_byte,  led2_byte, led3_byte, led4_byte, 
  62          //输出: 
  63          //              无
  64          //********************************************************
  65          void SAA1064_write_string_all(uchar add_of_part, uchar add_of_reg, uchar len_of_all, uchar *str)
  66          {
  67   1      uchar i;
  68   1              if( (len_of_all ==0) ||
  69   1                  (len_of_all >5)  ||  
  70   1                  (add_of_reg >SAA1064_REGISTER_ADDR_MAX) 
  71   1              ) return;
  72   1              
  73   1              i2c_start_cond();
  74   1              i2c_write_byte(SAA1064_WRITE |((add_of_part <<1) &0x06));       //器件地址=01110 A1 A0 r/w      
  75   1              i2c_write_byte(add_of_reg);     
  76   1              for(i=0; i<len_of_all; i++)
  77   1              {
  78   2                      i2c_write_byte(str[i]);         //字节写方式写入一个字节
  79   2              }
  80   1              i2c_stop_cond();
  81   1              delay_x1ms(5);
  82   1      }
  83          
  84          //==============
  85          //内部调用函数部分
  86          //==============
  87          
  88          //----------------------------------------------
  89          //I2C 发启始条件:时钟线为高时数据线发生下降沿跳变
  90          //----------------------------------------------
  91          static void i2c_start_cond(void)
  92          {
  93   1              CODE_SCL_LOW;
  94   1              _DELAY_NOP3;
  95   1              CODE_SDA_HIGH;
  96   1              _DELAY_NOP3;
  97   1              CODE_SCL_HIGH;
  98   1              _DELAY_NOP3;
  99   1              CODE_SDA_LOW;
 100   1              _DELAY_NOP3;
 101   1      }
 102          
 103          //----------------------------------------
 104          //I2C 发结束条件:时钟线为高时数据线发生上升沿跳变
 105          //----------------------------------------
 106          static void i2c_stop_cond(void)
 107          {
 108   1              CODE_SCL_LOW;
 109   1              _DELAY_NOP3;
 110   1              CODE_SDA_LOW;
 111   1              _DELAY_NOP3;
 112   1              CODE_SCL_HIGH;
 113   1              _DELAY_NOP3;
 114   1              CODE_SDA_HIGH;
 115   1              _DELAY_NOP3;
 116   1      }
C51 COMPILER V8.01   SAA1064                                                               10/10/2007 09:48:36 PAGE 3   

 117          
 118          //----------------------------------------
 119          //      I2C 读取一个中间字节的数据
 120          //----------------------------------------
 121          static uchar i2c_read_byte(void)
 122          {
 123   1              uchar i;
 124   1              uchar da=0;
 125   1              for(i =0; i<8; i++)
 126   1              {
 127   2                      da <<=1;                //传输的数据高位在前
 128   2                      CODE_SCL_LOW;
 129   2                      _DELAY_NOP3;
 130   2                      CODE_SCL_HIGH;          //时钟为高时读数据
 131   2                                              //NOP3;
 132   2                      if (JUDGE_SAA1064_SDA) da++;
 133   2              }
 134   1              CODE_SCL_LOW;
 135   1              _DELAY_NOP3;
 136   1              CODE_SDA_LOW;                   //发送应答位
 137   1              _DELAY_NOP3;
 138   1              CODE_SCL_HIGH;
 139   1              _DELAY_NOP3;
 140   1              CODE_SCL_LOW;
 141   1              _DELAY_NOP3;
 142   1              CODE_SDA_HIGH;
 143   1              return(da);
 144   1      }
 145          
 146          //----------------------------------------
 147          //      I2C 读取一个结尾字节的数据
 148          //----------------------------------------
 149          static uchar i2c_read_byte_nack(void)
 150          {
 151   1              uchar   i;
 152   1              uchar   da =0;
 153   1              for (i =0; i<8; i++)
 154   1              {
 155   2                      da <<=1;
 156   2                      CODE_SCL_LOW;
 157   2                      _DELAY_NOP3;
 158   2                      CODE_SCL_HIGH;
 159   2                                              //NOP3;
 160   2                      if(JUDGE_SAA1064_SDA) da++;
 161   2              }
 162   1              CODE_SCL_LOW;
 163   1              _DELAY_NOP3;
 164   1              CODE_SDA_HIGH;
 165   1              _DELAY_NOP3;
 166   1              CODE_SCL_HIGH;
 167   1              _DELAY_NOP3;
 168   1              CODE_SCL_LOW;
 169   1              return( da );
 170   1      }
 171          
 172          //----------------------------------------
 173          //      I2C 写入一个字节的数据
 174          //----------------------------------------
 175          static void i2c_write_byte(uchar da )
 176          {
 177   1              uchar   i;
 178   1              for(i =0; i<8; i++)
C51 COMPILER V8.01   SAA1064                                                               10/10/2007 09:48:36 PAGE 4   

 179   1              {
 180   2                      CODE_SCL_LOW;
 181   2                      if(da&0x80)
 182   2                      {
 183   3                              CODE_SDA_HIGH;
 184   3                      }
 185   2                      else
 186   2                      {
 187   3                              CODE_SDA_LOW;
 188   3                      }
 189   2                      CODE_SCL_HIGH;
 190   2                      da <<=1;
 191   2              }
 192   1              CODE_SCL_LOW;           //第8个SCL下降沿,写入8位数据
 193   1              _DELAY_NOP3;
 194   1              CODE_SDA_HIGH;
 195   1              _DELAY_NOP3;
 196   1              CODE_SCL_HIGH;
 197   1      }
 198          
 199          //=============================================================================
 200          
 201          //End Of File


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    282    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       9
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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