基于128单片机的摄像头循迹小车四轮驱动程序

/********************************************************************************/
/********************************************************************************

上位机设置
波特率115200
图像宽度 120
图像高度 40

接线:
S0(单片机上的RXD) -----> 串口模块TXD
S1(单片机上的TXD) -----> 串口模块RXD
GND(单片机上的地) -----> 串口模块GND //如果单片机和串口使用不同电源,也需要共地
波特率115200

A0-A7 -----------------> 摄像头模块 (数据)Y0 - Y7
T0 -----------------> 摄像头模块 (行中断)HREF
T1 -----------------> 摄像头模块 (场中断)VSYN


如果图像不在中间,请看 行中断处理函数

*********************************************************************************
*********************************************************************************/
#include
#include "derivative.h"
#include

#define ROW 10 //数字摄像头所采集的二维数组行数
#define COLUMN 120 //数字摄像头所采集的二维数组列数
#define ROW_START 10 //数字摄像头二维数组行开始行值
#define ROW_MAX 200 //数字摄像头所采集的二维数组行最大值

#define ROW1 10 //数字摄像头所采集的二维数组行数
#define COLUMN1 120 //数字摄像头所采集的二维数组列数
#define ROW_START1 10 //数字摄像头二维数组行开始行值
#define ROW_MAX1 200 //数字摄像头所采集的二维数组行最大值



unsigned char Buffer[ROW][COLUMN]={0}; //所采集的图像二维数组
//unsigned char Image_Center[ROW]={0}; //所采集的图像中心线
unsigned char Buffer1[ROW1][COLUMN1]={0}; //所采集的图像二维数组
//unsigned char Image_Center1[ROW1]={0}; //所采集的图像中心线

unsigned char SampleFlag=0; //奇偶场标记
unsigned int m=0; //换行变量
unsigned int Line; //行中断计数变量
unsigned int hang;
unsigned int Get_Image[]={ 99,105,111,117,123,129,135,141,147,153}; //定每场采哪几行。




/*************************************************************/
/* 初始化PLL函数 */
/*************************************************************/
void PLL_Init(void)
{

CLKSEL=0X00; //disengage PLL to system
PLLCTL_PLLON=1; //turn on PLL
SYNR =0xc0 | 0x09;
REFDV=0x80 | 0x01;
POSTDIV=0x00; //pllclock=2*osc*(1+SYNR)/(1+REFDV)=160MHz;
_asm(nop);

//BUS CLOCK=80M
_asm(nop);
while(!(CRGFLG_LOCK==1)); //when pll is steady ,then use it;
CLKSEL_PLLSEL =1; //engage PLL to system;

}
/*************************************************************/
/* 初始化PWM */
/*************************************************************/
void PWM_init(void)
{
PWMCTL_CON01= 1; //联结通道01,23,45,67为16位的PWM
PWMCTL_CON23= 1;
PWMCTL_CON45= 1;
PWMCTL_CON67= 1;
PWMPOL_PPOL1= 1; //各通道的输出极性为高电平。
PWMPOL_PPOL3= 1;
PWMPOL_PPOL5= 1;
PWMPOL_PPOL7= 1;
PWMPRCLK = 0x55; //A时钟和B时钟的分频系数为32,频率为1MHz
PWMSCLA = 100; //SA时钟频率为5KHz
PWMSCLB = 100; //SB时钟频率为5KHz
PWMCLK_PCLK1 =1; //通道01用SA时钟作为时钟源
PWMCLK_PCLK3 =1; //PWM3使用SB
PWMCLK_PCLK5 =1; //SB
PWMCLK_PCLK7 =1; //SA
PWMCAE = 0x00; //脉冲模式为左对齐模式
PWMPER01 = 100; //通道01的周期为5kHz*100
PWMPER23 = 100;
PWMPER45 = 100;
PWMPER67 = 100;

PWMDTY01 = 0; //各通道的通道的占空比初始化
PWMDTY23 = 0;
PWMDTY45 = 0;
PWMDTY67 = 0;

}

/*************************************************************/
/* 正转 */
/*************************************************************/


void Motor_foward_L (unsigned int duty)
{
PWME_PWME1=1;
PWME_PWME3=0;
DDRP_DDRP3=1;
PTP_PTP3=0;
PWMDTY01=duty;
}
void Motor_foward_R (unsigned int duty)
{
PWME_PWME7=1;
PWME_PWME5=0;
DDRP_DDRP5=1;
PTP_PTP5=0;
PWMDTY67=duty;
}

/*************************************************************/
/* 反转 */
/*************************************************************/
void Motor_back_L (unsigned int duty)
{
PWME_PWME3=1;
PWME_PWME1=0;
DDRP_DDRP1=1;
PTP_PTP1=0;
PWMDTY23=duty;
}

void Motor_back_R (unsigned int duty)
{
PWME_PWME5=1;
PWME_PWME7=0;
DDRP_DDRP7=1;
PTP_PTP7=0;
PWMDTY45=duty;
}


/*************************************************************/
/* ov7620 行场中断初始化函数 */
/*************************************************************/
void TIM_Init(void)
{
TIOS=0x00; //外部输入捕捉0,1通道
TCTL4=0x09; //通道0 上升沿触发,通道1下降沿触发
TSCR1=0x80; //使能
TIE=0x03; //通道 0,1 中断使能
TFLG1=0xFF; //清中断标志位
}

/*************************************************************/
/* ov7620 IO口初始化函数 */
/*************************************************************/

void IO_Init(void)


{

DDRA=0X00; //端口A配置成输入
DDRB=0X00;
}

/*************************************************************/
/* 延时函数 */
/*************************************************************/

void delays(long m)
{

while(m--);

}

/*================================
动态阈值
======================================*/
/*uchar Th_threshold=80;
uchar maxo,mino;
void Get_Th_threshold(void)
{
static unsigned char i=0,j=0,max[3]={0},min[3]={0};
for(i=0;i<=2;i++)
{
max[i]=Buffer[i][0];
for(j=0;j<=120;j++)

if(max[i]
max[i]=Buffer[i][j];


min[i]=Buffer[i][0];
for(j=0;j<=120;j++) //找到最小值

if(min[i]>Buffer[i][j])

min[i]=Buffer[i][j];

}
maxo=(max[0]+max[1]+max[2])/3;
mino=(min[0]+min[1]+min[2])/3;
Th_threshold=(maxo+mino)/2; //以最大值和最小值的平均值作为阈值
} */

uchar Th_threshold1=80;
uchar maxo1,mino1;
void Get_Th_threshold1(void)
{
static unsigned char i=0,j=0,max[3]={0},min[3]={0};
for(i=0;i<=2;i++)
{
max[i]=Buffer1[i][0];
for(j=0;j<=120;j++)

if(max[i]
max[i]=Buffer1[i][j];


min[i]=Buffer1[i][0];
for(j=0;j<=120;j++) //找到最小值

if(min[i]>Buffer1[i][j])

min[i]=Buffer1[i][j];

}
maxo1=(max[0]+max[1]+max[2])/3;
mino1=(min[0]+min[1]+min[2])/3;
Th_threshold1=(maxo1+mino1)/2; //以最大值和最小值的平均值作为阈值
}


/*===========================
采样二值化函数
==================================*/
/*void Date_er(void)
{
static unsigned char i,j;
for(i=0;i<=9;i++)
for(j=0;j<=120;j++)
if(Buffer[i][j]>=Th_threshold)

Buffer[i][j]=maxo;

else Buffer[i][j]=mino;



} */

void Date_er1(void)
{
static unsigned char i,j;
for(i=0;i<=9;i++)
for(j=0;j<=120;j++)
if(Buffer1[i][j]>=Th_threshold1)

Buffer1[i][j]=maxo1;

else Buffer1[i][j]=mino1;



}
/*****************************
数据滤波
*********************************/
/*void DataFilter(void)
{
static unsigned char i=0,j=0;
Date_er();
for(i=0;i<=9;i++)

for(j=1;j<=119;j++)

if(Buffer[i][j]==mino&&Buffer[i][j]!=Buffer[i][j-1]&&Buffer[i][j]!=Buffer[i][j+1])

Buffer[i][j]=maxo;

else if(Buffer[i][j]==maxo&&Buffer[i][j]!=Buffer[i][j-1]&&Buffer[i][j]!=Buffer[i][j+1])

Buffer[i][j]=mino;



} */

void DataFilter1(void)
{
static unsigned char i=0,j=0;
Date_er1();
for(i=0;i<=9;i++)

for(j=1;j<=119;j++)

if(Buffer1[i][j]==mino1&&Buffer1[i][j]!=Buffer1[i][j-1]&&Buffer1[i][j]!=Buffer1[i][j+1])


Buffer1[i][j]=maxo1;

else if(Buffer1[i][j]==maxo1&&Buffer1[i][j]!=Buffer1[i][j-1]&&Buffer1[i][j]!=Buffer1[i][j+1])

Buffer1[i][j]=mino1;



}

/********************************************
扫描寻找中线

********************************************/
/*uchar YZ=10;
unsigned int l_black=0; //左侧黑线点
unsigned int r_black=0;
unsigned int zhongxian=0; //右侧黑线点
unsigned int l_allblack[10]={0}; //储存十行中线位置。
unsigned int r_allblack[10]={0};
void shaomiao(void)
{
unsigned char i,j;
for(i=0;i<=9;i++)
{

for(j=0;j<=118;j++)
{

if(Buffer[i][j]==mino&&Buffer[i][j+1]==mino&&Buffer[i][j+2]==mino)
{
l_allblack[i]=j;break;
}
}


for(j=120;j>=2;j--)
{

if(Buffer[i][j]==mino&&Buffer[i][j-1]==mino&&Buffer[i][j-2]==mino)
{
r_allblack[i]=j;break;
}
}
}

for(i=0;i<=9;i++)
{
l_black=l_black+l_allblack[i];
r_black=r_black+r_allblack[i];
}
l_black=l_black/10;
r_black=r_black/10;


zhongxian=(l_black+r_black)/2;
} */

uchar YZ1=10;
unsigned int l_black1=0; //左侧黑线点
unsigned int r_black1=0;
unsigned int zhongxian1=0; //右侧黑线点
unsigned int l_allblack1[10]={0}; //储存十行中线位置。
unsigned int r_allblack1[10]={0};
void shaomiao1(void)
{
unsigned char i,j;
for(i=0;i<=9;i++)
{

for(j=0;j<=118;j++)
{

if(Buffer1[i][j]==mino1&&Buffer1[i][j+1]==mino1&&Buffer1[i][j+2]==mino1)
{
l_allblack1[i]=j;break;
}
}


for(j=120;j>=2;j--)
{

if(Buffer1[i][j]==mino1&&Buffer1[i][j-1]==mino1&&Buffer1[i][j-2]==mino1)
{
r_allblack1[i]=j;break;
}
}
}

for(i=0;i<=9;i++)
{
l_black1=l_black1+l_allblack1[i];
r_black1=r_black1+r_allblack1[i];
}
l_black1=l_black1/10;
r_black1=r_black1/10;


zhongxian1=(l_black1+r_black1)/2;
}



/*********************************************

速度控制
********************************************/

void speed(void)
{
unsigned int speed_r;
unsigned int speed_l;
if(Th_threshold1>170)
{
speed_l=0;
speed_r=0;
Motor_foward_L (speed_r);
Motor_foward_R (speed_l);
}
else if(Th_threshold1<100)
{
speed_l=20;
speed_r=100;
Motor_foward_L (speed_r);
Motor_foward_R (speed_l);
delays(1000);
}
else
{
if(50<=zhongxian1<70)
{
speed_l=110-2*(80-zhongxian1);
speed_r=100;
Motor_foward_L (speed_r);
Motor_foward_R (speed_l);
}

if(70<=zhongxian1<80)
{
speed_l=100-3*(80-zhongxian1);
speed_r=100;

Motor_foward_L (speed_r);
Motor_foward_R (speed_l);
}
if(90>zhongxian1>=80)
{

speed_l=100;
speed_r=100-5*(zhongxian1-80);
Motor_foward_L (speed_r);
Motor_foward_R (speed_l);
}
if(zhongxian1<50)
{
speed_r=100;
speed_l=20;
Motor_foward_L (speed_r);
Motor_foward_R (speed_l);
}
if(zhongxian1>=90)
{
speed_r=20;
speed_l=100;
Motor_foward_L (speed_r);
Motor_foward_R (speed_l);
}
}
}

/*************************************************************/
/* 串口0初始化函数 */
/*************************************************************/
void SCI_Init()

{
SCI0BD=44; //115200bps Baud Rate=BusClock/(16*SCIBD)
//SCI0BD=261; //19200bps Baud Rate=BusClock/(16*SCIBD)
//SCI0BD=521;
SCI0CR1=0; //正常8 位模式,无奇偶校验
SCI0CR2=0X2C; //发送允许 接受中断允许
}


/*************************************************************/
/* 串口0发送函数 */
/*************************************************************/
void SCI_Write(unsigned char SendChar)
{

while (!(SCI0SR1&0x80));
SCI0DRH=0;

SCI0DRL=SendChar;
}

/*************************************************************/
/* 向电脑串口发送所采集的图像 */
/*************************************************************/
void Process()
{
unsigned char i,j;

for(i=0;i{
for(j=0;j
{
if(Buffer[i][j] == 0xFF) //判断采集亮度值是否达到终止值256.
SCI_Write(0xFE) ;
else
SCI_Write(Buffer[i][j]) ;
}
//SCI_Write(0x0D);
//SCI_Write(0X0A);
}
SCI_Write(0xFF); //发送终止值255
}
/*************************************************************/
/* 主函数 */
/*************************************************************/
void main(void)
{

/* put your own code here */
PLL_Init(); //初始化锁相环
PWM_init(); //初始化pwm
TIM_Init(); //初始化中断
IO_Init(); //初始化IO口
SCI_Init(); //初始化串口





EnableInterrupts;

for(;;)
{

Process(); //向电脑串口发送所采集的图像
//Get_Th_threshold();
Get_Th_threshold1();
// Date_er();
Date_er1();
// DataFilter();
DataFilter1();
// shaomiao();

speed();
}

// _FEED_COP(); /* feeds the dog */

/* loop forever */
/* please make sure that you never leave main */
}

/*************************************************************/
/*

行中断处理函数 */
/*************************************************************/

#pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 8 PT0_Interrupt()
{

TFLG1_C0F=1; //行中断标志位清除,以便于下次行中断进行

Line++; //行中断计数变量

if ( SampleFlag == 0 || LineROW_MAX ){
return; //不是要采集图像的有效行,返回
}


if( Line==Get_Image[hang]){

delays(8);//如果图像不在中间请修改这里


Buffer[m][0]=PORTA;_asm();Buffer[m][1]=PORTA;_asm();Buffer[m][2]=PORTA;_asm();Buffer[m][3]=PORTA;_asm();Buffer[m][4]=PORTA;_asm();
Buffer[m][5]=PORTA;_asm();Buffer[m][6]=PORTA;_asm();Buffer[m][7]=PORTA;_asm();Buffer[m][8]=PORTA;_asm();Buffer[m][9]=PORTA;_asm();
Buffer[m][10]=PORTA;_asm();Buffer[m][11]=PORTA;_asm();Buffer[m][12]=PORTA;_asm();Buffer[m][13]=PORTA;_asm();Buffer[m][14]=PORTA;_asm();
Buffer[m][15]=PORTA;_asm();Buffer[m][16]=PORTA;_asm();Buffer[m][17]=PORTA;_asm();Buffer[m][18]=PORTA;_asm();Buffer[m][19]=PORTA;_asm();
Buffer[m][20]=PORTA;_asm();Buffer[m][21]=PORTA;_asm();Buffer[m][22]=PORTA;_asm();Buffer[m][23]=PORTA;_asm();Buffer[m][24]=PORTA;_asm();
Buffer[m][25]=PORTA;_asm();Buffer[m][26]=PORTA;_asm();Buffer[m][27]=PORTA;_asm();Buffer[m][28]=PORTA;_asm();Buffer[m][29]=PORTA;_asm();
Buffer[m][30]=PORTA;_asm();Buffer[m][31]=PORTA;_asm();Buffer[m][32]=PORTA;_asm();Buffer[m][33]=PORTA;_asm();Buffer[m][34]=PORTA;_asm();
Buffer[m][35]=PORTA;_asm();Buffer[m][36]=PORTA;_asm();Buffer[m][37]=PORTA;_asm();Buffer[m][38]=PORTA;_asm();Buffer[m][39]=PORTA;_asm();
Buffer[m][40]=PORTA;_asm();Buffer[m][41]=PORTA;_asm();Buffer[m][42]=PORTA;_asm();Buffer[m][43]=PORTA;_asm();Buffer[m][44]=PORTA;_asm();
Buffer[m][45]=PORTA;_asm();Buffer[m][46]=PORTA;_asm();Buffer[m][47]=PORTA;_asm();Buffer[m][48]=PORTA;_asm();Buffer[m][49]=PORTA;_asm();
Buffer[m][50]=PORTA;_asm();Buffer[m][51]=PORTA;_asm();Buffer[m][52]=PORTA;_asm();Buffer[m][53]=PORTA;_asm();Buffer[m][54]=PORTA;_asm();
Buffer[m][55]=PORTA;_asm();Buffer[m][56]=PORTA;_asm();Buffer[m][57]=PORTA;_asm();Buffer[m][58]=PORTA;_asm();Buffer[m][59]=PORTA;_asm();
Buffer[m][60]=PORTA;_asm();Buffer[m][61]=PORTA;_asm();Buffer[m][62]=PORTA;_asm();Buffer[m][63]=PORTA;_asm();Buffer[m][64]=PORTA;_asm();
Buffer[m][65]=PORTA;_asm();Buffer[m][66]=PORTA;_asm();Buffer[m][67]=PORTA;_asm();Buffer[m][68]=PORTA;_asm();Buffer[m][69]=PORTA;_asm();
Buffer[m][70]=PORTA;_asm();Buffer[m][71]=PORTA;_asm();Buffer[m][72]=PORTA;_asm();Buffer[m][73]=PORTA;_asm();Buffer[m][74]=PORTA;_asm();
Buffer[m][75]=PORTA;_asm();Buffer[m][76]=PORTA;_asm();Buffer[m][77]=PORTA;_asm();Buffer[m][78]=PORTA;_asm();Buffer[m][79]=PORTA;_asm();
Buffer[m][80]=PORT

A;_asm();Buffer[m][81]=PORTA;_asm();Buffer[m][82]=PORTA;_asm();Buffer[m][83]=PORTA;_asm();Buffer[m][84]=PORTA;_asm();
Buffer[m][85]=PORTA;_asm();Buffer[m][86]=PORTA;_asm();Buffer[m][87]=PORTA;_asm();Buffer[m][88]=PORTA;_asm();Buffer[m][89]=PORTA;_asm();
Buffer[m][90]=PORTA;_asm();Buffer[m][91]=PORTA;_asm();Buffer[m][92]=PORTA;_asm();Buffer[m][93]=PORTA;_asm();Buffer[m][94]=PORTA;_asm();
Buffer[m][95]=PORTA;_asm();Buffer[m][96]=PORTA;_asm();Buffer[m][97]=PORTA;_asm();Buffer[m][98]=PORTA;_asm();Buffer[m][99]=PORTA;_asm();
Buffer[m][100]=PORTA;_asm();Buffer[m][101]=PORTA;_asm();Buffer[m][102]=PORTA;_asm();Buffer[m][103]=PORTA;_asm();Buffer[m][104]=PORTA;_asm();
Buffer[m][105]=PORTA;_asm();Buffer[m][106]=PORTA;_asm();Buffer[m][107]=PORTA;_asm();Buffer[m][108]=PORTA;_asm();Buffer[m][109]=PORTA;_asm();
Buffer[m][110]=PORTA;_asm();Buffer[m][111]=PORTA;_asm();Buffer[m][112]=PORTA;_asm();Buffer[m][113]=PORTA;_asm();Buffer[m][114]=PORTA;_asm();
Buffer[m][115]=PORTA;_asm();Buffer[m][116]=PORTA;_asm();Buffer[m][117]=PORTA;_asm();Buffer[m][118]=PORTA;_asm();Buffer[m][119]=PORTA;_asm();
Buffer[m][120]=PORTA;
Buffer1[m][0]=PORTB;_asm();Buffer1[m][1]=PORTB;_asm();Buffer1[m][2]=PORTB;_asm();Buffer1[m][3]=PORTB;_asm();Buffer1[m][4]=PORTB;_asm();
Buffer1[m][5]=PORTB;_asm();Buffer1[m][6]=PORTB;_asm();Buffer1[m][7]=PORTB;_asm();Buffer1[m][8]=PORTB;_asm();Buffer1[m][9]=PORTB;_asm();
Buffer1[m][10]=PORTB;_asm();Buffer1[m][11]=PORTB;_asm();Buffer1[m][12]=PORTB;_asm();Buffer1[m][13]=PORTB;_asm();Buffer1[m][14]=PORTB;_asm();
Buffer1[m][15]=PORTB;_asm();Buffer1[m][16]=PORTB;_asm();Buffer1[m][17]=PORTB;_asm();Buffer1[m][18]=PORTB;_asm();Buffer1[m][19]=PORTB;_asm();
Buffer1[m][20]=PORTB;_asm();Buffer1[m][21]=PORTB;_asm();Buffer1[m][22]=PORTB;_asm();Buffer1[m][23]=PORTB;_asm();Buffer1[m][24]=PORTB;_asm();
Buffer1[m][25]=PORTB;_asm();Buffer1[m][26]=PORTB;_asm();Buffer1[m][27]=PORTB;_asm();Buffer1[m][28]=PORTB;_asm();Buffer1[m][29]=PORTB;_asm();
Buffer1[m][30]=PORTB;_asm();Buffer1[m][31]=PORTB;_asm();Buffer1[m][32]=PORTB;_asm();Buffer1[m][33]=PORTB;_asm();Buffer1[m][34]=PORTB;_asm();
Buffer1[m][35]=PORTB;_asm();Buffer1[m][36]=PORTB;_asm();Buffer1[m][37]=PORTB;_asm();Buffer1[m][38]=PORTB;_asm();Buffer1[m][39]=PORTB;_asm();
Buffer1[m][40]=PORTB;_asm();Buffer1[m][41]=PORTB;_asm();Buffer1[m][42]=PORTB;_asm();Buffer1[m][43]=PORTB;_asm();Buffer1[m][44]=PORTB;_asm();
Buffer1[m][45]=PORTB;_asm();Buffer1[m][46]=PORTB;_asm();Buffer1[m][47]=PORTB;_asm();Buffer1[m][48]=PORTB;_asm();Buffer1[m][49]=PORTB;_asm();
Buffer1[m][50]=PORTB;_asm();Buffer1[m][51]=PORTB;_asm();Buffer1[m][52]=PORTB;_asm();Buffer1[m][53]=PORTB;_asm();Buffer1[m][54]=PORTB;_asm();
Buffer1[m][55]=PORTB;_asm();Buffer1[m][56]=PORTB;_asm();Buffer1[m][57]=PORTB;_asm();Buffer1[m][58]=PORTB;_asm();Buffer1[m][59]=PORTB;_asm();
Buffer1[m][60]=PO

RTB;_asm();Buffer1[m][61]=PORTB;_asm();Buffer1[m][62]=PORTB;_asm();Buffer1[m][63]=PORTB;_asm();Buffer1[m][64]=PORTB;_asm();
Buffer1[m][65]=PORTB;_asm();Buffer1[m][66]=PORTB;_asm();Buffer1[m][67]=PORTB;_asm();Buffer1[m][68]=PORTB;_asm();Buffer1[m][69]=PORTB;_asm();
Buffer1[m][70]=PORTB;_asm();Buffer1[m][71]=PORTB;_asm();Buffer1[m][72]=PORTB;_asm();Buffer1[m][73]=PORTB;_asm();Buffer1[m][74]=PORTB;_asm();
Buffer1[m][75]=PORTB;_asm();Buffer1[m][76]=PORTB;_asm();Buffer1[m][77]=PORTB;_asm();Buffer1[m][78]=PORTB;_asm();Buffer1[m][79]=PORTB;_asm();
Buffer1[m][80]=PORTB;_asm();Buffer1[m][81]=PORTB;_asm();Buffer1[m][82]=PORTB;_asm();Buffer1[m][83]=PORTB;_asm();Buffer1[m][84]=PORTB;_asm();
Buffer1[m][85]=PORTB;_asm();Buffer1[m][86]=PORTB;_asm();Buffer1[m][87]=PORTB;_asm();Buffer1[m][88]=PORTB;_asm();Buffer1[m][89]=PORTB;_asm();
Buffer1[m][90]=PORTB;_asm();Buffer1[m][91]=PORTB;_asm();Buffer1[m][92]=PORTB;_asm();Buffer1[m][93]=PORTB;_asm();Buffer1[m][94]=PORTB;_asm();
Buffer1[m][95]=PORTB;_asm();Buffer1[m][96]=PORTB;_asm();Buffer1[m][97]=PORTB;_asm();Buffer1[m][98]=PORTB;_asm();Buffer1[m][99]=PORTB;_asm();
Buffer1[m][100]=PORTB;_asm();Buffer1[m][101]=PORTB;_asm();Buffer1[m][102]=PORTB;_asm();Buffer1[m][103]=PORTB;_asm();Buffer1[m][104]=PORTB;_asm();
Buffer1[m][105]=PORTB;_asm();Buffer1[m][106]=PORTB;_asm();Buffer1[m][107]=PORTB;_asm();Buffer1[m][108]=PORTB;_asm();Buffer1[m][109]=PORTB;_asm();
Buffer1[m][110]=PORTB;_asm();Buffer1[m][111]=PORTB;_asm();Buffer1[m][112]=PORTB;_asm();Buffer1[m][113]=PORTB;_asm();Buffer1[m][114]=PORTB;_asm();
Buffer1[m][115]=PORTB;_asm();Buffer1[m][116]=PORTB;_asm();Buffer1[m][117]=PORTB;_asm();Buffer1[m][118]=PORTB;_asm();Buffer1[m][119]=PORTB;_asm();
Buffer1[m][120]=PORTB;

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; //场中断标记取反,这样只采集奇数场的图像



}



相关文档
最新文档