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

📄 jiankong.lst

📁 通过单片机控制SAA7111A来显示监控图像
💻 LST
📖 第 1 页 / 共 3 页
字号:
 536   2              _Nop();
 537   2              SCL=1;                                                  //置时钟线为高,通知被控器开始接收数据位
 538   2              _Nop(); _Nop(); _Nop(); _Nop(); _Nop(); //保证时钟高电平周期大于4μs
 539   2              SCL=0; 
 540   2          }
 541   1          _Nop(); _Nop();
 542   1          SDA=1;                                                                      //8位发送完后释放数据线,准备接收应答位
 543   1          _Nop(); _Nop();   
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 10  

 544   1          SCL=1;
 545   1          _Nop(); _Nop(); _Nop();
 546   1          if(SDA==1)  ack=0;     
 547   1          else        ack=1;                                                  //判断是否接收到应答信号
 548   1          SCL=0;
 549   1          _Nop(); _Nop();
 550   1      }
 551          
 552          //////////////////////////////////////////////////////////////////////////
 553          //字节数据接收函数原型: uchar  RcvByte();
 554          //功能:  用来接收从器件传来的数据,并判断总线错误(不发应答信号),
 555          //           发完后请用应答函数。  
 556          ///////////////////////////////////////////////////////////////////////////     
 557          uchar  RcvByte()
 558          {
 559   1        uchar retc = 0;
 560   1        uchar BitCnt;  
 561   1        
 562   1        SDA=1;                                                                //置数据线为输入方式
 563   1        for(BitCnt=0;BitCnt<8;BitCnt++)
 564   1        {
 565   2                _Nop();           
 566   2            SCL=0;                                                                    //置时钟线为低,准备接收数据位
 567   2            _Nop(); _Nop(); _Nop(); _Nop(); _Nop();   //时钟低电平周期大于4.7μs
 568   2            SCL=1;                                                                    //置时钟线为高使数据线上数据有效
 569   2            _Nop(); _Nop();
 570   2            retc = retc<<1;
 571   2            if(SDA==1)        retc=retc+1;                            //读数据位,接收的数据位放入retc中
 572   2            _Nop(); _Nop();
 573   2        }
 574   1        SCL=0;    
 575   1        _Nop(); _Nop();
 576   1        return(retc);
 577   1      }
 578          
 579          ///////////////////////////////////////////////////////////////////////////
 580          //应答子原型:  void Ack_I2c(bit a);
 581          //功能: 主控器进行应答信号,(可以是应答或非应答信号)
 582          ////////////////////////////////////////////////////////////////////////////
 583          void Ack_I2c(bit a)
 584          {  
 585   1              if(a==0)        SDA=0;                                          //在此发出应答或非应答信号
 586   1              else    SDA=1;
 587   1              _Nop(); _Nop(); _Nop();
 588   1              SCL=1;
 589   1          _Nop(); _Nop(); _Nop(); _Nop();_Nop();      //时钟低电平周期大于4μs
 590   1              SCL=0;                                                          //清时钟线,钳住I2C总线以便继续接收
 591   1          _Nop(); _Nop();        
 592   1      }
 593          
 594          /////////////////////////////////////////////////////////////////////////               
 595          //向无子地址器件发送字节数据函数原型: bit  ISendByte(uchar sla,ucahr c);  
 596          //功能:     从启动总线到发送地址,数据,结束总线的全过程,从器件地址sla.
 597          //          如果返回1表示操作成功,否则操作有误。
 598          //注意:    使用前必须已结束总线。
 599          /////////////////////////////////////////////////////////////////////////
 600          bit ISendByte(uchar sla,uchar c)
 601          {
 602   1              Start_I2c();                                                    //启动总线
 603   1              SendByte(sla);                                                  //发送器件地址
 604   1          if(ack==0)  return(0);
 605   1              SendByte(c);                                                    //发送数据
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 11  

 606   1              if(ack==0)      return(0);
 607   1              Stop_I2c();                                             //结束总线
 608   1              return(1);
 609   1      }
 610          
 611          //////////////////////////////////////////////////////////////////////////////               
 612          //向无子地址器件读字节数据函数原型: bit  IRcvByte(uchar sla,ucahr *c);  
 613          //功能:   从启动总线到发送地址,读数据,结束总线的全过程,从器件地
 614          //        址sla,返回值在c.
 615          //        如果返回1表示操作成功,否则操作有误。
 616          //注意:  使用前必须已结束总线。
 617          ///////////////////////////////////////////////////////////////////////////////
 618          bit IRcvByte(uchar sla,uchar *c)
 619          {
 620   1              Start_I2c();                                                    //启动总线
 621   1              SendByte(sla+1);                                                        //发送器件地址
 622   1          if(ack==0)  return(0);
 623   1              *c=RcvByte();                                                   //读取数据
 624   1          Ack_I2c(1);                                                         //发送非就答位
 625   1              Stop_I2c();                                                     //结束总线 
 626   1              return(1);
 627   1      }
 628          
 629          //////////////////////////////////////////////////////////////////////////////////////////////////////////
             -//
 630          //watch dog
 631          /*void x5045_outbyte(unsigned char wr_data)
 632          {
 633                   unsigned char loop;
 634                   unsigned char tmp_x;
 635                   tmp_x=1;
 636                   for(loop=8;loop>0;loop--)
 637                   {
 638                    WD_SCK=0;
 639                    if((wr_data&(tmp_x<<(loop-1)))!=0)
 640                      {
 641                     WD_SI=1;
 642                      }
 643                    else
 644                      {
 645                             WD_SI=0;
 646                      }
 647                    WD_SCK=1;
 648                   }
 649                   WD_SI=0;
 650          }
 651          unsigned char x5045_inbyte(void)
 652          {
 653                   unsigned char loop;
 654                   unsigned char tmp_x;
 655                   tmp_x=0;
 656                   for(loop=8;loop>0;loop--)
 657                    {
 658                     WD_SCK=1;
 659                     WD_SCK=0;
 660                     tmp_x<<=1;
 661                              if(WD_SO!=0)
 662                       {
 663                       tmp_x+=1;
 664                       }
 665                    }
 666                   return tmp_x;
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 12  

 667          }
 668          
 669          void x5045_wren_cmd()
 670          {
 671                   WD_SCK=0;
 672                   WD_CS=0;
 673                   x5045_outbyte(WREN);
 674                   WD_SCK=0;
 675                   WD_CS=1;
 676          }
 677          
 678          unsigned char x5045_rdsr_cmd()
 679          {
 680                   unsigned char tmp_x;
 681                   WD_SCK=0;
 682                   WD_CS=0;
 683                   x5045_outbyte(RSDR);
 684                   tmp_x=x5045_inbyte();
 685                   WD_SCK=0;
 686                   WD_CS=1;
 687                   return tmp_x;
 688          }
 689          
 690          void x5045_wip_poll(void)
 691          {
 692                   unsigned char loop;
 693                   unsigned char tmp_x;
 694                   for(loop=0;loop<MAX_POLL;loop++)
 695                   {
 696                       tmp_x=x5045_rdsr_cmd();
 697                    if((tmp_x&0x01)==0)
 698                      {
 699                        return;
 700                      }
 701                   }
 702          }
 703          void x5045_wrsr_cmd()
 704          {
 705                   WD_SCK=0;
 706                   WD_CS=0;
 707                   x5045_outbyte(WRSR);
 708                   x5045_outbyte(STATUS_REG);
 709                   WD_SCK=0;
 710                   WD_CS=1;
 711                   x5045_wip_poll();
 712          }*/
 713          
 714          /*void x5045_page_write(unsigned int address,unsigned char *p,unsigned char number)
 715          {
 716                   unsigned char loop;
 717                   unsigned char d1,d2;
 718                   unsigned char *k;
 719                   k=p;
 720                   WD_SCK=0;
 721                   WD_CS=0;
 722                   number&=0x1f;
 723                   d1=(address>>8)&0x01;
 724                   d1<<=3;
 725                   d1|=WRITE;
 726                   d2=(address&0x00ff);
 727                   x5045_outbyte(d1);
 728                   x5045_outbyte(d2);
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 13  

 729                   for(loop=0;loop<number;loop++)
 730                   {
 731                    x5045_outbyte(*k);
 732                    k++;
 733                   }
 734                   WD_SCK=0;
 735                   WD_CS=1;
 736                   x5045_wip_poll();
 737                   return;
 738          }
 739          
 740          void x5045_page_read(unsigned int address,unsigned char *p,unsigned char number)
 741          {
 742                   unsigned char loop;
 743                   unsigned char d1,d2;
 744                   unsigned char *k;
 745                   k=p;
 746                   WD_SCK=0;
 747                   WD_CS=0;
 748                   number&=0x1f;
 749                   d1=(address>>8)&0x01;
 750                   d1<<=3;
 751                   d1|=READ;
 752                   d2=(address&0x00ff);
 753                   x5045_outbyte(d1);
 754                   x5045_outbyte(d2);
 755                   for(loop=0;loop<number;loop++)
 756                   {
 757                    *k=x5045_inbyte();
 758                    k++;
 759                   }
 760                   WD_SCK=0;
 761                   WD_CS=1;
 762                   return;
 763          }*/
 764          
 765          /*void x5045_rst_wdog()
 766          {
 767                   //WD_WP=1;
 768                   WD_CS=0;
 769                   WD_CS=1;
 770                   //WD_WP=1;
 771                   return;
 772          }
 773          
 774          /////////////////////
 775          void x5045_initial()
 776          {
 777                   //WD_WP=1;
 778                   WD_CS=1;
 779                   WD_SO=1;
 780                   WD_SCK=0;
 781                   WD_SI=0;
 782                   x5045_wren_cmd();
 783                   x5045_wrsr_cmd();
 784                   //WD_WP=1;
 785          }*/
 786          
 787          
 788          
 789          
 790          
C51 COMPILER V7.06   JIANKONG                                                              05/07/2005 20:29:54 PAGE 14  

 791          
 792          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1571    ----
   CONSTANT SIZE    =   1580    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =     27      30
   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 + -