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

📄 main.lst

📁 proteus 的51实验板 .
💻 LST
📖 第 1 页 / 共 3 页
字号:
 248          {
 249   1              SDA = 1;
 250   1              _nop_();
 251   1              SCL = 1;
 252   1              _nop_();
 253   1              SCL = 0;
 254   1              }
 255          /*******************************************************************************
 256          *** 函 数 名: static void       IIC_Stop(void)
 257          *** 功能描述: 终止IIC传输;
 258          *** 全局变量: NO !
 259          *** 输          入: NO !
 260          *** 输          出: NO !
 261          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 262          *** 修 改 人:                                                                          日期:2006-11-28
 263          *** 函数说明: 操作完成后保证SCL为1,同时打开中断;
 264          /******************************************************************************/
 265           void IIC_Stop(void)
 266          {
 267   1              SDA = 0;                //to stop IIC;
 268   1              SCL = 0;
 269   1              _nop_();
 270   1              SCL = 1;
 271   1              _nop_();
 272   1              SDA = 1;                //IIC Stoped !! 结束IIC之后传输线全部置1;
 273   1              EA = 1;                 //Set EA.
 274   1              }
 275          void init_serialcomm(void)
 276          
 277          {                                                                                                                                                                                                                
 278   1           SCON=0x50;              //在11.0592MHz下,设置串行口波特率为9600,方式1,并允许接收                            
 279   1           PCON=0x00;                                                  
 280   1           ES=1;                                                                
 281   1           TMOD=0x21;   //定时器工作于方式2,自动装载方式                             
 282   1           TH0=(65536-1000)%256;              
 283   1           TL0=(65536-1000)/256;         
 284   1              TL1=0xfd;               
 285   1           TH1=0xfd;            
 286   1           ET0=1;                     
 287   1              TR0=1;          
 288   1              TR1=1;    
 289   1           //TI=0;             
 290   1           //   EA=1;  
 291   1         //TI=1; 
 292   1      }
 293          
 294          void serial () interrupt 4 using 3 
 295          
 296          {   
 297   1      
 298   1        /* if(RI)
 299   1      
 300   1        { RI=0;
 301   1      
 302   1          ch=SBUF;
 303   1      
C51 COMPILER V8.08   MAIN                                                                  02/14/2008 16:13:50 PAGE 6   

 304   1             TI=1;           //置SBUF空
 305   1      
 306   1          switch(ch)
 307   1         
 308   1         {
 309   1      
 310   1         case 0x01 :printf("A");  TI=0;break;
 311   1      
 312   1         case 0x02 :printf("B");  TI=0;break;
 313   1      
 314   1         case 0x03 :printf("C");  TI=0;break;
 315   1      
 316   1         case 0x04 :printf("D");  TI=0;break;
 317   1      
 318   1         default  :printf("fg");   TI=0;break;
 319   1         }       
 320   1        }*/   
 321   1       }
 322          //向串口发送一个字符 
 323          void send_char_com(unsigned char ch)  
 324          {
 325   1         SBUF=ch;    while(TI==0);    TI=0;
 326   1      }//向串口发送一个字符串,strlen为该字符串长度 
 327          void send_string_com(unsigned char *str,unsigned int strlen){  
 328   1       unsigned int k=0;  
 329   1         do     {        send_char_com(*(str + k));        k++;    } 
 330   1         while(k < strlen);
 331   1         }   
 332          
 333          
 334           void PCF8583_ReadDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
 335          {
 336   1              unsigned char i;
 337   1              IIC_Start();                    //启动IIC Bus;
 338   1              IIC_TxByte(0xa0);       //PCF8583设备寻址;命令:写;
 339   1              IIC_WaitAck();          //等待Ack信号;
 340   1              IIC_TxByte(addrInter);  //发送内部寄存器地址;
 341   1              IIC_WaitAck();                                  //等待Ack信号;
 342   1              
 343   1              IIC_Start();                    //参考PCF读Read Mode时序;
 344   1              IIC_TxByte(0xa1);       //PCF8583设备寻址,命令:读;
 345   1              IIC_WaitAck();
 346   1              
 347   1              for(i=0;i<num-1;i++)
 348   1              {
 349   2                      buff[i] = IIC_RxByte(); //读一个字节;
 350   2                      IIC_SendAck();                                  //发送应答信号;
 351   2                      }
 352   1              buff[num-1]     = IIC_RxByte();
 353   1              IIC_SendNoAck();                                        //最后一个字节发送非应答信号;
 354   1              IIC_Stop();             //终止本次传输,IIC Bus空闲;
 355   1              }
 356           /*******************************************************************************
 357          *** 函 数 名: extern void PCF8583_WriteDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
 358          *** 功能描述: 对PCF8583写;
 359          *** 全局变量: NO !
 360          *** 输          入: addrInter:内部寻址;num:数据长度;buff:数据缓存;
 361          *** 输          出: NO !
 362          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 363          *** 修 改 人:                                                                          日期:2006-11-28
 364          *** 函数说明: IIC Start至Stop间传输的字节数不限;
 365                                                                  PCF8583内部寄存器地址附自增功能;
C51 COMPILER V8.08   MAIN                                                                  02/14/2008 16:13:50 PAGE 7   

 366          /******************************************************************************/
 367           void PCF8583_WriteDat(unsigned char addrInter,unsigned char num,unsigned char *buff)
 368          {
 369   1              unsigned char i;
 370   1              
 371   1              IIC_Start();
 372   1              IIC_TxByte(0xa0);
 373   1              IIC_WaitAck();
 374   1              
 375   1              IIC_TxByte(addrInter);
 376   1              IIC_WaitAck();
 377   1              
 378   1              for(i=0;i<num;i++)
 379   1              {
 380   2                      IIC_TxByte(buff[i]);
 381   2                      IIC_WaitAck();
 382   2                      }
 383   1              
 384   1              IIC_Stop();
 385   1              }
 386          /*******************************************************************************
 387          *** 函 数 名: extern void PCF8583_WriteByte(unsigned char addrInter,unsigned char val)
 388          *** 功能描述: 对PCF8583写一个字节;
 389          *** 全局变量: NO !
 390          *** 输          入: addrInter:内部寻址;val:待写字节数据;
 391          *** 输          出: NO !
 392          *** 创 建 人:huangtiexiong                       日期:2006-11-28
 393          *** 修 改 人:                                                                          日期:2006-11-28
 394          *** 函数说明: 参照PCF8583读时序;
 395          /******************************************************************************/
 396           void PCF8583_WriteByte(unsigned char addrInter,unsigned char val)
 397          {
 398   1              IIC_Start();
 399   1              
 400   1              IIC_TxByte(0xa0);
 401   1              IIC_WaitAck();
 402   1              
 403   1              IIC_TxByte(addrInter);
 404   1              IIC_WaitAck();
 405   1              IIC_TxByte(val);
 406   1              IIC_WaitAck();
 407   1        
 408   1              IIC_Stop();
 409   1              }
 410          
 411           void PCF8583_Init(void)
 412          {
 413   1              PCF8583_WriteByte(0x00,0x00);           //Control reg. Alarm disabled。
 414   1      }
 415          
 416          
 417          
 418          
 419          /**************************************************************************************************
 420          名称:SentByte
 421          描述:字节数据传送子程序发送一个字节数据或地址给被控器PCF8574
 422          **************************************************************************************************/
 423          void sentbyte(unsigned char  sentd)
 424          {
 425   1            unsigned char  i;
 426   1            for(i=0;i<8;i++)         //要传送的数据长度为8 位
 427   1               { 
C51 COMPILER V8.08   MAIN                                                                  02/14/2008 16:13:50 PAGE 8   

 428   2              sentd<<=1;           //要发送的数据左移
 429   2           SDA=CY;
 430   2                 _nop_();
 431   2           _nop_();
 432   2           SCL=1;          //置时钟线为高通知被控器开始接收数据位
 433   2           _nop_();          //保证时钟高周期大于4 us
 434   2           _nop_();
 435   2           _nop_();
 436   2           _nop_();
 437   2           _nop_();
 438   2                 SCL=0;         //钳住总线准备接收下一个数据位
 439   2               }
 440   1             _nop_();
 441   1      _nop_();
 442   1             SDA=1;            //8 位发送完后释放数据线准备收应答位
 443   1             _nop_();
 444   1      _nop_();
 445   1      SCL=1;           //开始接收应答信号
 446   1      _nop_();
 447   1      _nop_();
 448   1      _nop_();
 449   1      _nop_();
 450   1             _nop_();     //判断是否接收到应答信号正常转AckEnd
 451   1      _nop_();
 452   1      SCL=0;       //发送结束钳住总线准备下一步发送或接收数据或进行其它处理
 453   1      }
 454          //*************************************************************************************************
 455          //名称:SendData
 456          //描述:发送1个字节数据给PCF8574
 457          //************************************************************************************************
 458          void senddata(unsigned char ucI)
 459          {
 460   1            unsigned char  datauci=0;
 461   1            IIC_Start();
 462   1            sentbyte(slvadr);
 463   1            datauci=ucI;
 464   1            sentbyte(datauci);
 465   1            IIC_Stop();
 466   1            //delay_1ms(10);
 467   1      }
 468          unsigned char  getbyte(void)
 469          {
 470   1      
 471   1            unsigned char temp,rbyte=0;
 472   1          for(temp=8;temp!=0;temp--) {
 473   2              SCL=1;
 474   2              rbyte=rbyte<<1;
 475   2              rbyte=rbyte|((unsigned char)(SDA));
 476   2              SCL=0;
 477   2          }
 478   1          return(rbyte);
 479   1      /*unsigned char  i,read;
 480   1      
 481   1      
 482   1      
 483   1      
 484   1      SDA=1;
 485   1            for(i=0;i<8;i++)         //要传送的数据长度为8 位
 486   1               { 
 487   1      SCL=1;
 488   1      //_nop_();
 489   1      //_nop_();
C51 COMPILER V8.08   MAIN                                                                  02/14/2008 16:13:50 PAGE 9   

 490   1      //_nop_();
 491   1      
 492   1           CY=SDA;
 493   1           read<<=1;           //要发送的数据左移        
 494   1           //_nop_();
 495   1           //_nop_();
 496   1           //SCL=1;          //置时钟线为高通知被控器开始接收数据位
 497   1           //_nop_();          //保证时钟高周期大于4 us
 498   1           //_nop_();
 499   1           //_nop_();
 500   1           //_nop_();
 501   1           //_nop_();
 502   1                 SCL=0;         //钳住总线准备接收下一个数据位
 503   1               }

⌨️ 快捷键说明

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