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

📄 text1.lst

📁 用Keil写的LPC938I2C通讯程序
💻 LST
字号:
C51 COMPILER V7.50   TEXT1                                                                 07/09/2008 09:02:19 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN Text1.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c BROWSE DEBUG OBJECTEXTEND TABS(2)

line level    source

   1          #include <reg922.h>
   2          #include <intrins.h>
   3          
   4          #define uint unsigned int
   5          #define uchar unsigned char
   6          #define _Nop()  _nop_()
   7          #define GENERATE_STOP        0x54     /* 置位 STO, 复位 STA 、 SI          */
   8          #define RELEASE_BUS_ACK      0x44     /* 复位 STO,STA,SI 并置位  AA (ack)  */
   9          #define RELEASE_BUS_NOACK    0x40     /* 复位 STO,STA,SI 并置位 AA (noack) */
  10          #define RELEASE_BUS_STA      0x64     /* 起动总线/重新起动总线, 置位 STA   */
  11          
  12          
  13          void dally_timer1(uint data ms);
  14          void SendByte(uchar c);
  15          bit ISendByte(uchar sla, uchar *c);
  16          void GetBus();
  17          
  18          /********************************************************************
  19          使用定时器1延时n毫秒
  20          ********************************************************************/
  21          void dally_timer1(uint data ms)
  22          {
  23   1        uint i;
  24   1        TR1=1;//启动定时器T1
  25   1        for(i=ms*25;i>0;i--)
  26   1        {
  27   2          while(TF1==0)
  28   2          {
  29   3            _Nop();
  30   3          };
  31   2          TF1=0;//清除T1溢出标志TF1
  32   2        }
  33   1        TR1=0;//关闭定时器T1
  34   1      }
  35          
  36          /*******************************************************************
  37          *                  申请总线
  38          * 功能:进行I2C总线的初始化--包括时钟选择,I2C使能,发送起始信号等等。
  39          *       I2EN为1,设置为主机;CRSEL位为0,使用内部SCL发生器。
  40          *******************************************************************/
  41          
  42          void GetBus()
  43          { 
  44   1        I2SCLH = 15;        /* 设置SCL高电平的PCLK周期数            */
  45   1        I2SCLL = 15;              /* 设置SCL低电平的PCLK周期数,6MHz时为100Kbit/S */
  46   1        I2CON = RELEASE_BUS_STA; /* 申请成为主机,起动总线。使用内部SCL发生器,I2EN和AA置位.*/  
  47   1        while( SI==0 );         /* 等待起始位的发送                             */
  48   1      }
  49          
  50          
  51          void SendByte(uchar c)
  52          { 
  53   1        I2DAT = c;
  54   1        I2CON = RELEASE_BUS_ACK;      /* 清除SI位等等       */
  55   1        while( SI==0 );           /* 等待数据的发送     */
C51 COMPILER V7.50   TEXT1                                                                 07/09/2008 09:02:19 PAGE 2   

  56   1      }
  57          
  58          
  59          
  60          /*******************************************************************
  61          *                    向无子地址器件发送字节数据函数               
  62          * 功能:从启动总线到发送地址,数据,结束总线的全过程。
  63          * 入口参数:sla   从器件地址
  64          *           *c    待发送的数据
  65          * 出口参数:返回1表示操作成功,否则操作有误。
  66          ********************************************************************/
  67          bit ISendByte(uchar sla, uchar *c)
  68          { 
  69   1        uchar i;
  70   1        GetBus();                   /* 启动总线                    */
  71   1        SendByte(sla);              /* 发送器件地址,并接收应答位  */
  72   1        if( I2STAT!=0x18 )      /* 无从机应答则退出操作 */
  73   1        { 
  74   2          I2CON = GENERATE_STOP;
  75   2          return(0);
  76   2        }
  77   1        for(i=0;i<4;i++)
  78   1        {
  79   2        SendByte(*c);               /* 发送数据 */
  80   2        if( I2STAT!=0x28 )
  81   2        { 
  82   3          I2CON = GENERATE_STOP;
  83   3          return(0);
  84   3        }
  85   2        c++;
  86   2        }
  87   1        I2CON = GENERATE_STOP;        /* 结束总线 */ 
  88   1        return(1);
  89   1      }
  90          
  91          
  92          void main()
  93          {
  94   1        bit TMP;
  95   1        uchar byte[4]="9678";
  96   1        P0M1=0x00;
  97   1        P0M2=0x00;
  98   1        P1M1=0x0C;//P1.2,P1.3配置为开漏,其他为双向I/O口
  99   1        P1M2=0x0C;
 100   1        P3M1=0x00;
 101   1        P3M2=0x00;
 102   1      
 103   1        P0=0xff;
 104   1        P1=0xff;
 105   1        P3=0xff;
 106   1      
 107   1        SP=0x7F;
 108   1      
 109   1        TMOD=0x20;//T1工作方式2
 110   1        TAMOD=0x00;
 111   1        TL1=0x6C;//装入T1初值
 112   1        TH1=0x6C;
 113   1      
 114   1        I2CON=0x44;//主发送器模式初始化
 115   1        I2STAT=0;
 116   1      //I2ADR=0x70;//从机地址为70h
 117   1        I2SCLH=0x0E;//数据波特率为123Kbit/s
C51 COMPILER V7.50   TEXT1                                                                 07/09/2008 09:02:19 PAGE 3   

 118   1        I2SCLL=0x0E;
 119   1        dally_timer1(1000);
 120   1        while(1)
 121   1        {
 122   2          do
 123   2          {
 124   3            TMP=ISendByte(0x70,byte);//等待发送成功
 125   3          }while(!TMP);
 126   2        } 
 127   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    201    ----
   CONSTANT SIZE    =      4    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----       4
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       1
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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