?? interrupts.c
字號:
//*************************************************************************
//* *
//* **********************中斷函數************************* *
//* *
//*************************************************************************
#include "Includes.h"
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
unsigned int ui_SpeedCount=0; //用于測速脈沖計數。
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//當前采樣圖像的行和列。
unsigned int ui_SampleRow=0,ui_SampleColumn=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//圖像數據緩存
unsigned char uca_Buffer1[IMAGE_ROW][IMAGE_COLUMN];
unsigned char uca_Buffer2[IMAGE_ROW][IMAGE_COLUMN];
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//指向當前采集數據采樣緩存首地址的指針
unsigned char *puca_BufferSample=&uca_Buffer1[0][0];
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//指向當前處理數據采樣緩存首地址的指針
unsigned char *puca_BufferProcess=&uca_Buffer2[0][0];
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//用于圖像采集和處理交換緩存。
//(注意:在每次交換指針后保證puca_BufferTemp與puca_BufferSample相同)
unsigned char *puca_BufferTemp=&uca_Buffer1[0][0];
unsigned char uc_PowerVoltage=LOWEST_VOLTAGE;
#pragma CODE_SEG NON_BANKED
//*************************************************************************
//* *
//* *******************輸入捕捉2通道中斷函數******************** *
//* *
//*************************************************************************
//行同步 ,用于數據采集。
void interrupt 10 vIC2ISR(void)
{
unsigned char ucTemp;
unsigned char *pucTemp;
TFLG1_C2F=1;
if(ui_SampleRow>=SAMP_ROW_START&&ui_SampleRow<SAMP_ROW_MAX)
{
if(ui_SampleRow%SAMP_ROW_SEP==0)
{
for(ui_SampleColumn=0;ui_SampleColumn<SAMP_COL_MAX;ui_SampleColumn++)
{
while(!ATD1STAT1_CCF0);
if(ui_SampleColumn>=SAMP_COL_START)
{
if(ui_SampleColumn%SAMP_COL_SEP==0)
{
pucTemp=puca_BufferSample
+((ui_SampleRow-SAMP_ROW_START)/SAMP_ROW_SEP)*IMAGE_COLUMN
+(ui_SampleColumn-SAMP_COL_START)/SAMP_COL_SEP;
*pucTemp=ATD1DR0L;
}
}
}
}
}
ucTemp=ATD1DR0L;
ui_SampleRow++; //采樣行坐標加一。
}
//*************************************************************************
//* *
//* *******************輸入捕捉1通道中斷函數******************** *
//* *
//*************************************************************************
//場同步,交換緩存以及圖像處理和模型車控制。
void interrupt 9 vIC1ISR(void)
{
TFLG1_C1F=1;
ui_SampleRow=0; //把采樣行坐標清零。
ui_SampleColumn=0;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//交換圖像采集和處理緩存
puca_BufferSample=puca_BufferProcess;
puca_BufferProcess=puca_BufferTemp;
puca_BufferTemp=puca_BufferSample;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//系統時間加一。
ul_SystemTime+=1;
//<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
//開中斷,允許行信號中斷進行采樣。
EnableInterrupts;
/* while(!ATD1STAT1_CCF0);
uc_PowerVoltage=ATD0DR0L;
if(uc_PowerVoltage<LOWEST_VOLTAGE)
{
vCarStop();
PORTB=~PORTB;
return;
} */
if(uc_CarState==STATE_START)
{
// PORTB_BIT1=1;
//分析圖像,獲取路徑參數,根據路徑參數控制模型車。。
vImageProcess();
//根據路徑參數控制模型車。
vAutoControl();
// PORTB_BIT1=0;
}
}
//*************************************************************************
//* *
//* *******************輸入捕捉0通道中斷函數******************** *
//* *
//*************************************************************************
//用于測速,每當測速脈沖到來時,脈沖計數加一。
void interrupt 8 vIC0ISR(void)
{
TFLG1_C0F=1;
ui_SpeedCount++;
}
//*************************************************************************
//* *
//* *********************定時器溢出中斷函數******************** *
//* *
//*************************************************************************
void interrupt 16 vTimerOverflowISR(void) //用于測量賽車速度。
{
TFLG2_TOF=1;
ui_DetectSpeed=ui_SpeedCount;
ui_SpeedCount=0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -