智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 5735|回复: 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
///系统是如何到达你指定的中断的呢?

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

3

主题

27

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
353
威望
255
贡献
32
兑换币
0
注册时间
2010-11-26
在线时间
33 小时
2#
 楼主| 发表于 2011-3-30 21:51:01 | 只看该作者
场是pm0  行是IRQ  还用了 作为输出的ECT模块的0~3口
回复 支持 反对

使用道具 举报

2

主题

44

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
370
威望
271
贡献
75
兑换币
0
注册时间
2011-1-1
在线时间
12 小时
3#
发表于 2011-3-30 22:22:11 | 只看该作者
回复 支持 反对

使用道具 举报

0

主题

54

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
285
威望
224
贡献
53
兑换币
0
注册时间
2011-3-18
在线时间
4 小时
4#
发表于 2011-4-4 23:47:24 | 只看该作者
学习了
回复 支持 反对

使用道具 举报

3

主题

375

帖子

0

精华

金牌会员

小草

Rank: 6Rank: 6

积分
1529
QQ
威望
925
贡献
460
兑换币
28
注册时间
2011-3-27
在线时间
72 小时
5#
发表于 2011-4-5 20:12:13 | 只看该作者
学习····
回复 支持 反对

使用道具 举报

1

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

23

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

1

主题

24

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

0

主题

18

帖子

0

精华

中级会员

Rank: 3Rank: 3

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 15:24 , Processed in 0.229251 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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