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

📄 ov9121.lst

📁 CMOS 9121 的设置程序
💻 LST
字号:
C51 COMPILER V8.02   OV9121                                                                09/15/2007 12:44:12 PAGE 1   


C51 COMPILER V8.02, COMPILATION OF MODULE OV9121
OBJECT MODULE PLACED IN OV9121.OBJ
COMPILER INVOKED BY: C:\keil\C51\BIN\C51.EXE OV9121.c BROWSE DEBUG OBJECTEXTEND

line level    source

   1          //#pragma  ot(6,SIZE)
   2          /*
   3          ID_Address          是OV9121的地址在这里是写是0X60,读是0X61
   4          sub_Address         是OV9121内部寄存器的地址,也就是要写的寄存器址
   5          hex                 所送的数值,用16进制表示
   6          */
   7          #include <intrins.h>
   8          #include <AT892051.H>
   9          #include <OV9121_1.h>
  10          #include <OV9121_screen.h>
  11          #define LAMP P1_6
  12          #define  ERRORCOUNT 1
  13          sbit SCCB_D=P1^1;
  14          sbit SCCB_C=P1^0;
  15          sbit SCCB_E=P3^7;
  16          //sbit EXPSTB=P1^4;
  17          //sbit FREX=P1^3;
  18          void main(void)
  19          {
  20   1      bit SCCB(unsigned char ID_Address,unsigned int sub_Address,unsigned char *hex);
  21   1      //void Delay_2(unsigned char DelayCount);
  22   1      unsigned char/*p,i,*/a=0x08,b=0x23,c=0xa0,d=0x53,e=0x4a,f=0x83,g=/*0x5b*/0x20,h=0xf6,value,sum;
  23   1      unsigned int ID_Address=0x61,sub_address=0x0000,mm=0x0050;
  24   1      P1=P3=0xff;     
  25   1      //BEEP=0;
  26   1      //if(KEY==0)
  27   1      //{
  28   1      //LAMP=(!LAMP);Delay_2(100000);LAMP=1;Delay_2(100000);
  29   1      //SCCB(0x60,0x37,&a);                       //单屏和多屏
  30   1      //SCCB(0x60,0x15,&c);                     //水平场信号变换
  31   1      SCCB(0x60,0x18,&d);SCCB(0x60,0x17,&b);    //水平窗口变成一行象素384个
  32   1      //SCCB(0x60,0x1A,&e);                 
  33   1      SCCB(0x60,0x10,&f);                       //暴光时间控制
  34   1      SCCB(0x60,0x19,&g);                       ////垂直窗口调整288个行象素;; 
  35   1      SCCB(0x60,0x13,&h);                       //自动和手动暴光      
  36   1      while(1)
  37   1      {
  38   2      SCCB(ID_Address,sub_address,&value); 
  39   2      sum=value;
  40   2      RWXX(&sum,0x01,mm,0xa0,M2464);
  41   2      sub_address++;mm++;//i++;                
  42   2      if(sub_address>0x38) break;
  43   2      }
  44   1      while(1){                        
  45   2      //EXPSTB=0;Delay_2(5);FREX=0;
  46   2      screen();
  47   2      }
  48   1      }
  49          //}
  50          
  51          /**********************************************************************/
  52          //LAMP=(!LAMP);Delay_2(100);LAMP=0;
  53          //LAMP=(!LAMP);Delay_2(500);LAMP=0;
  54          bit  SCCB(unsigned char ID_Address,unsigned int sub_Address,unsigned char *hex)
  55          {
C51 COMPILER V8.02   OV9121                                                                09/15/2007 12:44:12 PAGE 2   

  56   1      void SCCBstart(void);
  57   1      void SCCBstop(void);
  58   1      unsigned char SCCBreceiveByte(void);
  59   1      void SCCBsendByte(unsigned char sendbyte);
  60   1      /*bit */void SCCBRecAck(void);
  61   1      void SCCBNoAck(void);
  62   1      void SCCBAck(void);
  63   1      void Delay_1(unsigned long DelayCount);
  64   1      unsigned char data j=1,i=ERRORCOUNT;
  65   1      bit      errorflag=1;
  66   1      while(i--)
  67   1      {
  68   2      SCCBstart();
  69   2      SCCBsendByte(ID_Address&0xfe);                   //送控制字0XC2
  70   2             SCCBRecAck();
  71   2           if(CY) continue;
  72   2      
  73   2      SCCBsendByte((unsigned char)sub_Address);              //送寄存器地址
  74   2                 SCCBRecAck();
  75   2                if(CY) continue;
  76   2      
  77   2      if(!(ID_Address&0x01))                            //如果是写
  78   2            {
  79   3                j=1;
  80   3            errorflag=0;
  81   3         while(j--)
  82   3      
  83   3           {
  84   4                      SCCBsendByte(*hex);                        //送操作数
  85   4                    SCCBRecAck();                     //应答继续
  86   4             if(!CY) continue;
  87   4      
  88   4                       errorflag=1;
  89   4              break;
  90   4              }
  91   3            if(errorflag==1)
  92   3              continue;
  93   3            break;
  94   3            }
  95   2      else                                              //如果是读
  96   2           {
  97   3           SCCBstart();                                 //重新启动总线
  98   3           SCCBsendByte(ID_Address);                    //送控制字也就是ID地址
  99   3           SCCBRecAck();                        //应答
 100   3           if(CY) continue;
 101   3      /*while(--j)                  //循环一次
 102   3             {
 103   3           *hex++=SCCBreceiveByte();                 //送数
 104   3             SCCBAck();                                   //应答
 105   3             }*/
 106   3          *hex=SCCBreceiveByte();                     //read last byte data
 107   3           SCCBNoAck();                               //应答
 108   3          LAMP=(!LAMP);Delay_1(500);LAMP=1;                 //程序调式用
 109   3               errorflag=0;
 110   3           break;
 111   3           }
 112   2      }
 113   1      
 114   1      
 115   1      SCCBstop();                                    //总线停止
 116   1      if(!(ID_Address&0x01))                         //如果是写
 117   1       {
C51 COMPILER V8.02   OV9121                                                                09/15/2007 12:44:12 PAGE 3   

 118   2       Delay_1(255);                                  //延时
 119   2       Delay_1(255);
 120   2       Delay_1(255);
 121   2       Delay_1(255);
 122   2      }
 123   1      Delay_1(255);
 124   1      Delay_1(255);
 125   1      Delay_1(255);
 126   1      Delay_1(255);
 127   1      return(errorflag);                 //返回errorflag
 128   1      }
 129          
 130          /*****************以下是对SCCB总线的操作子程序***/
 131          /*****************启动总线**********************/
 132          void SCCBstart(void)
 133          {
 134   1      SCCB_E=1;
 135   1      SCCB_D=1;
 136   1      SCCB_C=1;
 137   1      _nop_();
 138   1      _nop_();
 139   1      _nop_();
 140   1      SCCB_E=0;
 141   1      _nop_();
 142   1      _nop_();
 143   1      _nop_();
 144   1      ///////////////////////////////////////////////////////
 145   1      SCCB_C=1;
 146   1      SCCB_D=0;
 147   1      _nop_();                            //0.25us
 148   1      SCCB_D=1;
 149   1      SCCB_C=1;
 150   1      _nop_();
 151   1      _nop_();
 152   1      _nop_();
 153   1      _nop_();
 154   1      _nop_();
 155   1      _nop_();
 156   1      SCCB_D=0;
 157   1      _nop_();
 158   1      _nop_();
 159   1      _nop_();
 160   1      _nop_();
 161   1      SCCB_C=0;
 162   1      _nop_();
 163   1      _nop_();
 164   1      _nop_();
 165   1      //SCCB_D=1; //SCCB_E从1到0表示BUS启动
 166   1      }
 167          /*******************SCCB总线停止*********************/
 168          void SCCBStop(void)
 169          {
 170   1      SCCB_C=0;
 171   1      SCCB_D=0;
 172   1      SCCB_E=0;
 173   1      _nop_();
 174   1      SCCB_C=1;
 175   1      _nop_();
 176   1      _nop_();
 177   1      _nop_();
 178   1      SCCB_D=1;
 179   1      _nop_();
C51 COMPILER V8.02   OV9121                                                                09/15/2007 12:44:12 PAGE 4   

 180   1      _nop_();
 181   1      SCCB_E=1;
 182   1      _nop_();
 183   1      _nop_();
 184   1      _nop_();
 185   1      _nop_();
 186   1      SCCB_D=0;
 187   1      SCCB_C=0;
 188   1      }                     //SCCB_E从1到0表示BUS IDLE
 189          /**************检查应答位*******************/
 190          /*bit*/void SCCBRecAck(void)
 191          {
 192   1      SCCB_C=0;
 193   1      SCCB_D=1;
 194   1      _nop_();
 195   1      _nop_();
 196   1      _nop_();
 197   1      _nop_();
 198   1      _nop_();
 199   1      _nop_();
 200   1      SCCB_C=1;
 201   1      CY=SCCB_D;
 202   1      _nop_();
 203   1      _nop_();
 204   1      _nop_();
 205   1      _nop_();
 206   1      _nop_();
 207   1      _nop_();
 208   1      _nop_();
 209   1      _nop_();
 210   1      SCCB_C=0;
 211   1      _nop_();
 212   1      _nop_();
 213   1      _nop_();
 214   1      _nop_();
 215   1      _nop_();
 216   1      _nop_();//因为返回值总是放在CY中的
 217   1      //return(CY);
 218   1      }
 219          
 220          /***************对SCCB总线产生应答*******************/
 221          void SCCBAck(void)
 222          {
 223   1      
 224   1      SCCB_D=0;
 225   1      SCCB_C=1;
 226   1      _nop_();
 227   1      _nop_();
 228   1      _nop_();
 229   1      _nop_();
 230   1      
 231   1      SCCB_C=0;
 232   1      _nop_();
 233   1      
 234   1      
 235   1      SCCB_D=1;
 236   1      }
 237          
 238          /*****************不对SCCB总线产生应答***************/
 239          void SCCBNoAck(void)
 240          {
 241   1      SCCB_D=1;
C51 COMPILER V8.02   OV9121                                                                09/15/2007 12:44:12 PAGE 5   

 242   1      SCCB_C=1;
 243   1      _nop_();
 244   1      _nop_();
 245   1      _nop_();
 246   1      _nop_();
 247   1      
 248   1      SCCB_C=0;
 249   1      }
 250          /*******************向SCCB总线写数据*********************/
 251          void SCCBsendByte(unsigned char sendbyte)
 252          {
 253   1      unsigned char data j=8;
 254   1      for(;j>0;j--)
 255   1         {
 256   2         SCCB_C=0;
 257   2      _nop_();
 258   2      _nop_();
 259   2      _nop_();
 260   2      _nop_();
 261   2      _nop_();
 262   2      _nop_();
 263   2         sendbyte<<=1;        //无论C51怎样实现这个操作,始终会使CY=sendbyte^7;
 264   2         SCCB_D=CY;
 265   2         SCCB_C=1;
 266   2      _nop_();
 267   2      _nop_();
 268   2      _nop_();
 269   2      }
 270   1      //SCCB_C=0;
 271   1      }
 272          
 273          /**********************从SCCB总线上读数据子程序**********/
 274          unsigned char SCCBreceiveByte(void)
 275          {
 276   1      register receivebyte,i=8;
 277   1      SCCB_C=0;
 278   1      while(i--)
 279   1         {
 280   2         SCCB_C=1;
 281   2      _nop_();
 282   2      _nop_();
 283   2      _nop_();
 284   2      receivebyte=(receivebyte<<1)|SCCB_D;
 285   2      SCCB_C=0;
 286   2      _nop_();
 287   2      _nop_();
 288   2      _nop_();
 289   2      _nop_();
 290   2      _nop_();
 291   2      _nop_();
 292   2      }
 293   1      return(receivebyte);
 294   1      }
 295          
 296          /***************一个简单延时程序************************/
 297          void Delay_1(unsigned long DelayCount)
 298          {
 299   1      while(DelayCount--);
 300   1      }
 301          ////////////////////////////////////////////////////////////////////
 302          /*void Delay_2(unsigned char DelayCount)
 303          {
C51 COMPILER V8.02   OV9121                                                                09/15/2007 12:44:12 PAGE 6   

 304                  unsigned char i=0;
 305                  //unsigned char j=200000;
 306                  while(i<DelayCount)
 307                  {i++;}
 308          }
 309          */
 310          


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1088    ----
   CONSTANT SIZE    =   ----    ----
   XDATA SIZE       =   ----    ----
   PDATA SIZE       =   ----    ----
   DATA SIZE        =      1      58
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----       2
END OF MODULE INFORMATION.


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

⌨️ 快捷键说明

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