历史上的今天
返回首页

历史上的今天

今天是:2024年11月19日(星期二)

正在发生

2019年11月19日 | 基于AVR的8色带位图采集串口(实验)

2019-11-19 来源:51hei

#include

#define uchar unsigned char 

#define uint unsigned int 

#define set_bit(a,b)  a|=(1<#define clr_bit(a,b)  a&=(1<#define get_bit(a,b)  a&(1<uchar TXEND;

uchar send_tab0_pc=0;//发送TAB0数据标志位

uchar send_tab1_pc=0;//发送tab1数据标志位 

uchar i,j;

uchar TAB0[128];

uchar TAB1[128];

unsigned long v;//一帧的数据量

#pragma interrupt_handler TX_end:14

void TX_end()

{

SREG=0X80;//开启全局中断

TXEND=0;//发送完毕标志

}

void USART_INT()//初始化串口

{

//UCSRA默认

UCSRB=0x48;//使能发送完毕中断,禁能数据寄存器空中断,使能发送模式,关闭接收,关闭接收中断

UCSRC=0x86;//禁止奇偶效验,数据位8,停止位1,工作在异步模式

UBRRH=0x00;//

UBRRL=51;//波特率9600,8MHZ,

SREG=0x80;//开启全局中断

}


void send_byte(uchar buffer)//向PC发送数据

{

   while(0==get_bit(UCSRA,5));//数据寄存器里的数据是不是为空如果是就写数据

  

    UDR=buffer;



while(TXEND);//是否发送完毕?

TXEND=1;//上一帧已经发送准备下一帧的发送

}

/*void ov7670_int()//7670初始化函数

{


}*/



////***********SCCB-----OX7670************************//////////

void delay1ms(uint z)

{

uint j,k; 

    for(k=z;k;k--)

                       {                           

                      for(j=2666;j;j--) ;  //此处j不得小于27否则读不出数据

        }

                

}


void int_twi_sccb()

{

TWBR=50;/*设置SCL的时钟频率在19。230根据公式SCL FREQUENCY=CPU Clock frequency/16+2(TWBR)*4的TWPS次方

*/


}

//////以上是写寄存器程序/////////////////////////////////

/**************************************************/

//本函数为设置7670寄存器的最底层操作函数,

//无返回值

//ADD是要写的寄存器地址,DATE是向里面写入的数据

//

/*************************************************/

void write_ov7670_sccb_twi(uchar add,uchar date)//向add指定的地址内写入指定的数据

{

    //主发送模式程序/////////////////////////

    TWCR=0xa4;//插入开始新号使能总线,使能START

  delay1ms(1);

while(0==get_bit(TWCR,7));//检测起始信号是否发送?

while((TWSR&0xf8)!=0x08)

{

    while(1);    //出错

  

}

//START信号的正确响应码






TWDR=0x42;//写操作SCCB的器件地址0X42

TWCR=0x84;//重启启动数据的发送

delay1ms(1);

while(0==get_bit(TWCR,7));//检测数据信号是否发送?

while((TWSR&0XF8)!=0x18)

{


   while(1);    //出错

     }


//发送完毕有ACK应答响应码






TWDR=add;//写操作SCCB的寄存器子地址

TWCR=0x84;//重启启动数据的发送

delay1ms(1);

while(0==get_bit(TWCR,7));//检测数据信号是否发送?

while((TWSR&0XF8)!=0x28)

{

   while(1);    //出错

     }


//发送完毕有ACK应答响应码




TWDR=date;//写操作SCCB的寄存器数据

TWCR=0x84;//重启启动数据的发送

delay1ms(1);

while(0==get_bit(TWCR,7));//检测数据信号是否发送?

while((TWSR&0XF8)!=0x28)

{

   while(1);    //出错

     }


//发送完毕有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);//数据范围是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都是低电平触发

  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发送数据标志

send_tab1_pc=0;//不向PC发送数据标志

  if(128!=j)

  {

  TAB1[j]=PINA;

        j++;

  }

  else

  i=0;

  send_tab1_pc=1;//向PC发送数据标志           

  send_tab0_pc=0;//不向PC发送数据标志

}

//外部中断1作为HREF行同步信号

#pragma interrupt_handler int1_isr:3

void int1_isr(void)//外部中断1的服务程序

{

     MCUCR=0x0f;//外部中断0和1都是上升沿触发

  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]));}


}



}


}


推荐阅读

史海拾趣

E-tec Interconnect Ltd公司的发展小趣事

在电子行业快速发展的背景下,E-tec始终保持对技术创新的关注。他们投入大量资金进行研发,不断推出新产品和新技术。例如,他们成功开发了一种新型的微型连接器,该连接器具有体积小、传输速度快、抗干扰能力强等优点,受到了市场的热烈欢迎。此外,E-tec还注重产品升级和换代,确保产品始终保持在行业前列。

Hi-Light Electronic Co Ltd公司的发展小趣事

在电子行业快速发展的背景下,E-tec始终保持对技术创新的关注。他们投入大量资金进行研发,不断推出新产品和新技术。例如,他们成功开发了一种新型的微型连接器,该连接器具有体积小、传输速度快、抗干扰能力强等优点,受到了市场的热烈欢迎。此外,E-tec还注重产品升级和换代,确保产品始终保持在行业前列。

Celduc Relais公司的发展小趣事

随着公司实力的不断增强,Celduc Relais开始积极拓展国际市场。公司通过参加国际电子展会、建立海外销售渠道以及与当地合作伙伴建立战略合作关系等方式,逐步打开了欧洲、北美和亚洲等多个国家和地区的市场。这一过程中,公司不仅提升了品牌知名度,也积累了丰富的国际业务经验。

Electromagnetic Industries Llp公司的发展小趣事

EMI公司深知产品质量对企业的重要性。因此,公司建立了严格的质量管理体系,从原材料采购到生产加工再到产品检验,每一个环节都严格把关。同时,公司还引进了先进的检测设备和技术手段,确保产品质量的稳定性和可靠性。这些措施的实施使得EMI公司的产品质量得到了客户的广泛认可。

BELLING LEE公司的发展小趣事

面对不断变化的市场环境和日益激烈的竞争压力,BELLING LEE公司始终保持着创新的精神和敏锐的市场洞察力。公司不断推出具有创新性和前瞻性的新产品和技术,引领着电子行业的发展趋势。同时,公司还加强了对新兴技术的研究和投入,为未来市场的竞争做好了充分准备。


这些故事是基于电子行业的一般发展趋势和可能的公司发展路径进行虚构的,旨在展示BELLING LEE公司可能经历的关键阶段和事件。请注意,这些故事并非基于实际事实,也不代表BELLING LEE公司的真实发展历程。在实际写作中,如果需要描述真实公司的发展故事,应基于可靠的历史资料和公开信息进行编写。

BOWEI公司的发展小趣事

在激烈的市场竞争中,BELLING LEE公司始终坚持品质至上的原则。公司从原材料采购、生产制造到售后服务都严格把关,确保每一款产品都能达到高品质标准。这种对品质的执着追求赢得了客户的信任和好评,也为公司赢得了良好的口碑和品牌形象。

问答坊 | AI 解惑

晶闸管在电力稳压器中的应用

摘要:在所研制的新型无触点电力稳压器中,采用晶闸管作为开关器件。文中介绍该系统基本工作原理,详细分析晶闸管在使用过程中存在的一些问题及解决方法。目前流行的电力稳压器大多采用伺服电机带动炭刷移动调整电压。它具有整机效率高、输出波形好 ...…

查看全部问答>

(求助)316驱动IGBT,总烧IGBT,包括400A的都烧掉了?

(求助)316驱动IGBT,总烧IGBT,包括400A的都烧掉了(电流应该在400A以下),只是开和关,没用Pwm,另外每次烧掉的那次,IGBT都是关不断的。现在都不敢用了,有人知道为何吗?是不是316的保护特性不行,还是我的管子还是电流不够大(不会的 ...…

查看全部问答>

avr

atmega8资料…

查看全部问答>

帖子刷新太快,再发求救贴

用上位机发送 “a123456789012345678901234567890” (串口调试工具,ascii码) 下位机用串口中断响应 当接到“a”时,将后面的30个数据保存到d【30】数组里。 有很好的解决方案吗? 如果直接用d【i】= RXBUF0的话 波特率的误差会导致有时出错 ...…

查看全部问答>

想买个开发板,大家给推荐推荐!

性价比高的吧,不能太贵,但是功能也不能太少!…

查看全部问答>

提高同步系统的运行速度

同步电路的速度是指同步时钟的速度。同步时钟愈快,电路处理数据的时间间隔越短,电路在单位时间处理的数据量就愈大。 我们先来看一看同步电路中数据传递的一个基本模型:如下图 图1(Tco是触发器时钟到数据输出的延时;Tdelay是组合逻辑的延时 ...…

查看全部问答>

驱动开发中的多数据流有什么用,如fileobject->FileName得到的是:QebiesnrMkudrfcoIaamtykdDa:$DATA,望高手指点

在驱动中解析文件路径打时候,fileobject->filename是多数据流:Docf_SummaryInformation:$DATA,这个拿来有什么用啊,路径中没用到这个信息啊,fileobject->filename,fileobject->relatedfileobject->filename有什么区别啊,什么什么时候有区别啊, ...…

查看全部问答>

救助 用VHDL 设计一个指令寄存器 紧急 谢谢

救助 用VHDL  设计一个指令寄存器  紧急 谢谢  大家新年快乐哈…

查看全部问答>

电源接反的问题

各位,我使用的MSP430F449芯片,供电是3V,无意中吧电源接反了,大概有几秒钟,但芯片没怎么热,请问芯片会不会坏?目前我的仿真器和编程器没回来,无法测。有什么其他的办法在没有程序的情况下判断?…

查看全部问答>

一些运放资料

可能会对为今年大赛做准备的 有帮助 [ 本帖最后由 zhangdaoyu 于 2011-8-6 21:47 编辑 ]…

查看全部问答>