智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5797|回复: 13
打印 上一主题 下一主题

模拟摄像头图像采集程序

  [复制链接]

3

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
353
威望
255
贡献
32
兑换币
0
注册时间
2010-11-26
在线时间
33 小时
跳转到指定楼层
1#
发表于 2011-3-30 21:42:06 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
CCD采集程序如下
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
unsigned char pic[70][80];
unsigned int hang;
unsigned int changwan;
unsigned int point;
unsigned char *p;
void allinit(void)
{   
    CLKSEL=0X00;    //disengage PLL to system
    PLLCTL_PLLON=1;   //turn on PLL
    SYNR =0xc0 | 0x05;                        
    REFDV=0x80 | 0x01;
    POSTDIV=0x00;       //pllclock=2*osc*(1+SYNR)/(1+REFDV)=96MHz;
    _asm(nop);          //BUS CLOCK=48M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;          //engage PLL to system;
////////////////////////////////////////////
  
    ATD0CTL1=0x00;//8位精度
    ATD0CTL2=0x40;//禁止外部触发,标志位快速清零,中断禁止
    ATD0CTL3=0x88;//右对齐无符号.转换序列长度为1,No FIFO模式,Freeze模式下继续转换?
    ATD0CTL4=0x00;//4AD采样周期,ATDClock=[BusClock*0.5]/[PRS+1]  ;
    ATD0CTL5=0x20;//特殊通道禁止,单通道采样,扫描模式连续采样,ch AN0
    ATD0DIEN=0x00;//禁止数字输入
     
/////////////////////////////////////////

   TIOS=0x0B;                   //PT0-3 通道设置为输出比较,PT4-7 通道设置为输入捕捉
   TIE=0;                          //初始时屏蔽所有通道的中断
   TSCR2=0x04;                     //溢出中断禁止,计时器频率由总线频率16分频得到==3.125MHz
   TCTL3=0x40;                     //检测上升沿  7通道
   TSCR1=0x80;                     //启动ECT模块及计数器                                                           
   IRQCR=0;                        //关闭行同步中断(IRQ
  ///////////////////////////////////////////
   SCI0CR1 = 0X00;
   SCI0CR2 = 0X0c;
   SCI0BDH = 0x01; //busclk  8MHz,19200bps,SCI0BDL=0x1a
   SCI0BDL = 0x38; //SCI0BDL=busclk/(16*目标波特率)
  /////////////////////////////////////////
  
   DDRM = 0x00;            //场中断打开
   
  
}
//发送一个字
void scisend1(unsigned char i)
{   
    for(;;)
  
    if((SCI0SR1 & 0X80) != 0)   //发送数据寄存器空
    {
      SCI0DRL=i;
      
       break;
    }
}
//main函数
void main(void)
{
allinit();
  
  hang=0;                          //一场中行计数清零
changwan=0;                          //清除场采集结束标志
                                 //场中断开()?
  for(;;)
  {  
  hang=0;                          //一场中行计数清零
  changwan=0;                          //清除场采集结束标志
   
  while((PTM&0x01)!=0);             //等待场同步信号到来 ?
   DDRM = 0XFF;                             //关闭场中断()?
  TC0=TCNT+0x0c48;                   //等待场消隐结束定时 ?
  TFLG1=0xFF;                        //清楚计数完成标志   ?
  TIE=0x01;                          //开启TC0 中断(interrupt 8)
   
  while(changwan==0);
  DisableInterrupts;
  //下面处理或发送 ,最后开启场中断。
  // 图像到底怎么存储
  //  最后要不要把手地址复原 ,场中断要zenyan判断?
   
    p=p-5600;               //图像首地址前一个地址
    if(p<p+5600)                  
    scisend1(*(p++));
   
    DDRM =0X00;             //开启场中断
   
  }
}

////////////////////////////
#pragma CODE_SEG __NEAR_SEG NON_BANKED   
// Vector 8 Interrupt:Timer0
interrupt 8 void timer0(void)   
{
scisend1(4);
  TIE=0;                              //关闭定时器局部中断
  IRQCR=0x40;                         //开启行同步中断(interrupt 6)
   
}
// Vector  Interrupt:start get a line
interrupt 6 void line_start(void)   
{
  IRQCR=0;                             //关闭行中断   
  if(hang==70)
  {
    changwan=1;                          //场结束标志位
  }
  else
  {
    point=0;                         //一行中点计数清零   
    TC1=TCNT+0x001D;                   //等待行消隐结束定时 ?
    TFLG1=0xFF;                        //清除计数完成标志
    TIE=0x02;                          //开启TC1 局部中断(interrupt 9)
  }
}   
// Vector 9 Interrupt:Timer1
interrupt 9 void timer1(void)   
{
   
  TIE=0;                            //关闭定时器局部中断
  p=&(pic[hang][0]);
  
   
  while(point!=80)  
  {
    while(!ATD0STAT0_SCF);           //  ?
    *p=ATD0DR0L;
    p++;
    point++;
  }
  hang++;
  
  TC1=TCNT+0x001D;   //  ?
  TFLG1=0xFF;       //清除计时完成标志
  TIE=0x04;         //开启TC2局部中断(interrupt 10)
   
}
// Vector 10 Interrupt:Timer2
interrupt 10 void timer2(void)   
{
  TIE=0;           //关闭定时器局部中断
  IRQCR=0x40;      //开启行同步中断(interrupt 6)
}
#pragma CODE_SEG DEFAULT
///系统是如何到达你指定的中断的呢?

程序有点问题 好像进入不了子程序。哪位高手给看看 。帮改改

0

主题

12

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
384
威望
194
贡献
144
兑换币
105
注册时间
2012-11-21
在线时间
23 小时
毕业学校
金凤回一
14#
发表于 2012-11-21 19:23:36 | 只看该作者
学习。
回复 支持 反对

使用道具 举报

12

主题

165

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
2023
威望
1069
贡献
584
兑换币
525
注册时间
2012-9-1
在线时间
185 小时
13#
发表于 2012-11-7 22:04:25 | 只看该作者
路过
回复 支持 反对

使用道具 举报

6

主题

156

帖子

0

精华

高级会员

Rank: 4

积分
553
威望
371
贡献
88
兑换币
11
注册时间
2012-4-9
在线时间
47 小时
12#
发表于 2012-4-28 19:30:54 | 只看该作者
顶一个
回复 支持 反对

使用道具 举报

1

主题

3

帖子

0

精华

注册会员

Rank: 2

积分
113
威望
174
贡献
29
兑换币
0
注册时间
2011-7-12
在线时间
3 小时
11#
发表于 2011-7-21 14:43:21 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
314
威望
242
贡献
44
兑换币
8
注册时间
2011-4-18
在线时间
14 小时
10#
发表于 2011-7-17 16:44:14 | 只看该作者
3Q
回复 支持 反对

使用道具 举报

1

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
357
威望
274
贡献
41
兑换币
16
注册时间
2011-3-26
在线时间
21 小时
9#
发表于 2011-4-9 13:12:03 | 只看该作者
看看
回复 支持 反对

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
威望
193
贡献
29
兑换币
0
注册时间
2011-1-13
在线时间
8 小时
8#
发表于 2011-4-6 16:50:40 | 只看该作者
学习
回复 支持 反对

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
238
威望
193
贡献
29
兑换币
0
注册时间
2011-1-13
在线时间
8 小时
7#
发表于 2011-4-6 16:50:33 | 只看该作者
学习
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
452
QQ
威望
310
贡献
90
兑换币
0
注册时间
2010-12-11
在线时间
26 小时
6#
发表于 2011-4-5 23:38:29 | 只看该作者
哦哦
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-6 09:47 , Processed in 0.137033 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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