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

📄 iic.lst

📁 万年历数字钟是一种用万年历时钟芯片实现年、月、日、时、分、秒计时
💻 LST
📖 第 1 页 / 共 2 页
字号:
 161          //返回:无
 162          //***********************************************************************************/
 163          void write_byte0()
 164          {
 165   1          SDA=0;
 166   1          SCL=1;
 167   1          delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
 168   1          SCL=0;
 169   1      }
 170          //***********************************************************************************
 171          //功能:XX子程序
 172          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
 173          //参数:无
 174          //返回:无
 175          //***********************************************************************************/
 176          void write_byte1()
 177          {
C51 COMPILER V7.06   IIC                                                                   11/15/2007 11:32:38 PAGE 4   

 178   1          SDA=1;
 179   1          SCL=1;
 180   1          delay_nop(4);               //根椐晶振时钟来修订延时时间 SDA=4.7us
 181   1          SCL=0;
 182   1          SDA=0;
 183   1      }
 184          //***********************************************************************************
 185          //功能:读取一个字节数据子程序
 186          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
 187          //参数:无
 188          //返回:无
 189          //***********************************************************************************/
 190          uchar read_byte()
 191          {
 192   1          uchar nn=0xff,mm=0x80,uu=0x7f;
 193   1          uchar j;
 194   1          uint q=0;
 195   1          for(j=0;j<8;j++)
 196   1          {
 197   2              SDA=1;
 198   2                       SCL=1;
 199   2              if(SDA==0)
 200   2              {
 201   3                  nn=(nn&uu);
 202   3                  nn=_crol_(nn,1);
 203   3                  SCL=0;
 204   3              }
 205   2              else
 206   2              {
 207   3                  nn=(nn|mm);
 208   3                  nn=_crol_(nn,1);
 209   3                  SCL=0;
 210   3              }
 211   2          }
 212   1          return(nn);
 213   1      }
 214          //***********************************************************************************
 215          //功能:写第N个字节数据子程序
 216          //描述:SCL=P3^6,SDA=P3^7;特别要留意时序和时钟频率,本子程序,用户无需调用
 217          //参数:无
 218          //返回:无
 219          //***********************************************************************************/
 220          void write_bytea(uchar CS_I2C,uchar temp[],uchar n)
 221          {
 222   1          do{
 223   2              iic_start();
 224   2              write_byte(CS_I2C);
 225   2              check_ack();
 226   2          }while(F0==1);
 227   1          write_byte(temp[n]);
 228   1          check_ack();
 229   1      }
 230          //***********************************************************************************
 231          //功能:发送N个数据字节子程序
 232          //描述:CS_I2C,ic_addr,number,send_data,用户只需调用本子程序即可
 233          //参数:发送N个字节 CS_I2C为24C02 IC地址,ic_addr为单元地址,number为连续寻址字节数,
 234          //      但不能超过各种IC的每页字节数. send_data[]为发送数据来源,CS_I2C选中哪个芯片及
 235          //      读写命令
 236          //返回:无
 237          //***********************************************************************************/
 238          void write_N_byte(uchar CS_I2C,uchar ic_addr,uchar number,uchar send_data[])
 239          {
C51 COMPILER V7.06   IIC                                                                   11/15/2007 11:32:38 PAGE 5   

 240   1          uchar idata k;
 241   1          do{
 242   2              iic_start();
 243   2              write_byte(CS_I2C);     //1010 0000/1
 244   2              check_ack();
 245   2          }while(F0==1);
 246   1          do{
 247   2              write_byte(ic_addr);
 248   2              check_ack();
 249   2          }while(F0==1);
 250   1          for(k=0;k<number;k++)
 251   1          {
 252   2              write_byte(send_data[k]);
 253   2              check_ack();
 254   2              while(F0==1)
 255   2              {
 256   3                  write_bytea(CS_I2C,send_data,k);
 257   3              }
 258   2          }
 259   1          iic_stop();
 260   1      }
 261          //***********************************************************************************
 262          //功能:接收N个字数据节子程序
 263          //描述:CS_I2C,ic_addr,number,send_data,用户只需调用本子程序即可
 264          //参数:发送N个字节 CS_I2C为24C02 IC地址,ic_addr为单元地址,number为连续寻址字节数,
 265          //      但不能超过各种IC的每页字节数. send_data[]为发送数据来源,CS_I2C选中哪个芯片及
 266          //      读写命令
 267          //返回:无
 268          //***********************************************************************************/
 269          void read_N_byte(uchar CS_I2C,uchar ic_addr,uchar number,uchar incept_data[])
 270          //uchar number,ic_addr,CS_I2C,incept_data[];    
 271          {
 272   1          uchar idata data0,l;
 273   1          do{
 274   2              iic_start();
 275   2              write_byte(CS_I2C);
 276   2              check_ack();
 277   2          }while(F0==1);
 278   1          do{
 279   2              write_byte(ic_addr);
 280   2              check_ack();
 281   2          }while(F0==1);
 282   1          
 283   1          do{
 284   2              iic_start();
 285   2              write_byte(CS_I2C+1);
 286   2              check_ack();
 287   2          }while(F0==1);
 288   1          for(l=0;l<number;l++)
 289   1          {
 290   2              data0=read_byte();
 291   2              incept_data[l]=data0;
 292   2              if(l<(number-1))    
 293   2              {
 294   3                  send_ack();
 295   3              }
 296   2          }
 297   1          nsend_ack();
 298   1          iic_stop();
 299   1      }
 300          /**********************************************************************************
 301          功能:单步延时子程序
C51 COMPILER V7.06   IIC                                                                   11/15/2007 11:32:38 PAGE 6   

 302          调用:delay_nop(unsigned char step);
 303          描述:在程序中可通过调用此程序来达到极短时间的延时效果,如:delay_nop(1);
 304          参数:unsigned char step
 305          返回:无
 306          备注:通过更改delay_nop(unsigned char step)中step的值来改变时间的长短
 307          ***********************************************************************************/
 308          void delay_nop(unsigned char step)
 309          {
 310   1          unsigned char i;
 311   1          for(i=0;i<step;i++);
 312   1      }
 313          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    504    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----      21
   IDATA SIZE       =   ----       3
   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 + -