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

📄 display.lst

📁 用keil便宜代码超过64k的程序例子
💻 LST
📖 第 1 页 / 共 3 页
字号:
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 1   


CX51 COMPILER V7.20, COMPILATION OF MODULE DISPLAY
OBJECT MODULE PLACED IN .\display.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\CX51.EXE ..\..\test\icktest\display.c LARGE ROM(HUGE) BROWSE DEBUG PRINT(.\display.
                    -lst) OBJECT(.\display.obj)

line level    source

   1          #include "main.h"
   2          //#include "Sm8958k.h"
   3          #include <intrins.h>
   4          //#include "i2c.h"
   5          //#include "rc500.h"
   6          //#define uchar unsigned char
   7          #define  _Nop()  _nop_()        /*定义空指令*/
   8          //#define OK    0
   9          //#define NOK   1
  10          #define WRITE932        0x54
  11          #define READ932         0x55
  12          extern void alar(uint,uchar);
  13          extern startwait(uchar time);
  14          extern bit keyflag;
  15          //extern uint tage;
  16          extern bit T0IR;
  17          
  18          bit     ack;
  19          //bit alarm;    /*接收出错报警状态标志*/
  20          //bit   alarmrcv;       /*发送出错报警状态标志*/
  21          
  22          //bit SendStr(uchar sla,uchar *s);/*主发送函数*/
  23          //bit RcvStr(uchar sla,uchar *s);/*主接收函数,在中断中调用*/
  24          //bit IRcvStr(uchar sla,uchar subah,uchar subal,uchar *s,uchar no);/*test*/
  25          //bit ISendStr(uchar sla,uchar subah,uchar subal,uchar *s,uchar no);/*test*/
  26          //void delay_ms(uchar t)        ;
  27          //uchar maxtr;  /*一帧传送的最长时间,暂定20ms*/
  28          //uchar maxack; /*等待应答的最长时间,暂定20ms*/
  29          //uchar idata sendata[15]={0x06,0x21,0x22,0x23,0x24,0x25};      /*发送数据缓冲区指针*/
  30          //uchar idata rcvdata[15];      /*接收数据缓冲区指针*/
  31          //uchar N;      /*重发次数应小于5*/
  32          
  33          
  34          
  35          
  36          /*******************************************************************
  37                               起动总线函数               
  38          函数原型: void  Start_I2c();  
  39          功能:       启动I2C总线,即发送I2C起始条件.
  40            
  41          ********************************************************************/
  42          void Start_I2c()
  43          {
  44   1        SDA=1;   /*发送起始条件的数据信号*/
  45   1       TOGGLE_WD();
  46   1        _Nop();
  47   1        SCL=1;
  48   1        _Nop();    /*起始条件建立时间大于4.7us,延时*/
  49   1        _Nop();
  50   1        _Nop();
  51   1        _Nop();
  52   1        _Nop();    
  53   1        SDA=0;   /*发送起始信号*/
  54   1        _Nop();    /* 起始条件锁定时间大于4μs*/
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 2   

  55   1        _Nop();
  56   1        _Nop();
  57   1        _Nop();
  58   1        _Nop();       
  59   1        SCL=0;   /*钳住I2C总线,准备发送或接收数据 */
  60   1        _Nop();
  61   1        _Nop();
  62   1      }
  63          
  64          /*******************************************************************
  65                                结束总线函数               
  66          函数原型: void  Stop_I2c();  
  67          功能:       结束I2C总线,即发送I2C结束条件.
  68            
  69          ********************************************************************/
  70          void Stop_I2c()
  71          {
  72   1        SDA=0;  /*发送结束条件的数据信号*/
  73   1        _Nop();   /*发送结束条件的时钟信号*/
  74   1        SCL=1;  /*结束条件建立时间大于4μs*/
  75   1        _Nop();
  76   1        _Nop();
  77   1        _Nop();
  78   1        _Nop();
  79   1        _Nop();
  80   1        SDA=1;  /*发送I2C总线结束信号*/
  81   1        _Nop();
  82   1        _Nop();
  83   1        _Nop();
  84   1        _Nop();
  85   1      TOGGLE_WD();
  86   1      }
  87          
  88          /*******************************************************************
  89                           字节数据传送函数               
  90          函数原型: bit  SendByte(uchar c);
  91          功能:  将数据c发送出去,可以是地址,也可以是数据,发完后等待应答,并对
  92               此状态位进行操作.(不应答或非应答都使ack=0 假)     
  93               发送数据正常,ack=1; ack=0表示被控器无应答或损坏。
  94          返回:返回OK有应答,返回NOK无应答。
  95          ********************************************************************/
  96          bit  SendByte(uchar c)
  97          {
  98   1       uchar BitCnt;
  99   1      // uint tagesave;
 100   1       for(BitCnt=0;BitCnt<8;BitCnt++)  /*要传送的数据长度为8位*/
 101   1          {
 102   2           if((c<<BitCnt)&0x80)
 103   2           {
 104   3              SDA=1;   /*判断发送位*/
 105   3              while(SDA==0&&!T0IR)TOGGLE_WD();
 106   3              if(T0IR)return(NOK);/*超时*/
 107   3           }
 108   2             else  SDA=0;                
 109   2           _Nop();
 110   2           SCL=1;               /*置时钟线为高,通知被控器开始接收数据位*/
 111   2           while(SCL==0&&!T0IR)TOGGLE_WD();
 112   2                      if(T0IR)return(NOK);/*超时*/
 113   2       
 114   2            _Nop(); 
 115   2            _Nop();               /*保证时钟高电平周期大于4μs*/
 116   2            _Nop();
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 3   

 117   2            _Nop();
 118   2            _Nop();         
 119   2           SCL=0; 
 120   2          }
 121   1          _Nop();
 122   1          _Nop();
 123   1          _Nop();
 124   1          _Nop();
 125   1          _Nop();
 126   1          SDA=1;       /*8位发送完后释放数据线,准备接收应答位*/
 127   1         //maxack=0;  /*等待应答最长时间为20ms*/
 128   1              while (!T0IR)   /*等待应答,最长等待时间为20ms*/
 129   1              {TOGGLE_WD();
 130   2                      if(SDA==0)      /*如果有应答信号,就置应答标志信号*/
 131   2                      {
 132   3                              SCL=1;
 133   3                              _Nop();
 134   3                              _Nop();
 135   3                              //if(SDA==0)
 136   3                              //{
 137   3                                  ack=1;
 138   3                                  SCL=0;
 139   3                                  return(OK);
 140   3                               //}/*置应答标志信号*/
 141   3                      }       
 142   2                  }
 143   1          //  ack=0;  /*无应答*/
 144   1              SCL=1;
 145   1              _Nop();
 146   1              _Nop();
 147   1              SCL=0;
 148   1              ack=0;  /*无应答*/
 149   1              return(NOK);
 150   1      }
 151          
 152          /*******************************************************************
 153                           字节数据接收函数               
 154          函数原型: uchar  RcvByte();
 155          功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),
 156               发完后请用应答函数。  
 157          ********************************************************************/   
 158          uchar  RcvByte()
 159          {
 160   1        uchar retc;
 161   1        uchar BitCnt;
 162   1        
 163   1        retc=0; 
 164   1        SDA=1;             /*置数据线为输入方式*/
 165   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 166   1            {
 167   2              _Nop();           
 168   2              SCL=0;       /*置时钟线为低,准备接收数据位*/
 169   2              _Nop();
 170   2              _Nop();         /*时钟低电平周期大于4.7μs*/
 171   2              _Nop();
 172   2              _Nop();
 173   2              _Nop();
 174   2              SCL=1;       /*置时钟线为高使数据线上数据有效*/
 175   2              while(SCL==0&&!T0IR)TOGGLE_WD();
 176   2                      if(T0IR)return(NOK);/*超时*/
 177   2       
 178   2              _Nop();
CX51 COMPILER V7.20   DISPLAY                                                              08/15/2005 15:35:54 PAGE 4   

 179   2              _Nop();
 180   2              retc=retc<<1;
 181   2              if(SDA==1)retc=retc+1; /*读数据位,接收的数据位放入retc中 */
 182   2              _Nop();
 183   2              _Nop(); 
 184   2            }
 185   1        SCL=0;    
 186   1        _Nop();
 187   1        _Nop();
 188   1        return(retc);
 189   1      }
 190          
 191          /********************************************************************
 192                               应答子函数
 193          原型:  void Ack_I2c(bit a);
 194           
 195          功能:主控器进行应答信号,(可以是应答或非应答信号)
 196          ********************************************************************/
 197          void Ack_I2c(bit a)
 198          {
 199   1        
 200   1        if(a==0)SDA=0;     /*在此发出应答或非应答信号 */
 201   1              else SDA=1;
 202   1        _Nop();
 203   1        _Nop();
 204   1        _Nop();      
 205   1        SCL=1;
 206   1          _Nop();
 207   1          _Nop();              /*时钟低电平周期大于4μs*/
 208   1          _Nop();

⌨️ 快捷键说明

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