智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 4080|回复: 11
打印 上一主题 下一主题

图像采集问题

  [复制链接]

6

主题

185

帖子

0

精华

高级会员

Rank: 4

积分
963
威望
435
贡献
438
兑换币
0
注册时间
2010-1-11
在线时间
45 小时
跳转到指定楼层
1#
发表于 2010-4-23 23:00:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
//************ad图像采集并通过串口发给电脑显示程序****************//
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++//
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */

#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
/***********变量声明*******/
#define START_COW 25
#define MAX_COW  600
#define COLUMN_MAX 40
#define HIGH 50
#define WIDTH 40
#define COW_SPACE 8
unsigned char img[HIGH][WIDTH],img_temp,chang_flag=0;
unsigned int rel_cow,puls_data;
  int i,j;
  unsigned char del,count0,count1;
void dly_ms(int ms)               
{
         int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     for(jj=0;jj<5470;jj++);    //32MHz--1ms        
}
//--------------初始化函数----------------//

//*******总线时钟初始化************//
void PLL_Init(void)   //PLLCLK=2*OSCCLK*(SYNR+1)/(REFDV+1)
{                     //锁相环时钟=2*16*(3+1)/(1+1)=64MHz
  CLKSEL=0X00;
  REFDV=1;            //总线时钟=64/2=32MHz
  SYNR=3;
  POSTDIV=0X00;
  asm(nop);
  asm(nop);
  while(!(CRGFLG&0x08));
  CLKSEL=0x80;        //选定锁相环时钟
}

//******AD初始化******//

void AD_Init(void)     
{
  ATD0CTL1=0X00;     //8位精度,转换前不放电
  ATD0CTL2=0x00;     // 快速清零, 无等待模式, 禁止外部触发, 中断禁止
  ATD0CTL3=0x88;     // 右对齐无符号,转换序列长度为1, No FIFO, Freeze模式下继续转换
  ATD0CTL4=0x00;     // 为确定值 转换4个时钟, ATDClock=[BusClock*0.5]/[PRS+1]=0.83MHz;
                     // PRS=18,每隔约1.2us采集一点
  ATD0CTL5=0x20;     //单通道采样,持续采样,选择通道0   
  ATD0DIEN=0x0000;   // 禁止数字输入

}
//********ECT输入捕捉中断接入***********//
void ECT23_Init(void)            
{                          
  //TSCR2=0x07;          //禁止溢出中断,分频系数2,一个计数16us
  TIOS_IOS2=0;         //通道2为输入捕捉
  TIOS_IOS3=0;         //通道3为输入捕捉
  TCTL4=0X90;          //通道2上升沿捕捉行中断,通道3下降沿捕捉场中断;
  TIE_C2I=1;           //通道2输入捕捉中断允许
  TIE_C3I=1;           //通道3输入捕捉中断允许
  TSCR1=0x80;          //使能定时器
}

//********初始化SCI0************//
/*void Sci0Init()
{
    SCI0BD=52;         //9600bps  Baud Rate=BusClock/(16*SCIBD)
    SCI0CR1=0;         //正常8位模式,无奇偶校验
    SCI0CR2=0X2C;      //发送允许   接受中断允许  
} */
//**********写发送SCI数据*******//   
/*void SciWrite(unsigned char sendchar)
{
    while (!(SCI0SR1&0x80));//表明此时保持器数据为空,可以写入新数据
    SCI0DRH=0;
    SCI0DRL=sendchar;
}                            */
//**********图像发送函数*********/
/*void Send_img(void)
  {
    unsigned int i,j;
    for(i=0;i<HIGH;i++)
      for(j=0;j<WIDTH;j++)
        {  
          if(ATD0STAT0_SCF==1){

        //  img_temp=ATD0DR0L;
          img_temp=img[j];               
          SciWrite(img_temp);
          }
        }
  }*/
//*****************主函数*******************//
void main(void) {
  /* put your own code here */
    PLL_Init();
   // Sci0Init();
   //Pacn_init();
    AD_Init();
   ECT23_Init();
    DDRB=0XFF;
//    Ect0_init();
  EnableInterrupts;

  for(;;) {
  
      PORTB=img[0][10];   
   //if(chang_flag==1)
   // {
   //   chang_flag=0;
  /* for(j=0;j<COLUMN_MAX;j++)
           {
              while(ATD0STAT0_SCF==0);
              img[j]=ATD0DR0L;
            //  SciWrite(img[j]);
           }    */         
           //  SciWrite(0X55);                  
          /* i++;
           if(i==50)i=0;
        
   //   TIE_C2I=1;*/            
  //  }
  _FEED_COP();} /* wait forever */
  /* please make sure that you never leave this function */
}
//+++++++++++++++中断函数+++++++++++//
#pragma CODE_SEG NON_BANKED         
void interrupt 10 Timer2_cow(void)  //行中断

{  TIE_C3I=0;
   TFLG1_C2F=1;      //清中断标志位
   rel_cow++;   
for(del=0;del<3;del++)
    {
      asm(nop);
    }//消除行效应

if((rel_cow>START_COW)&&(rel_cow<=MAX_COW))
    {
      if(rel_cow%COW_SPACE==0)                   //间隔10后取行数据
        {
           for(j=0;j<COLUMN_MAX;j++)
           {
              while(ATD0STAT0_SCF==0);
              img[j]=ATD0DR0L;        
           }
           i++;
        }
    }TIE_C3I=1;  
}
void interrupt 11 timer3_chang(void)      //场中断到来
  {
    TIE_C2I=0;
    TFLG1_C3F=1;
    rel_cow=0;
    i=0;
    chang_flag=1;
    count0++;
    TIE_C2I=1;
  }

帮忙看看这个程序,为什么下载到xs128后,单击绿色箭头运行,只一会儿就停住了,在点还是这样?为什么呢?
      

2

主题

87

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
421
威望
315
贡献
82
兑换币
0
注册时间
2010-4-19
在线时间
12 小时
2#
发表于 2010-4-29 22:11:33 | 只看该作者
路过
回复 支持 反对

使用道具 举报

2

主题

50

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
343
QQ
威望
272
贡献
39
兑换币
0
注册时间
2010-1-12
在线时间
16 小时
3#
发表于 2010-5-5 21:54:52 | 只看该作者
检查一下看看是不是逻辑上有错误,还是你的场中断或行中断设置有问题
回复 支持 反对

使用道具 举报

3

主题

62

帖子

0

精华

高级会员

Rank: 4

积分
538
QQ
威望
344
贡献
124
兑换币
0
注册时间
2010-4-13
在线时间
35 小时
4#
发表于 2010-5-6 19:55:24 | 只看该作者
是什么问题啊 ,我也经常遇到这种问题,谁知道的帮忙解答一下了,谢谢啦
回复 支持 反对

使用道具 举报

2

主题

9

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
231
威望
201
贡献
26
兑换币
0
注册时间
2010-4-4
在线时间
2 小时
5#
发表于 2010-5-25 22:21:49 | 只看该作者
是看门狗使单片机复位。。你这种初始化方法是DG128的方法吧。ECT模块二者有一些不同,建议再看看xs128的ECT 寄存器设置
回复 支持 反对

使用道具 举报

3

主题

39

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
307
QQ
威望
257
贡献
34
兑换币
0
注册时间
2010-4-23
在线时间
8 小时
6#
发表于 2010-6-24 16:55:57 | 只看该作者
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
210
贡献
52
兑换币
8
注册时间
2011-2-27
在线时间
16 小时
7#
发表于 2011-2-28 12:06:36 | 只看该作者
MARK
回复 支持 反对

使用道具 举报

2

主题

15

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
294
威望
210
贡献
52
兑换币
8
注册时间
2011-2-27
在线时间
16 小时
8#
发表于 2011-2-28 12:06:38 | 只看该作者
MARK
回复 支持 反对

使用道具 举报

5

主题

88

帖子

0

精华

高级会员

Rank: 4

积分
652
QQ
威望
490
贡献
128
兑换币
0
注册时间
2011-1-26
在线时间
17 小时
9#
发表于 2011-5-8 20:22:53 | 只看该作者
受教了
回复 支持 反对

使用道具 举报

3

主题

203

帖子

0

精华

高级会员

Rank: 4

积分
764
威望
491
贡献
215
兑换币
19
注册时间
2011-4-18
在线时间
29 小时
10#
发表于 2011-5-22 20:55:06 | 只看该作者
bu qingchu
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-6-17 09:11 , Processed in 0.160926 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表