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

📄 iic.lst

📁 用51单片机实现的在屏幕上显视文字,外接一颗MT230OSDIC
💻 LST
📖 第 1 页 / 共 2 页
字号:
                 BYTE data j;
              
                 error=0;
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }   
                 IIC2_Start();
                 error=IIC2_Data_In(device);
                 if(error)
                 {
                    IIC2_Stop();
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 5   

                    return;
                 }
                 error=IIC2_Data_In(address%256);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 error=IIC2_Data_In(address/256);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 while(count!=0)
                 {
                    j=*IICBufPtr;
                    error=IIC2_Data_In(*IICBufPtr);
                    if(error)
                       break;
                    count--;
                    IICBufPtr++;
                 }
                 IIC2_Stop();
              }
              
              //iic read function with two byte address
              void IIC_Read2(BYTE device, WORD address, BYTE count)
              {
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }   
                 IIC2_Start();
                 error=IIC2_Data_In(device);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 error=IIC2_Data_In(address%256);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 error=IIC2_Data_In(address/256);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 IIC2_Stop();
                 IIC2_Start();
                 error=IIC2_Data_In(device|1);
                 if(error)
                 {
                    IIC2_Stop();
                    return;
                 }
                 while(count!=0)
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 6   

                 {
                    *IICBufPtr=IIC2_Data_Out();
                    if(count==1)  // last byte
                    {
                       Send2_Acknowledge(1);
                    }
                    else
                    {
                       Send2_Acknowledge(0);
                    }
                    count--;
                    IICBufPtr++;
                 }
                 IIC2_Stop();
              }
              
              #else
 321          #ifdef  HARDIIC2
 322          // hardware IIC
 323          // Wait for byM230_IIC_MBUFI flag and clear it, return 1 if time out, and check ack.
 324          bit wait_IIC(void)
 325          {
 326   1         IICWait=IIC_WAIT_TIME;
 327   1         error=0;
 328   1         //check MBuf sent/received
 329   1         while( (byM230_IIC_INTFLG&0x01)==0)   // Wait for byM230_IIC_MBUFl                  
 330   1         {
 331   2            if(IICWait==0)
 332   2            {
 333   3               error=1;
 334   3               break;
 335   3            }
 336   2         }
 337   1         // check ack
 338   1         if((byM230_IIC_STUS2&0x80) != 0)
 339   1         {
 340   2            error=1;
 341   2         }
 342   1         
 343   1         byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
 344   1         return(error); 
 345   1      }
 346            
 347          void I2cStart(void)
 348          {
 349   1         byM230_IIC_CTR=0x00;
 350   1         ShortDelay(1);
 351   1         byM230_IIC_CTR=byM230_IIC_CTR|0x01;   //S rise
 352   1      }
 353          
 354          /*
 355          void I2cStop(void)
 356          {
 357             byM230_IIC_CTR=0x00;
 358             ShortDelay(1);
 359             byM230_IIC_CTR=byM230_IIC_CTR|0x02;   //P rise
 360          }
 361          */
 362          /*
 363          void SendAck(bit NoAck)
 364          {
 365             if(NoAck)
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 7   

 366             {
 367                byM230_IIC_CTR=0x84;
 368             }
 369             else
 370             {
 371                byM230_IIC_CTR=0x80;
 372             }
 373          }*/
 374          
 375          void IICWrite(BYTE slave,BYTE address,BYTE count)
 376          {
 377   1         BYTE data i;
 378   1      
 379   1         byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
 380   1         byM230_IIC_MBUF=slave;   // First byte of IIC data:slave address
 381   1         I2cStart();
 382   1         error=wait_IIC(); 
 383   1      
 384   1         byM230_IIC_MBUF=address;   // Send next byte:sub address
 385   1         error=wait_IIC(); 
 386   1      
 387   1         for(i=0; i<count; i++)
 388   1         {                                                             
 389   2            byM230_IIC_MBUF=*IICBufPtr;   // Send next byte
 390   2            IICBufPtr++;
 391   2            error=wait_IIC(); 
 392   2            if(error==1)   break; 
 393   2         } 
 394   1      
 395   1         I2cStop();
 396   1      }
 397          
 398          void IICRead(BYTE slave, BYTE address, BYTE count)
 399          {
 400   1         BYTE data i;
 401   1      
 402   1         byM230_IIC_INTFLG=byM230_IIC_INTFLG&0xfe;
 403   1         //start
 404   1         byM230_IIC_CTR=0x80;   // S=0,P=0
 405   1         byM230_IIC_MBUF=slave;   // slave address (dummy write)
 406   1         ShortDelay(1);
 407   1         byM230_IIC_CTR=0x81;   // S=1,P=0
 408   1         error=wait_IIC(); 
 409   1         //dummy write
 410   1         ShortDelay(1);
 411   1         byM230_IIC_MBUF=address;   //sub address
 412   1         error=wait_IIC(); 
 413   1      
 414   1         //restart
 415   1         byM230_IIC_CTR=byM230_IIC_CTR & 0xfe;   // S set 0
 416   1         byM230_IIC_MBUF=slave|0x01;   //restart + slave address (read)
 417   1         ShortDelay(1);
 418   1         byM230_IIC_CTR=byM230_IIC_CTR | 0x01;   // S set 1
 419   1         error=wait_IIC(); 
 420   1         //dummy read
 421   1         ShortDelay(1);
 422   1         IICBuf.ByteArray[0]=byM230_IIC_MBUF;   
 423   1         error=wait_IIC();
 424   1         i=0;
 425   1         while(count!=0)
 426   1         {                    
 427   2            if(count==1)
C51 COMPILER V7.07   IIC                                                                   12/01/2003 15:27:33 PAGE 8   

 428   2            {
 429   3               //byM230_IIC_CTR=byM230_IIC_CTR|0x04;   //Ack=1 
 430   3               byM230_IIC_CTR=0x05;   //Ack=1 
 431   3            }
 432   2            ShortDelay(1);
 433   2            *IICBufPtr=byM230_IIC_MBUF;
 434   2            IICBufPtr++;
 435   2            error=wait_IIC();
 436   2            if(error==1)   break; 
 437   2            count--;
 438   2            i++;
 439   2         } 
 440   1         I2cStop();
 441   1      }
 442          #else
                // no define SOFTIIC2 or HARDIIC2
              #endif
 445          #endif
 446          
 447          
 448          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =    329    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      3       6
   IDATA SIZE       =     33    ----
   BIT SIZE         =      1    ----
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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