智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 3411|回复: 4
打印 上一主题 下一主题

求帮助

[复制链接]

2

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
威望
191
贡献
32
兑换币
0
注册时间
2010-10-15
在线时间
12 小时
跳转到指定楼层
1#
发表于 2010-12-30 00:15:52 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
我刚开始学单片机,最近在写CCD摄像头图像采集的程序,用的是片内AD,写了段代码有问题,希望有高手看看,指点一下,程序中还应注意什么问题?、?
#include <hidef.h>      /* common defines and macros */
#include "derivative.h"      /* derivative-specific definitions */
uchar image[62][20];        //采集62行,20列
uchar row=0,column=0,rowcount=0;         //行数,列数
//uchar count=0;            //定时器计数
void clock_init(void){
  CLKSEL=0X00;
  PLLCTL_PLLON=1;                //锁相环电路使能
  REFDV=1;
  SYNR=2;                       //总线频率=16M*(SYNR+1)/(REFDV+1)=24M
  while(!(CRGFLG & 0x08));      //等待VCO达到稳定               
  CLKSEL=0x80;                  //打开PLL,选定锁相环时钟     
}
void peh_init(void){             //中断初始化,PE1接行中断,PH1接场中断
  DDRH=0x00;                     //设置H口为输入  
  PERH=0xff;                     //上拉使能寄存器  
  PPSH=0xff;                    //极性选择寄存器上升沿触发
  PIEH=0xff;                   //中断使能寄存器
  PIFH=0xff;                    //清除中断标志位
  IRQCR_IRQEN=1;                   //中断使能
  IRQCR_IRQE=1;                   //下降沿触发   
}
void ad_init(void){
        ATD0CTL1=0x00;             //7:1-外部触发,8位精度,采样前不放电
  ATD0CTL2=0x40;             //自动清零,禁止外部触发, 禁止中断   
  ATD0CTL3=0xE0;             //右对齐无符号(ATD0DR0H),转换序列长度为12,没有映射,冻结模式下继续转换   
  ATD0CTL4=0x05;             //采样时间为4个AD时钟周期,PRS=2,ATDClock=Bus/2*[PRS+1]=48/12=4mhz,
  ATD0CTL5=0x30;              //单次AD转换模式,单通道AD转换,转换通道:AD0
  ATD0DIEN=0x00;             //禁止数字输入
}
void main(void){
  clock_init();
  peh_init();
  ad_init();
  row=0;                  //行计数清零
  column=0;               //列计数清零
        EnableInterrupts;   
  for(;;) {         
   _FEED_COP();                                           /* feeds the dog */
                }                                  /* loop forever */               
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
interrupt 25 void ISR_VS(void){                 //PH1场中断
  row=0;
  rowcount=0;
  IRQCR_IRQEN=1;                   //行中断使能
  PIFH=0xff;                    //清除场中断标志位
  PPSH=~PPSH;                  //从上升沿触发改为下降沿触发
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED //指示该程序在不分页区
interrupt 6 void ISR_HS(void){      //PE1行中断  

  IRQCR_IRQEN=0;                         //关闭行中断
  rowcount++;                               //行数加1
  if(rowcount%5==0){                        //每隔5行采一次数据
    /* PITCFLMT_PITE=1;                     //定时中断通道0使能
      while(!(count==2));                  //等待行消隐信号结束,4*2.5us=10us
      count=0;  
      PITCFLMT_PITE=0;                     //定时器通道0关      */                                 
      for(column=0;column<20;column++){               //一行采20个点
          ATD0CTL5 = 0x30;                        //开始一次新的转换      
          while(!ATD0STAT0_SCF);    //等待AD0转换结束
          image[row][column]=ATD0DR0L;
      }
      row++;
  }  
  IRQCR_IRQEN=1;                   //行中断使能
}

2

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
威望
191
贡献
32
兑换币
0
注册时间
2010-10-15
在线时间
12 小时
4#
 楼主| 发表于 2011-1-4 22:21:25 | 只看该作者
对中断的硬件初始化编程不太理解,不知道使用外部中断,lm1881的行中断和场中断分别输到单片机接口的是什么变化信号,单片机的中端口是如何判别lm1881的中断信号的
回复 支持 反对

使用道具 举报

1

主题

32

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
380
威望
263
贡献
25
兑换币
0
注册时间
2010-12-10
在线时间
46 小时
3#
发表于 2011-1-3 19:50:05 | 只看该作者
能说说是什么问题么?
回复 支持 反对

使用道具 举报

2

主题

5

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
247
威望
191
贡献
32
兑换币
0
注册时间
2010-10-15
在线时间
12 小时
2#
 楼主| 发表于 2010-12-30 00:16:35 | 只看该作者
用的是xs的单片机
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 14:23 , Processed in 0.098862 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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