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

📄 112211.lst

📁 菜鸟板的时钟 第一次学51 师兄们帮小弟看看 还有很多要改进的地方
💻 LST
📖 第 1 页 / 共 2 页
字号:
 260   1      }
 261          
 262           void IIC_Start(void)
 263          {
 264   1              SDA = 1;                //初始化总线;
 265   1              SCL = 1;                
 266   1              _nop_();_nop_();
 267   1              SDA = 0;                //启动总线;
 268   1              _nop_();_nop_();
 269   1              SCL = 0;                //准备数据发送,启动IIC之后传输线全部置0;
 270   1              }
 271          /*******************************************************************************
 272          *** 函 数 名: static void       IIC_TxByte(int8u tx_byte)
 273          *** 功能描述: 发送一个字节;
 274          *** 全局变量: NO !
 275          *** 输          入: tx_byte
 276          *** 输          出: NO !
 277          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 278          *** 修 改 人:                                                                          日期:2006-11-28
 279          *** 函数说明: 操作完成后保证SCL为0;
 280          /******************************************************************************/
 281          void  IIC_TxByte(uchar tx_byte)
 282          {//SDA:0; SCL:0.
 283   1              uchar i;
 284   1              for(i=0;i<8;i++)
 285   1              {
 286   2                      if(tx_byte & 0x80)
 287   2                              SDA = 1;                                        //因为Start函数中以把SCL拉低,数据直接发送;
 288   2                      else 
 289   2                              SDA = 0;
 290   2                      tx_byte <<= 1;                  //因为发送顺序:由Msb——>Lsb;
 291   2                      SCL = 1;                
 292   2                      _nop_();_nop_();        //延时;
 293   2                      SCL = 0;                
 294   2                      }
 295   1              }
 296          /*******************************************************************************
 297          *** 函 数 名: static bool       IIC_WaitAck(void)
 298          *** 功能描述: 发送一个字节;
 299          *** 全局变量: NO !
 300          *** 输          入: tx_byte
 301          *** 输          出: NO !
C51 COMPILER V7.07   112211                                                                01/31/2009 01:08:39 PAGE 6   

 302          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 303          *** 修 改 人:                                                                          日期:2006-11-28
 304          *** 函数说明: 操作完成后保证SCL为0;
 305          /******************************************************************************/
 306          bit     IIC_WaitAck(void)
 307          {//SDA:U; SCL:0.
 308   1              uchar waitTime = 0xff;          //设置Ack信号超时数;
 309   1              SDA = 1;                //将数据线拉高;
 310   1              SCL = 1;                //启动Ack脉冲;
 311   1              _nop_();_nop_();
 312   1              while(SDA)
 313   1              {
 314   2                      waitTime--;
 315   2                      if(!waitTime)
 316   2                              {
 317   3                                      SCL = 0;                //SCL=0;
 318   3                                      IIC_Stop();
 319   3                                      return FALSE;
 320   3                                      }
 321   2                      }
 322   1              SCL = 0;                //操作完成后确认SCL为0,此时SDA=0;
 323   1              return TRUE;    
 324   1              }
 325          /*******************************************************************************
 326          *** 函 数 名: static int8u      IIC_RxByte(void)
 327          *** 功能描述: 接收一个字节;
 328          *** 全局变量: NO !
 329          *** 输          入: NO !
 330          *** 输          出: 接收字节:tmp
 331          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 332          *** 修 改 人:                                                                          日期:2006-11-28
 333          *** 函数说明: 操作完成后保证SCL为0;
 334          /******************************************************************************/
 335          uchar IIC_RxByte(void)
 336          {//SDA:0; SCL:0;
 337   1              uchar tmp = 0;
 338   1              uchar i;
 339   1              for(i=0;i<8;i++)
 340   1              {
 341   2                      SCL = 0;
 342   2                      SDA = 1;                //向I/O口写1后准备读入;
 343   2                      _nop_();_nop_();
 344   2                      SCL = 1;
 345   2                      _nop_();_nop_();
 346   2                      tmp <<= 1;
 347   2                      if(SDA)
 348   2                              {
 349   3                                      tmp |= 0x01;
 350   3                                      }
 351   2                      }
 352   1              SCL = 0;                //SCL=0;
 353   1              return tmp;     
 354   1              }
 355          /*******************************************************************************
 356          *** 函 数 名: static void       IIC_SendAck(void)
 357          *** 功能描述: 发送应答信号;
 358          *** 全局变量: NO !
 359          *** 输          入: NO !
 360          *** 输          出: NO !
 361          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 362          *** 修 改 人:                                                                          日期:2006-11-28
 363          *** 函数说明: 操作完成后保证SCL为0;
C51 COMPILER V7.07   112211                                                                01/31/2009 01:08:39 PAGE 7   

 364          /******************************************************************************/
 365           void   IIC_SendAck(void)
 366          {
 367   1              SDA = 0;
 368   1              _nop_();_nop_();
 369   1              SCL = 1;
 370   1              _nop_();_nop_();
 371   1              SCL = 0;
 372   1              }
 373          /*******************************************************************************
 374          *** 函 数 名: static void       IIC_SendNoAck(void)
 375          *** 功能描述: 发送非应答信号;
 376          *** 全局变量: NO !
 377          *** 输          入: NO !
 378          *** 输          出: NO !
 379          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 380          *** 修 改 人:                                                                          日期:2006-11-28
 381          *** 函数说明: 操作完成后保证SCL为0;
 382          /******************************************************************************/
 383          void    IIC_SendNoAck(void)
 384          {
 385   1              SDA = 1;
 386   1              _nop_();_nop_();
 387   1              SCL = 1;
 388   1              _nop_();_nop_();
 389   1              SCL = 0;
 390   1              }
 391          /*******************************************************************************
 392          *** 函 数 名: static void       IIC_Stop(void)
 393          *** 功能描述: 终止IIC传输;
 394          *** 全局变量: NO !
 395          *** 输          入: NO !
 396          *** 输          出: NO !
 397          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 398          *** 修 改 人:                                                                          日期:2006-11-28
 399          *** 函数说明: 操作完成后保证SCL为1,同时打开中断;
 400          /******************************************************************************/
 401           void IIC_Stop(void)
 402          {
 403   1              SDA = 0;                //to stop IIC;
 404   1              SCL = 0;
 405   1              _nop_();_nop_();
 406   1              SCL = 1;
 407   1              _nop_();_nop_();
 408   1              SDA = 1;                //IIC Stoped !! 结束IIC之后传输线全部置1;
 409   1              
 410   1              }
 411          /*******************************************************************************
 412          *** 函 数 名: extern void PCF8583_ReadDat(int8u addrInter,int8u num,int8u *buff)
 413          *** 功能描述: 对PCF8583读;
 414          *** 全局变量: NO !
 415          *** 输          入: addrInter:内部寻址;num:数据长度;buff:数据缓存;
 416          *** 输          出: buff数据缓存;
 417          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 418          *** 修 改 人:                                                                          日期:2006-11-28
 419          *** 函数说明: IIC Start至Stop间传输的字节数不限;
 420                                                                  PCF8583内部寄存器地址附自增功能;
 421          /******************************************************************************/
 422            void PCF8583_ReadDat(uchar addrInter,uchar num,uchar *buff)
 423          {
 424   1              uchar i;
 425   1              IIC_Start();                    //启动IIC Bus;
C51 COMPILER V7.07   112211                                                                01/31/2009 01:08:39 PAGE 8   

 426   1              IIC_TxByte(0xa0);       //PCF8583设备寻址;命令:写;
 427   1              IIC_WaitAck();          //等待Ack信号;
 428   1              IIC_TxByte(addrInter);  //发送内部寄存器地址;
 429   1              IIC_WaitAck();                                  //等待Ack信号;
 430   1              
 431   1              IIC_Start();                    //参考PCF读Read Mode时序;
 432   1              IIC_TxByte(0xa1);       //PCF8583设备寻址,命令:读;
 433   1              IIC_WaitAck();
 434   1              
 435   1              for(i=0;i<num-1;i++)
 436   1              {
 437   2                      buff[i] = IIC_RxByte(); //读一个字节;
 438   2                      IIC_SendAck();                                  //发送应答信号;
 439   2                      }
 440   1              buff[num-1]     = IIC_RxByte();
 441   1              IIC_SendNoAck();                                        //最后一个字节发送非应答信号;
 442   1              IIC_Stop();             //终止本次传输,IIC Bus空闲;
 443   1              }
 444          /*******************************************************************************
 445          *** 函 数 名: extern void PCF8583_WriteDat(int8u addrInter,int8u num,int8u *buff)
 446          *** 功能描述: 对PCF8583写;
 447          *** 全局变量: NO !
 448          *** 输          入: addrInter:内部寻址;num:数据长度;buff:数据缓存;
 449          *** 输          出: NO !
 450          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 451          *** 修 改 人:                                                                          日期:2006-11-28
 452          *** 函数说明: IIC Start至Stop间传输的字节数不限;
 453                                                                  PCF8583内部寄存器地址附自增功能;
 454          /******************************************************************************/
 455           void PCF8583_WriteDat(uchar addrInter,uchar num,uchar *buff)
 456          {
 457   1              uchar i;
 458   1              
 459   1              IIC_Start();
 460   1              IIC_TxByte(0xa0);
 461   1              IIC_WaitAck();
 462   1              
 463   1              IIC_TxByte(addrInter);
 464   1              IIC_WaitAck();
 465   1              
 466   1              for(i=0;i<num;i++)
 467   1              {
 468   2                      IIC_TxByte(buff[i]);
 469   2                      IIC_WaitAck();
 470   2                      }
 471   1              
 472   1              IIC_Stop();
 473   1              }
 474          /*******************************************************************************
 475          *** 函 数 名: extern void PCF8583_WriteByte(int8u addrInter,int8u val)
 476          *** 功能描述: 对PCF8583写一个字节;
 477          *** 全局变量: NO !
 478          *** 输          入: addrInter:内部寻址;val:待写字节数据;
 479          *** 输          出: NO !
 480          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 481          *** 修 改 人:                                                                          日期:2006-11-28
 482          *** 函数说明: 参照PCF8583读时序;
 483          /******************************************************************************/
 484           void PCF8583_WriteByte(uchar addrInter,uchar val)
 485          {
 486   1              IIC_Start();
 487   1              
C51 COMPILER V7.07   112211                                                                01/31/2009 01:08:39 PAGE 9   

 488   1              IIC_TxByte(0xa0);
 489   1              IIC_WaitAck();
 490   1              
 491   1              IIC_TxByte(addrInter);
 492   1              IIC_WaitAck();
 493   1              IIC_TxByte(val);
 494   1              IIC_WaitAck();
 495   1              IIC_Stop();
 496   1      }
 497          
 498          
 499          void main(void)
 500          {  
 501   1           TIMERIni();
 502   1            //ISendByte( PCF8583, 0x00, 0x08);
 503   1      PCF8583_WriteByte(0x00,0x00);
 504   1            while(1)
 505   1              {
 506   2                  keyboard();
 507   2                    if(key>0)
 508   2                      {
 509   3                        menu();
 510   3                      }
 511   2      
 512   2                      
 513   2              }
 514   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1257    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     34      19
   IDATA SIZE       =   ----    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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