📄 ov9121.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 + -