智能车制作
标题:
新人求助 OV6620每一场的行数不对
[打印本页]
作者:
jeremylt
时间:
2011-4-14 09:10
标题:
新人求助 OV6620每一场的行数不对
我们队使用的是OV6620^
之前由于单片机出了问题,一直没有找到解决的方案,所以进度有点慢啊
现在遇到的问题是,我们用PT0口接场中断,PT1口接行中断,场中断用了下降沿,行中断用了上升沿
设计的是用串口发送0x55过去,就开启场中断,在场中断服务程序中开启行中断,然后采集数据
到了第二场过来的时候就关闭两个中断,并用串口传送采集数据
可是一开始在行中断服务程序计数行数时中出现了问题
行数也就是 href变量 竟然从47到288行变化不等!怎么会这样的?
我真的不明白,请高手帮忙啊!
程序如下:
/************************场中断*************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 8 vIC2ISR(void) {
DisableInterrupts;
TFLG1_C0F=1;
if (flag3 == 0x66){
flag3 = 0x33;
row = 0;
line = 0;
TIE_C1I=1; //使能行中断T1使能
}else if(flag3 == 0x33){
flag3 = 0;
flag2 = 0;
flag1 = 1;
flag4 = 0;
TIE =0x00; //关闭两个中断T1,T0
uart_SentBuffer1();
}
EnableInterrupts;
}
#pragma CODE_SEG CODE_DEFAULT
/************************行中断*************************/
#pragma CODE_SEG __NEAR_SEG NON_BANKED
void interrupt 9 vIC1ISR(void)
{
TFLG1_C1F=1;
flag4 = 1;
row ++;
line = 0;
href ++;
}
#pragma CODE_SEG CODE_DEFAULT
/************************主函数**************************/
void main(void) {
/* put your own code here */
INT8U ch,i;
DisableInterrupts;
SetBusCLK_40M();
uart_init();
vinterruptsinit();
vIOPortInit();
EnableInterrupts;
while (1){
if(flag1 == 1){
DisableInterrupts;
TIOS =0x00; //关闭场中断
EnableInterrupts;
uart_SentChar(flag2);
uart_SentChar(href/256);
uart_SentChar(href%256);
if(!(href == 0)){
href = 0;
}
flag2 = uart_GetChar();
flag1 = 0;
}
if (flag2 == 0x55){ //如果上位机发送0x55指令,则初始化外部中断,并开始准备向串口传输数据;
TIE_C0I=1; //使能场中断,在场中断中使能行中断
flag3 = 0x66;
flag1 = 1;
}else flag1 = 1;
while (flag2 == 0x55){
while (flag3 == 0x33){ //确定 行中断已经开启,并开始采集数据
while(flag4 == 1) {
while(row <ROW_MAX && line <LINE_MAX)
Buffer1[row-1][line] = PORTB;
line ++;
}
}
}
}
/* please make sure that you never leave main */
}
作者:
jeremylt
时间:
2011-5-20 20:27
呵呵 当年很单纯啊… 其实也就一个多月前…
出现这样情况的同学们… 那是因为在场中断中开启行中断,是有硬件稳定时间的…
连续开着的话… 行数就不会变化了
欢迎光临 智能车制作 (http://111.231.132.190/)
Powered by Discuz! X3.2