为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

基于msp430_单片机的摄像头程序

2013-12-21 11页 pdf 126KB 97阅读

用户头像

is_830974

暂无简介

举报
基于msp430_单片机的摄像头程序 基于 430单片机的摄像头程序 2012年 TI杯四川省电子设计大赛题目已经出炉,本程序是基于 TI的 430单片机开发的 摄像头程序,符合 E题的,所以和大家分享,希望对大家有用 可以加本人 QQ:354634241 大家共同探讨。 /***********************************************************************/ /*P1.4LED; P1.5 继电器; P2.3中断输入;P2.1红外触发方式:1连续触发,0非连续触发 430主频...
基于msp430_单片机的摄像头程序
基于 430单片机的摄像头程序 2012年 TI杯四川省电子设计大赛题目已经出炉,本程序是基于 TI的 430单片机开发的 摄像头程序,符合 E题的,所以和大家分享,希望对大家有用 可以加本人 QQ:354634241 大家共同探讨。 /***********************************************************************/ /*P1.4LED; P1.5 继电器; P2.3中断输入;P2.1红外触发方式:1连续触发,0非连续触发 430主频 8M,启用 32K低频晶振。 */ #include #include "api.h" unsigned char sync_cmd[]={0xAA,0x0D,0x00,0x00,0x00,0x00}; //唤醒 & 同 步模块命令 unsigned char init_cmd[]={0xAA,0x01,0x00,0x07,0x05,0x03}; //模块初始化命 令,分辨率 160*128 // unsigned char COM_SetBaudRatio[]={0xAA,0x07,0x1F,0x01,0x00,0x00}; //设置波特率命 令 57600 // unsigned char setpage_cmd[]={0xAA,0x06,0x08,0x00,0x02,0x00}; //设置下载包大小命令, 512 unsigned char setpage_cmd[]={0xAA,0x06,0x08,0x20,0x00,0x00}; //设置下载包大小命令,32 unsigned char snap_cmd[]={0xAA,0x05,0x00,0x00,0x00,0x00}; //拍照命令 unsigned char getdata_cmd[]={0xAA,0x04,0x01,0x00,0x00,0x00}; //抓图命令 unsigned char sleep_cmd[]={0xAA,0x09,0x00,0x00,0x00,0x00}; //进入休眠命令 unsigned char reset_cmd[]={0xAA,0x08,0x01,0x00,0x00,0x00}; //复位命令 unsigned char dataend_cmd[]={0xAA,0x0E,0x00,0x00,0xf0,0xf0}; //上位机同步应答 unsigned char data_cmd[]={0xAA,0x0E,0x00,0x00,0x00,0x00};//上位机同步应答 unsigned char *Flash_ptr = (unsigned char *)0xd000; BYTE cmd_buf[32]; BYTE flag_6;//标志 6字应答 BYTE flag_12;//标志 1 2字应答 BYTE flag_ack;//标志应答数据 BYTE flag_sync;//标志同步 BYTE flag_datastart;//标志数据开始 BYTE flag_data;//标志数据 BYTE flag_t;//标志时间 BYTE flag_err;//标志错误 unsigned int page_num; unsigned char seg_num; unsigned int count; 基于 430单片机的摄像头程序 unsigned int all_data; unsigned int end_size; void InitSystemClock(void) // 初始化系统时钟 { unsigned char i; BCSCTL1=0x00; //Set 430 clk 开启 XT2,DOC的标称频率 为最低 且不分频;XT1为低速晶体(32.768K) BCSCTL2=SELM_2+SELS+DIVS_0+DIVS_1; //smclk 1M // BCSCTL2=SELM_2+SELS; //选择MCLK SCLK的时钟源为 高速时钟 不分频,均为 8M do { IFG1&=~OFIFG; //清除震荡器失效标志 for(i=0xff;i>0;i--); //稳定时间 } while ((IFG1&OFIFG)!=0); // BCSCTL2=SELM_2+SELS; //选择MCLK SCLK的时钟源为高速 时钟 不分频,均为 8M BCSCTL2=SELM_2+SELS+DIVS_0+DIVS_1; //smclk 1M } void Delay5us(void) //延时 86个时钟周期,5.3us { uchar x; uchar y; for(y=0;y<5;y++) for(x=0;x<2;x++); } void Usart0init(void) //串口初始化 { P3SEL |= 0x30; //p3.4 p3.5为外围模式 P3DIR |= 0x10; U0CTL |=SWRST; U0CTL = CHAR; //设置 8字节 UART模式 U0TCTL=SSEL0+SSEL1; //UCLK=SMCLK U0BR0=0x8A; U0BR1=0x00; U0MCTL=0xEF; //设置 57600 基于 430单片机的摄像头程序 ME1 |=UTXE0+URXE0; //模块使能 IE1 |=URXIE0; // 使能 USART0 接收和发送 中断 U0CTL &=~SWRST; // UART启动 } void Init_Timer_A(void) //初始化定时器 { TACTL = TASSEL_2 + TACLR +ID1+ID0; // SMCLK, upmode 8分 频 TACCR0=65535; //定时 33ms } /****************************************************************************** *****/ void main(void) { unsigned char h; WDTCTL = WDTPW + WDTHOLD; // Stop watchdog timer InitSystemClock(); //初始化系统时钟 for(unsigned char k=0;k<100;k++) //延时等待电源稳定 { Delay5us(); } Init_Timer_A(); //初始化定时器 Usart0init(); //初始串口 _BIS_SR(GIE); _EINT(); //开启总中断 h=init_carame(); //初始化摄像头 /* if(h==1) { 可加入初始化成功标志,如亮灯 因为初始化不成功,下面不会成功 } else { 不成功处理 基于 430单片机的摄像头程序 }*/ h=get_image(); //拍照 /* if(h==1) {同上}*/ while(1) { LPM0; //进入低功耗 _NOP(); } } #pragma vector=UART0RX_VECTOR // UART0接收中断子程序 __interrupt void usart0_rx(void) { _DINT(); unsigned char a; a=RXBUF0; cmd_buf[count++]=a; if(count==6) { if(cmd_buf[0]==0xaa&&cmd_buf[1]==0x0f) { flag_err=1; } else if(flag_6==1) { flag_6=0; flag_ack=1; count=0; } } else if(count==12&&flag_12==1) { 基于 430单片机的摄像头程序 flag_12=0; if(cmd_buf[7]==0x0d) { flag_sync=1; } else if(cmd_buf[7]==0x0a) { flag_datastart=1; all_data=cmd_buf[9]+cmd_buf[10]*256; } count=0; } else if(count==32||(page_num==1&&count==end_size)) { flag_data=1; count=0; } } #pragma vector=TIMERA0_VECTOR //定时器中断函数 __interrupt void Timer0_a3(void) { _DINT(); flag_t=0; } unsigned char send_sync(unsigned char*cmd)//建立同步,flag_sync==1 { unsigned char i,j,result=0; for(j=0;j<3;j++)//无应答,重发,共 3次 { for(i=0;i<6;i++) { TXBUF0=cmd[i]; while((U0TCTL&0X01)==0); } TACTL |= MC_1 ; //开定时器 TACCTL0 |= CCIE; // CCR0 中断使能 flag_12=1; //响应为 12个字节 基于 430单片机的摄像头程序 flag_t=1; while(flag_t)//定时等待回应 { if(flag_sync==1&&flag_err!=1) { flag_sync=0; result=1; break; } } TACTL = TASSEL_2 + TACLR +MC_0+ID1+ID0; //关闭定时器 if(result==1)//有应答,退出重发 { break; } } return result; } unsigned char send_cmd(unsigned char * cmd)//发送普通命令,需要应答 flag_ack==1 { unsigned char i,j,result=0; for(j=0;j<3;j++)//无应答,重发,共 3次 { for(i=0;i<6;i++) { TXBUF0=cmd[i]; while((U0TCTL&0X01)==0); } TACTL |= MC_1 ; //开定时器 TACCTL0 |= CCIE; // CCR0 中断使能 flag_t=1; flag_6=1; //响应为 6个字节 while(flag_t)//定时等待回应 { if(flag_ack==1&&flag_err!=1) { flag_ack=0; result=1; break; } 基于 430单片机的摄像头程序 } TACTL = TASSEL_2 + TACLR +MC_0+ID1+ID0; //关闭定时器 if(result==1)//有应答,退出重发 { break; } } return result; } unsigned char send_getdata(unsigned char*cmd) //获取图像,flag_datastart==1 { unsigned char i,j,result=0; for(j=0;j<3;j++)//无应答,重发,共 3次 { for(i=0;i<6;i++) { TXBUF0=cmd[i]; while((U0TCTL&0X01)==0); } TACTL |= MC_1 ; //开定时器 TACCTL0 |= CCIE; // CCR0 中断使能 flag_t=1; flag_12=1; //响应为 12个字节 while(flag_t) //定时等待回应 { if(flag_datastart==1&&flag_err!=1) { page_num=count_page(all_data); end_size=(all_data+6*page_num)%32; seg_num=count_seg(all_data); for(i=0;i
/
本文档为【基于msp430_单片机的摄像头程序】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索