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

📄 vi2c_c51.lst

📁 本代码为SPI/I2C转双串口驱动程序。开发环境为Keil c51.
💻 LST
📖 第 1 页 / 共 2 页
字号:
 180   1      }
 181          
 182          
 183          
 184          /*******************************************************************
 185                           用户接口函数                                   
 186          *******************************************************************/
 187          
 188          
 189          /*******************************************************************
 190                           向无子地址器件发送字节数据函数               
 191          函数原型: bit  ISendByte(uchar sla,uchar c);  
 192          功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 193                    如果返回1表示操作成功,否则操作有误。
 194          注意:    使用前必须已结束总线。
 195          ********************************************************************/
 196          bit ISendByte(uchar sla,uchar c)
 197          {
 198   1         Start_I2c();               /*启动总线*/
 199   1         SendByte(sla);             /*发送器件地址*/
 200   1         if(ack==0)return(0);
 201   1         SendByte(c);               /*发送数据*/
 202   1         if(ack==0)return(0);
 203   1         Stop_I2c();                /*结束总线*/ 
 204   1         return(1);
 205   1      }
 206          
 207          
 208          
 209          
 210          /*******************************************************************
 211                              向有子地址器件发送多字节数据函数               
 212          函数原型: bit  ISendStr(uchar sla,uchar suba,uchar *s,uchar no);  
 213          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 214                    地址sla,子地址suba,发送内容是s指向的内容,发送no个字节。
 215                    如果返回1表示操作成功,否则操作有误。
 216          注意:    使用前必须已结束总线。
 217          ********************************************************************/
 218          bit ISendStr(uchar sla,uchar suba,uchar *s,uchar no)
 219          {
 220   1         uchar i;
 221   1      
 222   1         Start_I2c();               /*启动总线*/
 223   1         SendByte(sla);             /*发送器件地址*/
 224   1         if(ack==0)return(0);
 225   1         SendByte(suba);            /*发送器件子地址*/
 226   1         if(ack==0)return(0);
 227   1      
 228   1         for(i=0;i<no;i++)
 229   1         {   
 230   2           SendByte(*s);            /*发送数据*/
 231   2           if(ack==0)return(0);
 232   2           s++;
 233   2         } 
 234   1         Stop_I2c();                /*结束总线*/ 
 235   1         return(1);
 236   1      }
 237          
 238          
 239          /*******************************************************************
 240                              向无子地址器件发送多字节数据函数               
 241          函数原型: bit  ISendStrExt(uchar sla,uchar *s,uchar no);  
C51 COMPILER V7.09   VI2C_C51                                                              12/07/2005 13:58:16 PAGE 5   

 242          功能:     从启动总线到发送地址,子地址,数据,结束总线的全过程,从器件
 243                    地址sla,发送内容是s指向的内容,发送no个字节。
 244                    如果返回1表示操作成功,否则操作有误。
 245          注意:    使用前必须已结束总线。
 246          ********************************************************************/
 247          bit ISendStrExt(uchar sla,uchar *s,uchar no)
 248          {
 249   1         uchar i;
 250   1      
 251   1         Start_I2c();               /*启动总线*/
 252   1         SendByte(sla);             /*发送器件地址*/
 253   1         if(ack==0)return(0);
 254   1      
 255   1         for(i=0;i<no;i++)
 256   1         {   
 257   2           SendByte(*s);            /*发送数据*/
 258   2           if(ack==0)return(0);
 259   2           s++;
 260   2         } 
 261   1         Stop_I2c();                /*结束总线*/ 
 262   1         return(1);
 263   1      }
 264          
 265          
 266          
 267          
 268          
 269          /*******************************************************************
 270                              向无子地址器件读字节数据函数               
 271          函数原型: bit  IRcvByte(uchar sla,ucahr *c);  
 272          功能:     从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 273                    址sla,返回值在c.
 274                     如果返回1表示操作成功,否则操作有误。
 275          注意:    使用前必须已结束总线。
 276          ********************************************************************/
 277          bit IRcvByte(uchar sla,uchar *c)
 278          {
 279   1         Start_I2c();                /*启动总线*/
 280   1         SendByte(sla+1);            /*发送器件地址*/
 281   1         if(ack==0)return(0);
 282   1         *c=RcvByte();               /*读取数据*/
 283   1         Ack_I2c(1);                 /*发送非就答位*/
 284   1         Stop_I2c();                 /*结束总线*/ 
 285   1         return(1);
 286   1      }
 287          
 288          
 289          
 290          /*******************************************************************
 291                              向有子地址器件读取多字节数据函数               
 292          函数原型: bit  ISendStr(uchar sla,uchar suba,uchar *s,uchar no);  
 293          功能:     从启动总线到发送地址,子地址,读数据,结束总线的全过程,从器件
 294                    地址sla,子地址suba,读出的内容放入s指向的存储区,读no个字节。
 295                     如果返回1表示操作成功,否则操作有误。
 296          注意:    使用前必须已结束总线。
 297          ********************************************************************/
 298          bit IRcvStr(uchar sla,uchar suba,uchar *s,uchar no)
 299          {
 300   1         uchar i;
 301   1      
 302   1         Start_I2c();                  /*启动总线*/
 303   1         SendByte(sla);                /*发送器件地址*/
C51 COMPILER V7.09   VI2C_C51                                                              12/07/2005 13:58:16 PAGE 6   

 304   1         if(ack==0)return(0);
 305   1         SendByte(suba);               /*发送器件子地址*/
 306   1         if(ack==0)return(0);
 307   1      
 308   1         Start_I2c();                  /*重新启动总线*/
 309   1         SendByte(sla+1);
 310   1         if(ack==0)return(0);
 311   1         for(i=0;i<no-1;i++)
 312   1         {   
 313   2           *s=RcvByte();               /*发送数据*/
 314   2            Ack_I2c(0);                /*发送就答位*/  
 315   2           s++;
 316   2         } 
 317   1         *s=RcvByte();
 318   1         Ack_I2c(1);                   /*发送非应位*/
 319   1         Stop_I2c();                   /*结束总线*/ 
 320   1         return(1);
 321   1      }
 322          
 323          
 324          /*******************************************************************
 325                              向无子地址器件读取多字节数据函数               
 326          函数原型: bit  ISendStrExt(uchar sla,uchar *s,uchar no);  
 327          功能:     从启动总线到发送地址,读数据,结束总线的全过程.
 328                    从器件地址sla,读出的内容放入s指向的存储区,
 329                    读no个字节。如果返回1表示操作成功,否则操作有误。
 330          注意:    使用前必须已结束总线。
 331          ********************************************************************/
 332          bit IRcvStrExt(uchar sla,uchar *s,uchar no)
 333          {
 334   1         uchar i;
 335   1      
 336   1         Start_I2c();
 337   1         SendByte(sla+1);
 338   1         if(ack==0)return(0);
 339   1      
 340   1         for(i=0;i<no-1;i++)
 341   1         {   
 342   2            *s=RcvByte();               /*发送数据*/
 343   2            Ack_I2c(0);                 /*发送就答位*/  
 344   2            s++;
 345   2         } 
 346   1         *s=RcvByte();
 347   1         Ack_I2c(1);                    /*发送非应位*/
 348   1         Stop_I2c();                    /*结束总线*/ 
 349   1         return(1);
 350   1      }
 351          
 352          
 353          


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


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

⌨️ 快捷键说明

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