智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 1975|回复: 1
打印 上一主题 下一主题

从OV7670收到数据不全,新人求助。。。

[复制链接]

1

主题

1

帖子

0

精华

注册会员

Rank: 2

积分
171
威望
129
贡献
42
兑换币
0
注册时间
2012-9-5
在线时间
7 小时
毕业学校
西安电子科技大学
跳转到指定楼层
1#
发表于 2012-10-16 19:18:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
主程序如下,主要是从摄像头采集图像后给430再串口发送给PC,但无论是哪种发送方法收到数据都严重不全。。求大虾指导。。
#include<msp430x14x.h>
#include"delay.h"
#include"ov7670.h"
#include"UART.h"

unsigned char bn=0;

void initsys(void)
{
  BCSCTL1 &= ~XT2OFF;
  unsigned char i;
  do
  {
    IFG1 &= ~OFIFG;
    for(i=0xee;i>0;i--)
    {
      ;
    }
  }
  while((IFG1&OFIFG)!=0);   
  BCSCTL2 |= SELM_2 + SELS+DIVS_3;      
}

void set()
{
  U0CTL |= SWRST;      //开启设置
  U0TCTL = SSEL1;   //选择 SMCLK=8M        波特率=115200
  /* 8M /115200 = 69.4444       69 = 0x45     0.444* 8= 3.552~4*/
  /* 32768/9600=3.4133    0.4133*8=4*/
  U0BR0 = 0x45;         
  U0BR1 = 0x00;
  U0MCTL =0x55;     
  U0CTL |= CHAR;       //长度8位
  U0CTL &= ~SWRST;
}
void main (void)
{

WDTCTL = WDTPW + WDTHOLD; //关闭看门狗   

// unsigned int  a=0;
  unsigned char  c_data=0;
  volatile unsigned int i,j;

  initsys();
  P3SEL |= 0x30;
  set();
  ME1 |= UTXE0 + URXE0;
  IE1 |= URXIE0;


  FIFO_CS_L();
  FIFO_WE_H();
  while(1!=Sensor_init());//初始化CMOS Sensor
//  ov7670_Size(624,0,10,130);
  bn=0;

  FIFO_RRST_L();
  FIFO_RD_L();
  FIFO_RD_H();
  FIFO_RD_L();
  FIFO_RRST_H();
  FIFO_RD_H();

  _EINT();

  while(1)
  {
    if(bn==2)
    {
        FIFO_RRST_L();
        FIFO_RD_L();
        FIFO_RD_H();
        FIFO_RD_L();
        FIFO_RRST_H();
        FIFO_RD_H();
            for(i = 0; i < 60; i ++)        //QVGA格式,60行;每行80个点               
        {

          for(j = 0; j < 80*2; j ++)
          {
             FIFO_RD_L();
             c_data=CAMERA2MCU_Data;
             FIFO_RD_H();
             UART0_PutChar(c_data);//中断内发送

            //TXBUF0=c_data;   //阻塞CPU直接发送         
           }
        }
        //while(1);
        bn=0;
     }
   }
}

#pragma vector=PORT2_VECTOR
__interrupt void Port_1(void)

{
   if(bn==0)
    {
       bn=1;
       FIFO_WE_H();
     }

   else if(bn==1)
     {
       FIFO_WE_L();
       bn=2;
     }

   P2IFG = 0;     //清除标志位
}
//
#pragma vector=UART0TX_VECTOR
__interrupt void UART_TX (void)         // 串口发送中断
{
   if(UART_OutLen>0)                    // FIFO内是否有待发送的数据?
       {                                
          UART_OutLen--;                // 待发送数据字节数减1  
          U0TXBUF=TX_BUFF[TX_IndexR];   // 从尾指针读取一个字节并发送
          if (++TX_IndexR >= TXBUF_SIZE)// 读指针递增,且判断是否下标越界
           {                                   
             TX_IndexR = 0;           // 如果越界则写指针归零(循环队列)
           }
       }
    else  IE1 &=~ UTXIE0;  // 如果数据已发完,则关闭UART0的发送中断,停止发送  
}


49

主题

3751

帖子

1

精华

顶级版主

Rank: 11Rank: 11Rank: 11Rank: 11

积分
27948

资源大师奖章论坛骨干奖章推广达人奖章优秀版主奖章热心会员奖章论坛元老奖章在线王奖章活跃会员奖章优秀会员奖章技术大牛奖章

威望
10632
贡献
10964
兑换币
4564
注册时间
2010-11-23
在线时间
3176 小时
2#
发表于 2012-10-17 07:30:35 | 只看该作者
慢点发
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-6 00:42 , Processed in 0.387004 second(s), 37 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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