智能车制作

标题: 模拟摄像头采集的图像怎么在二维数组中存放??帮忙看看代码…… [打印本页]

作者: librae8226    时间: 2009-11-22 12:00
标题: 模拟摄像头采集的图像怎么在二维数组中存放??帮忙看看代码……
大体思路是每采完一场就关掉中断,通过串口把二值化后的图像发到PC上,出现的问题是发过来的东西全是0(阈值没有问题)     - -!



  1. #define BUFF_ROW_MAX 15
  2. #define BUFF_COLUMN_MAX 50

  3. volatile unsigned char buff[BUFF_ROW_MAX][BUFF_COLUMN_MAX]; //存采集的数据
  4. volatile unsigned int SampleRow = 0; //避过场消隐用
  5. volatile unsigned char threshold = 0x2F;  //阈值
  6. volatile unsigned char row = 0, column = 0;
  7. volatile unsigned char SCIrow = 0, SCIcolumn = 0;
  8. volatile Bool vStartFalg = 1; //标志新的一场开始

  9. void interrupt 8 Port0_interrupt(void) // HS interrupt
  10. {
  11.     unsigned int i;
  12.     TFLG1_C0F = 1; // Clear HS interrupt flag
  13.     TIE_C0I = 0; // Disable HS interrupt
  14.    
  15.     if( vStartFalg ) // Avoid VS blanking
  16.     {
  17.         if ( SampleRow++ <= 5 )
  18.         {
  19.          return;                           
  20.         }
  21.     }
  22.     for( i = 0; i < 55; i++) // Avoid HS blanking
  23.     {
  24.         asm(nop);
  25.     }
  26.     for( column = 0; column < BUFF_COLUMN_MAX; column++ )
  27.     {
  28.         while(!ATD0STAT0_SCF);
  29.         buff[row][column] = ATD0DR0L;
  30.     }
  31.     //TIE_C0I = 0; // Disable HS interrupt,just sample one row.
  32.     vStartFalg = 0;
  33.    
  34.     if( row++ <= BUFF_ROW_MAX )
  35.     {
  36.         TIE_C0I = 1;
  37.     }
  38. }
  39. void interrupt 9 Port1_interrupt(void)
  40. {
  41.     TIE_C0I = 0; // Disable HS interrupt
  42.     TFLG1_C1F = 1; // Clear VS interrupt flag
  43.     /**************************************
  44.     *                        Send Image                         *
  45.     **************************************/
  46.     TIE_C1I = 0;
  47.     for( SCIrow = 0; SCIrow < BUFF_ROW_MAX; SCIrow++ )
  48.     {
  49.         for( SCIcolumn = 0; SCIcolumn < BUFF_COLUMN_MAX; SCIcolumn++ )
  50.         {
  51.             if(buff[SCIrow][SCIcolumn] > threshold)
  52.                 SCI_Transmit('1');
  53.             else
  54.                 SCI_Transmit('0');
  55.             delayms(150);
  56.         }
  57.         SCI_Transmit('\n');
  58.     }
  59.     SCI_Transmit('\n');
  60.     /**************************************
  61.     *                   End of Sending                         *
  62.     **************************************/
  63.     //PORTB = ~PORTB;
  64.    
  65.     delayms(2);
  66.     SampleRow = 0;
  67.     vStartFalg = 1;
  68.     row = 0;  // Reinitialize
  69.     TIE_C1I = 1; // Enable VS interrupt
  70.     TIE_C0I = 1; // Enable HS interrupt
  71. }

复制代码


麻烦帮忙看看或者分享一下能实现的代码,谢谢啦~~
作者: librae8226    时间: 2009-11-23 07:51
解决了,是两个中断开和关时候不对的问题
作者: zhwbiao123    时间: 2010-2-26 14:31
是哦,呵呵!
作者: zhwbiao123    时间: 2010-2-26 15:33
感觉还是多看看往届的论文
作者: pkmaoqiao    时间: 2010-3-5 22:41
什么开和关,能具体点吗?
作者: 573377313    时间: 2010-3-6 16:14
好东西
作者: zhizhi    时间: 2010-3-8 11:07
不是很理解
作者: windprince    时间: 2010-3-13 10:38
回复 3# zhwbiao123

具体中断的开关是怎么改的?
作者: hex    时间: 2010-3-13 13:41
看看~~·
作者: windprince    时间: 2010-3-13 17:18
回复 2# librae8226
怎么修改的?麻烦告诉一下,谢啦
作者: librae8226    时间: 2010-3-18 18:41
不好意思啊,好长时间没上了,我把调通的代码发上来,还没弄好的朋友们参考交流一下喽!
作者: librae8226    时间: 2010-3-18 18:42



  1. #include <hidef.h>      /* common defines and macros */

  2. #include <MC9S12XS128.h>     /* derivative information */

  3. #include "ATDInit.h"

  4. #include "PortInit.h"

  5. #include "INTInit.h"

  6. #include "SetBusCLK.h"

  7. #include "TimerInit.h"

  8. #include "SCIInit.h"



  9. #pragma LINK_INFO DERIVATIVE "mc9s12xs128"



  10. #define BUFF_ROW_MAX 15

  11. #define ROW_INTERVAL 15

  12. #define BUFF_COLUMN_MAX 35



  13. #pragma CODE_SEG DEFAULT



  14. //#define BUFF_ADDR 0x2500

  15. //#define BUFF_ADDR_F $2500



  16. /*************************************

  17. *    Variables Definition Module     *

  18. *************************************/



  19. volatile unsigned char buff[BUFF_ROW_MAX][BUFF_COLUMN_MAX];

  20. volatile unsigned int SampleRow = 0;

  21. volatile unsigned char threshold = 0x2F;

  22. volatile unsigned char row = 0, column = 0;

  23. volatile unsigned char SCIrow = 0, SCIcolumn = 0;

  24. volatile unsigned int rowcounter = 0;

  25. volatile Bool vStartFalg = 1;



  26. /*************************************

  27. *    Functions Definition Module     *

  28. *************************************/



  29. #pragma CODE_SEG DEFAULT

  30. //Normal Functions



  31. void delayms(int ms) // 40MHz--1ms

  32. {   

  33.     unsigned int ii, jj;

  34.     for( ii = 0; ii < ms; ii++ )

  35.         for( jj = 0; jj < 255; jj++ );         

  36. }



  37. #pragma CODE_SEG __NEAR_SEG NON_BANKED

  38. //Interrupt Functions



  39. void interrupt 8 Port0_interrupt(void) // HS interrupt

  40. {

  41.     unsigned int i;



  42.     TFLG1_C0F = 1; // Clear HS interrupt flag

  43.     rowcounter++;

  44.    

  45.     if( vStartFalg ) // Avoid VS blanking

  46.     {

  47.         if ( SampleRow++ <= 10 )

  48.         {

  49.                 return;                           

  50.         }

  51.     }

  52.     vStartFalg = 0;

  53.     if( rowcounter % ROW_INTERVAL == 0)

  54.     {

  55.         for( i = 0; i < 100; i++) // Avoid HS blanking(35~75)

  56.         {

  57.             asm(nop);

  58.         }

  59.         TIE_C0I = 0; // Disable HS interrupt



  60.         for( column = 0; column < BUFF_COLUMN_MAX; column++ )

  61.         {

  62.             while(!ATD0STAT0_SCF);

  63.             buff[row][column] = ATD0DR0L;

  64.         }

  65.         row++;

  66.         

  67.         TIE_C0I = 1;

  68.         

  69.         //TIE_C0I = 0; // Disable HS interrupt,just sample one row.

  70.         

  71.         if( row > BUFF_ROW_MAX )

  72.         {

  73.             TIE_C0I = 0;

  74.             TIE_C1I = 1;

  75.         }

  76.     }

  77. }



  78. void interrupt 9 Port1_interrupt(void) //VS interrupt

  79. {

  80.     TIE_C0I = 0; // Disable HS interrupt

  81.     TIE_C1I = 0;

  82.     TFLG1_C1F = 1; // Clear VS interrupt flag

  83.     /**************************************

  84.     *              Send Image             *

  85.     **************************************/

  86.     for( SCIrow = 0; SCIrow < BUFF_ROW_MAX; SCIrow++ )

  87.     {

  88.         for( SCIcolumn = 0; SCIcolumn < BUFF_COLUMN_MAX; SCIcolumn++ )

  89.         {

  90.             if(buff[SCIrow][SCIcolumn] > threshold)

  91.                 SCI_Transmit('1');

  92.             else

  93.                 SCI_Transmit('0');

  94.             delayms(50);

  95.         }

  96.         SCI_Transmit('\n');

  97.     }

  98.     SCI_Transmit('\n');

  99.     PORTB_PB7 = !PORTB_PB7;

  100.     /**************************************

  101.     *            End of Sending           *

  102.     **************************************/

  103.    

  104.     delayms(2);

  105.     SampleRow = 0;

  106.     vStartFalg = 1;

  107.     row = 0;  // Reinitialize

  108.     rowcounter = 0;



  109.     //TIE_C1I = 1; // Enable VS interrupt

  110.     TIE_C0I = 1; // Enable HS interrupt       

  111. }   



  112. /*************************************

  113. *               MAIN                 *

  114. *************************************/

  115. void main(void)

  116. {

  117.     /* put your own code here */



  118.     DisableInterrupts;



  119.     /**************************************

  120.     *   Functions Initialization Module   *

  121.     **************************************/

  122.     SetBusCLK(); // 80MHz

  123.     Port_Init();

  124.     ATD_Init();

  125.     Timer_Init_AV();

  126.     SCI_Init();

  127.   

  128.     /**************************************

  129.     *   Variables Initialization Module   *

  130.     **************************************/



  131.     EnableInterrupts;



  132.     for(;;)

  133.     {

  134.         _FEED_COP(); // Feed Watchdog;

  135.     }

  136.     /* wait forever */

  137.     /* please make sure that you never leave this function */

  138. }
复制代码

作者: windprince    时间: 2010-3-24 18:27
回复 11# librae8226

谢谢!
作者: shuxinxiaozi    时间: 2010-3-25 15:13
恩,学习下!
作者: jiutian0396    时间: 2010-4-6 20:32
顶一下
作者: jiutian0396    时间: 2010-4-6 20:32
顶一下
作者: botewin    时间: 2010-4-17 20:25
学习一下
作者: kangluoyi    时间: 2010-4-24 16:38
????
作者: jwauto    时间: 2010-6-20 19:05
kankan
作者: yanshengbin    时间: 2010-6-22 19:31
kankan
作者: zhangzufeng    时间: 2010-11-9 21:43
好东西




欢迎光临 智能车制作 (http://111.231.132.190/) Powered by Discuz! X3.2