高级会员
- 积分
- 594
- 威望
- 390
- 贡献
- 88
- 兑换币
- 37
- 注册时间
- 2012-7-28
- 在线时间
- 58 小时
|
为什么摄像头7620采集的数据串口调试后全为零呢?ov7620的摄像头采集回来的数据0和1组成的图像有时都是0有时都是1,请问有没有人知道为什么呀?是时序不对嘛?
#include <hidef.h> /* common defines and macros */
#include "derivative.h" /* derivative-specific definitions */
#include"mc9s12g128.h"
#include"INIT.h"
#define ROW 40 //数字摄像头所采集的二维数组行数
#define COLUMN 120 //数字摄像头所采集的二维数组列数
#define ROW_START 17 //数字摄像头二维数组行开始行值
#define ROW_MAX 200 //数字摄像头所采集的二维数组行最大值
#define THRESHOLD 0x20
unsigned char SampleFlag=0; //奇偶场标记
unsigned int Line; //行中断计数变量
unsigned int hang;
unsigned int m=0; //换行变量
unsigned char Buffer[ROW][COLUMN]={0}; //所采集的图像二维数组
unsigned int Get_Image[]={
17,19,21,23,25,28,31,34,37,40,43,46,49,53,57,
61,65,69,73,77,81,85,89,94,99,105,111,117,123,
129,135,141,147,153,159,166,173,180,187
}; //定每场采哪几行。
//////-------------延时函数------------------------------------------------
void delays(long m){
while(m--);
}
void delay1ms(unsigned z) {
static int x,y;
for(x=z; x>0;x--)
for(y=8010;y>0; y--);
}
void delay1us(unsigned z) {
static int x,y;
for(x=z; x>0; x--)
for(y=8; y>0; y--);
}
//-------------------------------------------------------------------------
void SCI0_Tranmit(void) {
byte i, temp;
temp = SCI0SR1;
SCI0DRH = 0; //清零
for(i=0; i<COLUMN; i++)
{
if(Buffer[m]>0x20 && Buffer[m][i+1]>0x20 && Buffer[m][i-1]>0x20)
// SCI_Tx(255);
SCI_Tx('0');
else
SCI_Tx('1'); //黑线
// SCI_Tx(0x31);
}
SCI_Tx(0x0D); //回车符
SCI_Tx(0X0A);//换行符
}
void main(void) {
GPIO_Init();
SetBusCLK_nM(48);
IOC_Init();
SCI_Init();
EnableInterrupts;
for(;;) {
// SCI0_Tranmit();
_FEED_COP();
}
}
/*************************************************************/
/* 行中断处理函数 */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 PT0_Interrupt(){
unsigned char i = 0;
TFLG1_C0F=1; //行中断标志位清除,以便于下次行中断进行
Line++; //行中断计数变量
if ( SampleFlag == 0 || Line<ROW_START || Line>ROW_MAX )
{
return; //不是要采集图像的有效行,返回
}
if( Line == Get_Image[hang]) {
delays(1);//通常行消隐在每一场的钱4.2us内
for(i=0; i<120; i++) {
Buffer[m]=PORTA;_asm();
}
SCI0_Tranmit();
hang++;
m++;
}
}
/*************************************************************/
/* 场中断处理函数 */
/*************************************************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 9 PT1_Interrupt()
{
TFLG1_C1F = 1; //场中断清楚,以便于下次的场中断的正常进行
TFLG1_C0F = 1; //行中断清除,以便于开始采集图像数据
m = 0; //行中间变量清零,以便于开始从把采集的图像放到数组的第一行
Line = 0; //行中断临时变量清零
hang = 0; //行临时变量清除
SampleFlag =~ SampleFlag; //场中断标记取反,这样只采集奇数场的图像
}
|
|
|