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

📄 i2c.lst

📁 一个流量控制仪器的源码
💻 LST
📖 第 1 页 / 共 3 页
字号:
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 1   


C51 COMPILER V7.07, COMPILATION OF MODULE I2C
OBJECT MODULE PLACED IN .\Output\I2C.obj
COMPILER INVOKED BY: M:\Keil\C51\BIN\C51.EXE I2C.C ROM(COMPACT) BROWSE MODP2 DEBUG OBJECTEXTEND CODE LISTINCLUDE SYMBOLS
                    - PRINT(.\List\I2C.lst) OBJECT(.\Output\I2C.obj)

stmt level    source

   1          /*******************************************************************
   2          P89C668 单片机硬件I2C 软件包I2C.c 主方式
   3          
   4          668 的硬件I2C 接口定义在P1.6,P1.7 上,分别为P1.6=SCL;P1.7=SDA; (开漏输出)
   5          相应寄存器      地址寄存器S1ADR --用于存放自身从地址(从方式时才有用)。
   6                          数据寄存器S1DAT --接收/发送数据用。
   7                          控制寄存器S1CON --用于硬件I2C 的设置使能、启动、结束,
   8                                          应答控制,中断标志等。
   9                          状态寄存器S1STA --指示I2C 总线的操作状态码,高5 位有效
  10                                          若I2C 中断志置位,可查询此寄存器判断
  11                                          总线情况。
  12                                          
  13          !此软件包是以查询方式完成各种总线操作的,在使用前应对总线进行检查,并
  14          使用看门狗,以防等待总线而造成死机。
  15          
  16          !系统工作主频不要高于12MHz
  17          
  18          *******************************************************************/
  19          
  20          #include <REG668.H>     /*P89C668 的硬件I2C 定义与552 的一样*/
   1      =1  /*-------------------------------------------------------------------------
   2      =1  REG668.H
   3      =1  
   4      =1  Header file for Philips 8xC668
   5      =1    
   6      =1  Copyright (c)2002 Keil Elektronik GmbH and Keil Software, Inc.
   7      =1  All rights reserved.
   8      =1  -------------------------------------------------------------------------*/
   9      =1  
  10      =1  #ifndef __REG668_H__
  11      =1  #define __REG668_H__
  12      =1  
  13      =1  /*  BYTE Registers  */
  14      =1  sfr ACC         = 0xE0;
  15      =1  sfr AUXR        = 0x8E;
  16      =1  sfr AUXR1       = 0xA2;
  17      =1  sfr B   = 0xF0;
  18      =1  sfr CCAP0H      = 0xFA;
  19      =1  sfr CCAP1H      = 0xFB;
  20      =1  sfr CCAP2H      = 0xFC;
  21      =1  sfr CCAP3H      = 0xFD;
  22      =1  sfr CCAP4H      = 0xFE;
  23      =1  sfr CCAP0L      = 0xEA;
  24      =1  sfr CCAP1L      = 0xEB;
  25      =1  sfr CCAP2L      = 0xEC;
  26      =1  sfr CCAP3L      = 0xED;
  27      =1  sfr CCAP4L      = 0xEE;
  28      =1  sfr CCAPM0      = 0xC2;
  29      =1  sfr CCAPM1      = 0xC3;
  30      =1  sfr CCAPM2      = 0xC4;
  31      =1  sfr CCAPM3      = 0xC5;
  32      =1  sfr CCAPM4      = 0xC6;
  33      =1  sfr CCON        = 0xC0;
  34      =1  sfr CH          = 0xF9;
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 2   

  35      =1  sfr CL          = 0xE9;
  36      =1  sfr CMOD        = 0xC1;
  37      =1  sfr DPH         = 0x83;
  38      =1  sfr DPL         = 0x82;
  39      =1  sfr IEN0        = 0xA8;
  40      =1  sfr IEN1        = 0xE8;
  41      =1  sfr IP          = 0xB8;
  42      =1  sfr IPH         = 0xB7;
  43      =1  sfr P0          = 0x80;
  44      =1  sfr P1          = 0x90;
  45      =1  sfr P2          = 0xA0;
  46      =1  sfr P3          = 0xB0;
  47      =1  sfr PCON        = 0x87;
  48      =1  sfr PSW         = 0xD0;
  49      =1  sfr RCAP2H      = 0xCB;
  50      =1  sfr RCAP2L      = 0xCA;
  51      =1  sfr SADDR       = 0xA9;
  52      =1  sfr SADEN       = 0xB9;
  53      =1  sfr S0BUF       = 0x99;
  54      =1  sfr S0CON       = 0x98;
  55      =1  sfr SP  = 0x81;
  56      =1  sfr S1DAT       = 0xDA;
  57      =1  sfr S1IST       = 0xDC;
  58      =1  sfr S1ADR       = 0xDB;
  59      =1  sfr S1STA       = 0xD9;
  60      =1  sfr S1CON       = 0xD8;
  61      =1  sfr TCON        = 0x88;
  62      =1  sfr T2CON       = 0xC8;
  63      =1  sfr T2MOD       = 0xC9;
  64      =1  sfr TH0         = 0x8C;
  65      =1  sfr TH1         = 0x8D;
  66      =1  sfr TH2         = 0xCD;
  67      =1  sfr TL0         = 0x8A;
  68      =1  sfr TL1         = 0x8B;
  69      =1  sfr TL2         = 0xCC;
  70      =1  sfr TMOD        = 0x89;
  71      =1  sfr WDTRST      = 0xA6;
  72      =1  
  73      =1  /*  BIT Registers  */
  74      =1  
  75      =1  sbit  CY     =   PSW^7;
  76      =1  sbit  AC     =   PSW^6;
  77      =1  sbit  F0     =   PSW^5;
  78      =1  sbit  RS1    =   PSW^4;
  79      =1  sbit  RS0    =   PSW^3;
  80      =1  sbit  OV     =   PSW^2;
  81      =1  sbit  UD     =   PSW^1;
  82      =1  sbit  P      =   PSW^0;
  83      =1  
  84      =1  sbit  AD7    =   P0^7;
  85      =1  sbit  AD6    =   P0^6;
  86      =1  sbit  AD5    =   P0^5;
  87      =1  sbit  AD4    =   P0^4;
  88      =1  sbit  AD3    =   P0^3;
  89      =1  sbit  AD2    =   P0^2;
  90      =1  sbit  AD1    =   P0^1;
  91      =1  sbit  AD0    =   P0^0;
  92      =1  
  93      =1  sbit  TF1    =   TCON^7;
  94      =1  sbit  TR1    =   TCON^6;
  95      =1  sbit  TF0    =   TCON^5;
  96      =1  sbit  TR0    =   TCON^4;
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 3   

  97      =1  sbit  IE1    =   TCON^3;
  98      =1  sbit  IT1    =   TCON^2;
  99      =1  sbit  IE0    =   TCON^1;
 100      =1  sbit  IT0    =   TCON^0;
 101      =1  
 102      =1  sbit  SDA     =   P1^7;
 103      =1  sbit  SCL     =   P1^6;
 104      =1  sbit  CEX2    =   P1^5;
 105      =1  sbit  CEX1    =   P1^4;
 106      =1  sbit  CEX0    =   P1^3;
 107      =1  sbit  ECI     =   P1^2;
 108      =1  sbit  T2EX    =   P1^1;
 109      =1  sbit  T2      =   P1^0;
 110      =1  
 111      =1  sbit  SM0    =   S0CON^7;
 112      =1  sbit  FE     =   S0CON^7;
 113      =1  sbit  SM1    =   S0CON^6;
 114      =1  sbit  SM2    =   S0CON^5;
 115      =1  sbit  REN    =   S0CON^4;
 116      =1  sbit  TB8    =   S0CON^3;
 117      =1  sbit  RB8    =   S0CON^2;
 118      =1  sbit  TI     =   S0CON^1;
 119      =1  sbit  RI     =   S0CON^0;
 120      =1  
 121      =1  sbit  CR2    =   S1CON^7;
 122      =1  sbit  ENS1   =   S1CON^6;
 123      =1  sbit  STA    =   S1CON^5;
 124      =1  sbit  STO    =   S1CON^4;
 125      =1  sbit  SI     =   S1CON^3;
 126      =1  sbit  AA     =   S1CON^2;
 127      =1  sbit  CR1    =   S1CON^1;
 128      =1  sbit  CR0    =   S1CON^0;
 129      =1  
 130      =1  sbit  AD15    =   P2^7;
 131      =1  sbit  AD14    =   P2^6;
 132      =1  sbit  AD13    =   P2^5;
 133      =1  sbit  AD12    =   P2^4;
 134      =1  sbit  AD11    =   P2^3;
 135      =1  sbit  AD10    =   P2^2;
 136      =1  sbit  AD9     =   P2^1;
 137      =1  sbit  AD8     =   P2^0;
 138      =1  
 139      =1  sbit  EA     =   IEN0^7;
 140      =1  sbit  EC     =   IEN0^6;
 141      =1  sbit  ES1    =   IEN0^5;
 142      =1  sbit  ES0    =   IEN0^4;
 143      =1  sbit  ET1    =   IEN0^3;
 144      =1  sbit  EX1    =   IEN0^2;
 145      =1  sbit  ET0    =   IEN0^1;
 146      =1  sbit  EX0    =   IEN0^0;
 147      =1  
 148      =1  sbit  ET2    =   IEN1^0;
 149      =1  
 150      =1  sbit  RD      =   P3^7;
 151      =1  sbit  WR      =   P3^6;
 152      =1  sbit  T1      =   P3^5;
 153      =1  sbit  T0      =   P3^4;
 154      =1  sbit  INT1    =   P3^3;
 155      =1  sbit  INT0    =   P3^2;
 156      =1  sbit  TXD     =   P3^1;
 157      =1  sbit  RXD     =   P3^0;
 158      =1  
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 4   

 159      =1  sbit  TF2    =   T2CON^7;
 160      =1  sbit  EXF2   =   T2CON^6;
 161      =1  sbit  RCLK   =   T2CON^5;
 162      =1  sbit  TCLK   =   T2CON^4;
 163      =1  sbit  EXEN2  =   T2CON^3;
 164      =1  sbit  TR2    =   T2CON^2;
 165      =1  sbit  CT2    =   T2CON^1;
 166      =1  sbit  CP     =   T2CON^0;
 167      =1  
 168      =1  #endif
  21          
  22          #define uchar unsigned char
  23          
  24          
  25          
  26          /*******************************************************************
  27                                  检查总线是否正常
  28          功能:   进行I2C 总线的初始化前的检查
  29                  如果返回0,表示总线有误。
  30                  如果返回1,表示总线正常。
  31          *******************************************************************/
  32          bit I2C_CheckBus()
  33          {
  34   1              SCL=0;
  35   1              SDA=1;
  36   1              if(SDA==0)
  37   1                      return(0);      /*SCL、SDA 短路,或SDA被锁为低*/
  38   1              
  39   1              SCL=1;
  40   1              if(SCL==0)
  41   1                      return(0);      /*SCL 被锁为低*/
  42   1      
  43   1              return(1);              /*总线正常*/
  44   1      }
  45          
  46          
  47          
  48          /*******************************************************************
  49                                  申请总线
  50          功能: 进行I2C 总线的初始化--包括时钟速率,I2C 使能,发送起始信号等
  51          *******************************************************************/
  52          void I2C_GetBus()
  53          {
  54   1              I2C_CheckBus();
  55   1              S1CON=0xc5;     /*设置时钟为100K MCU 主频为12M ENS1 和AA 置位*/
  56   1                              /* 0xc5 = 1100 0101 */
  57   1              STA=1;          /*申请成为主机起动总线*/
  58   1              while(SI==0);   /*等待起始位的发送*/
  59   1      }
  60          
  61          /*******************************************************************
  62                                  结束总线
  63          功能: 用于结束总线。
  64          *******************************************************************/
  65          void I2C_Stop()
  66          {
  67   1              S1CON=0XD5;            /*结束总线*/
  68   1      }
  69          
  70          /*******************************************************************
  71                                  发送数据函数
  72          功能: 用于向总线发送数据。
C51 COMPILER V7.07   I2C                                                                   07/08/2004 05:56:07 PAGE 5   

  73          *******************************************************************/
  74          void I2C_Send(uchar c)
  75          {
  76   1              S1DAT=c;
  77   1              S1CON=0XC5;     /*清除SI 位等等*/
  78   1              while(SI==0);   /*等待数据的发送*/
  79   1      }
  80          
  81          
  82          
  83          /*******************************************************************
  84                                  向无子地址器件发送字节数据函数
  85          函数原型: bit I2C_SendByte(uchar sla,ucahr c);
  86          功能:   从启动总线到发送地址、数据,结束总线的全过程,从器件地址sla,
  87                  待发送的数据c ,如果返回1 表示操作成功,否则操作有误。
  88          ********************************************************************/
  89          bit I2C_SendByte(uchar sla,uchar c)
  90          {
  91   1              I2C_GetBus();          /*启动总线*/
  92   1      
  93   1              I2C_Send(sla);         /*发送器件地址,若无应答则返回*/
  94   1              if(S1STA!=0X18)
  95   1              {
  96   2                      S1CON=0XD5;
  97   2                      return(0);
  98   2              }
  99   1      
 100   1              I2C_Send(c);           /*发送数据,若无应答则返回*/
 101   1              if(S1STA!=0X28)
 102   1              {
 103   2                      S1CON=0XD5;
 104   2                      return(0);
 105   2              }
 106   1      
 107   1              S1CON=0XD5;            /*结束总线*/
 108   1      
 109   1              return(1);
 110   1      }
 111          
 112          

⌨️ 快捷键说明

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