久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3442|回復: 0
打印 上一主題 下一主題
收起左側

基于AVR的8色帶位圖采集串口(實驗)

[復制鏈接]
跳轉到指定樓層
樓主
ID:26188 發(fā)表于 2015-6-23 14:40 | 只看該作者 回帖獎勵 |倒序瀏覽 |閱讀模式
#include<iom16v.h>
#define uchar unsigned char
#define uint unsigned int
#define set_bit(a,b)  a|=(1<<b)
#define clr_bit(a,b)  a&=(1<<b)
#define get_bit(a,b)  a&(1<<b)
uchar TXEND;
uchar send_tab0_pc=0;//發(fā)送TAB0數(shù)據(jù)標志位
uchar send_tab1_pc=0;//發(fā)送tab1數(shù)據(jù)標志位
uchar i,j;
uchar TAB0[128];
uchar TAB1[128];
unsigned long v;//一幀的數(shù)據(jù)量
#pragma interrupt_handler TX_end:14
void TX_end()
{
SREG=0X80;//開啟全局中斷
TXEND=0;//發(fā)送完畢標志
}
void USART_INT()//初始化串口
{
//UCSRA默認
UCSRB=0x48;//使能發(fā)送完畢中斷,禁能數(shù)據(jù)寄存器空中斷,使能發(fā)送模式,關閉接收,關閉接收中斷
UCSRC=0x86;//禁止奇偶效驗,數(shù)據(jù)位8,停止位1,工作在異步模式
UBRRH=0x00;//
UBRRL=51;//波特率9600,8MHZ,
SREG=0x80;//開啟全局中斷
}

void send_byte(uchar buffer)//向PC發(fā)送數(shù)據(jù)
{
   while(0==get_bit(UCSRA,5));//數(shù)據(jù)寄存器里的數(shù)據(jù)是不是為空如果是就寫數(shù)據(jù)
  
    UDR=buffer;


while(TXEND);//是否發(fā)送完畢?
TXEND=1;//上一幀已經發(fā)送準備下一幀的發(fā)送
}
/*void ov7670_int()//7670初始化函數(shù)
{

}*/


////***********SCCB-----OX7670************************//////////
void delay1ms(uint z)
{
uint j,k;
    for(k=z;k;k--)
                       {                           
                      for(j=2666;j;j--) ;  //此處j不得小于27否則讀不出數(shù)據(jù)
        }
               
}

void int_twi_sccb()
{
TWBR=50;/*設置SCL的時鐘頻率在19。230根據(jù)公式SCL FREQUENCY=CPU Clock frequency/16+2(TWBR)*4的TWPS次方
*/

}
//////以上是寫寄存器程序/////////////////////////////////
/**************************************************/
//本函數(shù)為設置7670寄存器的最底層操作函數(shù),
//無返回值
//ADD是要寫的寄存器地址,DATE是向里面寫入的數(shù)據(jù)
//
/*************************************************/
void write_ov7670_sccb_twi(uchar add,uchar date)//向add指定的地址內寫入指定的數(shù)據(jù)
{
    //主發(fā)送模式程序/////////////////////////
    TWCR=0xa4;//插入開始新號使能總線,使能START
  delay1ms(1);
while(0==get_bit(TWCR,7));//檢測起始信號是否發(fā)送?
while((TWSR&0xf8)!=0x08)
{
    while(1);    //出錯
  
}
//START信號的正確響應碼





TWDR=0x42;//寫操作SCCB的器件地址0X42
TWCR=0x84;//重啟啟動數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x18)
{

   while(1);    //出錯
     }

//發(fā)送完畢有ACK應答響應碼





TWDR=add;//寫操作SCCB的寄存器子地址
TWCR=0x84;//重啟啟動數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x28)
{
   while(1);    //出錯
     }

//發(fā)送完畢有ACK應答響應碼



TWDR=date;//寫操作SCCB的寄存器數(shù)據(jù)
TWCR=0x84;//重啟啟動數(shù)據(jù)的發(fā)送
delay1ms(1);
while(0==get_bit(TWCR,7));//檢測數(shù)據(jù)信號是否發(fā)送?
while((TWSR&0XF8)!=0x28)
{
   while(1);    //出錯
     }

//發(fā)送完畢有ACK應答響應碼

TWCR=0x94;//STOP信號



}
//////以上是寫寄存器程序//////////////////////////////////////////////////////////////
init_OV7670_POWER_UP()//0V7670的初始化寄存器設置
{

delay1ms(5);//準備寫入軟件初始化
write_ov7670_sccb_twi(0x12,0x83);//RGB格式,初始化,彩條輸出
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x0d,0x30);//1/4窗口,160*120
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x11,0x0f);//f(內部時鐘)=12mhz/(15+1)=12000/16=750hz
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x15,0x20);//PCLK在行同步時沒輸出
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x3c,0x68);//默認
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x3e,0x00);//PCLK無分頻
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x40,0xd0);//數(shù)據(jù)范圍是00~ff。輸出RGB565
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x42,0xc8);//1/4窗口,DSP彩色條輸出允許
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x6b,0xc0);//PLL8分頻
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x70,0x80);//八色圖
delay1ms(5);//初始化完畢
write_ov7670_sccb_twi(0x71,0x00);//八色圖
delay1ms(5);//設置完畢

}

void init_external_interrupt()//外部中斷的初始化程序
{
     MCUCR=0x0f;//外部中斷0和1都是低電平觸發(fā)
  GICR=0x80;//使能外部中斷1;
  SREG=0X80;//開啟全局中斷
  

}
//外部中斷0作為PCLK像素時鐘
#pragma interrupt_handler int0_isr:2
void int0_isr(void)//外部中斷0的服務程序
{   
     if(38400==v)
  {
   SREG=0X80;
  }
  else
  v++;

     if(128!=i)
  {
     
    TAB0[i]=PINA;
         i++;
   j=0;
   }
else  
send_tab0_pc=1; //向PC發(fā)送數(shù)據(jù)標志
send_tab1_pc=0;//不向PC發(fā)送數(shù)據(jù)標志
  if(128!=j)
  {
  TAB1[j]=PINA;
        j++;
  }
  else
  i=0;
  send_tab1_pc=1;//向PC發(fā)送數(shù)據(jù)標志           
  send_tab0_pc=0;//不向PC發(fā)送數(shù)據(jù)標志
}
//外部中斷1作為HREF行同步信號
#pragma interrupt_handler int1_isr:3
void int1_isr(void)//外部中斷1的服務程序
{
     MCUCR=0x0f;//外部中斷0和1都是上升沿觸發(fā)
  GICR=0xc0;//使能外部中斷1,0;
  SREG=0x80;//開啟全局中斷


}
void main()
{
uchar num;
delay1ms(20);//上電延時20ms
DDRA=0x00;
DDRD=0xff;
PORTD=0xff;
DDRC=0xff;//pc口設為輸出
PORTC=0xff;//pc口初始化

USART_INT();//串口初始化
int_twi_sccb();//sccb初始化
init_OV7670_POWER_UP();//軟件初始化
init_external_interrupt();//外部中斷初始化
delay1ms(10);//無論讀完還是寫完都要等等
while(1)
{
if(send_tab0_pc)
{
       for(num=0;num<128;num++)
    {send_byte((TAB0[num]));}
}
if(send_tab1_pc)
{
       for(num=0;num<128;num++)
    {send_byte((TAB1[num]));}

}


}

}


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 超碰精品在线观看 | 午夜影院在线 | 国产精品爱久久久久久久 | 欧美亚洲视频 | 国产在线精品一区二区 | 狠狠干天天干 | 亚洲人成免费 | 黄色在线观看网址 | 日韩精品视频在线观看一区二区三区 | 激情婷婷 | 亚洲精品免费视频 | 免费福利视频一区二区三区 | 国产一区二区精品在线 | 国产精品人人做人人爽 | 欧美日本一区 | 国产欧美精品区一区二区三区 | 国产精品一区二区三区四区 | 欧美一区二区三区在线视频 | 日韩欧美一二三区 | 亚洲一区视频 | 亚洲视频免费在线观看 | 国产激情亚洲 | 黄色片网此 | 天天操综合网 | 国产毛片久久久久久久久春天 | 亚洲免费一 | 国产日韩中文字幕 | 成人日b视频 | 欧美中文字幕在线观看 | 一级大片 | 青青久草 | 日本特黄特色aaa大片免费 | 鸳鸯谱在线观看高清 | 国产目拍亚洲精品99久久精品 | 久久久久久国产精品三区 | 四虎永久免费黄色影片 | 中文字幕日本一区二区 | 成人免费在线播放视频 | 伊人久久精品 | 97精品国产97久久久久久免费 | 在线观看成人精品 |