单片机图像与网络传输.doc

上传人:marr****208 文档编号:137876053 上传时间:2020-07-12 格式:DOC 页数:7 大小:100.50KB
返回 下载 相关 举报
单片机图像与网络传输.doc_第1页
第1页 / 共7页
单片机图像与网络传输.doc_第2页
第2页 / 共7页
单片机图像与网络传输.doc_第3页
第3页 / 共7页
单片机图像与网络传输.doc_第4页
第4页 / 共7页
单片机图像与网络传输.doc_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《单片机图像与网络传输.doc》由会员分享,可在线阅读,更多相关《单片机图像与网络传输.doc(7页珍藏版)》请在金锄头文库上搜索。

1、1.引言 随着网络技术的发展和网络应用的普及,如何充分利用网络资源来实现低成本、高可靠的远程视频监控,已成为一个技术热点。本文介绍一个用单片机与图像采集模块接口,嵌入TCP/IP协议栈,制作“网络摄像头”的方法。本网络摄像头在一个组播式视频图像监控系统中,只作为组播源向以太网发送视频图像数据;其它监控计算机则作为组播成员接收数据。整个视频图像发送和监控系统在局域网中使用时,监控接收端的PC机只要加入了组播组,不必知道网络摄像头的IP地址和MAC地址,也不需要两者的IP地址是在同一网段,均可接收到网络摄像头发出的图像数据,使用起来相当方便。2. 硬件接口电路 网络摄像头的硬件接口电路如图1所示。

2、该电路采用的单片机是89C52芯片,另扩展32K的外部存储器,供网络和图像数据处理用。 图1中的DB200是一个产品摄像模块,它由微型摄像镜头、图像缓存、时序发生、总线接口等电路构成;其外接信号是一个16脚的插座(9 16脚分别对应数据线D7 D0,其它为地址、电源和读写控制线)。图1中,U1、U4和DB200的片选信号由89C52的地址线A14、A15和74HC00的3个与非门提供:A15=0时选通U4;A15=1及A14=0时选通U1;A15=1及A14=1时选通DB200。DB200的第8脚接A13用来选择其内部寄存器。 RTL8019AS有3种工作方式:(1)跳线方式。(2)即插即用方

3、式。(3)免跳线方式。RTL8019AS使用哪种工作方式由第65脚(JP)决定。为减少连线,我们采用跳线方式(把65脚接高电平)。这样网卡的传输介质、I/O基地址和中断号就由74、77、78、79、80、81、82、84、85等引脚状态决定。 RTL8019AS的81、82、84、85(BD0-BD3)脚接低电平,对应32个I/O寄存器地址范围为300H - 31FH;78-80(BD4-BD6)脚接低电平,对应中断号为INT0(IRQ2/9);74(BA14)、77(BD7)脚接低电平,为自动检测传输介质方式。 RTL8019AS有20根地址(SA0-SA19)线,将其5、7、8、9、10(

4、SA0-SA4)脚接89C52的A8-A12,将15、16(SA8、SA9)脚接高电平来确保基地址为300H,其余地址线则全部接地。由于RTL8019AS的使能(AEN)信号是由89C52的A15=1及A14=0时提供,因此我们可得出以下地址关系:89C52: A15 A14 A13 A12 A11 A10 A9 A8 A7A08019: SA4 SA3 SA2 SA1 SA0 2进制数: 1 0 0 0 0 0 0 0 0000 0000 16进制数: 0X80002进制数: 1 0 0 1 1 1 1 1 0000 0000 16进制数: 0X9F00可见,如果89C52输出地址0X800

5、0至0X9F00,均可选中RTL8019AS。由于RTL8019AS的SA9和SA8恒接高电平,当89C52的地址信号由0X8000至0X9F00变动时,会有:SA9 SA8 SA7 SA6 SA5 SA4 SA3 SA2 SA1 SA0 =11 0000 0000 至 11 0001 1111,即对应选择RTL8019AS的I/O寄存器地址300H至31FH。RTL8019AS的96脚(IOCS16B)接低电平,使其工作在8位总线模式;64脚接低电平,使用非AUI接口;31、32脚接高电平,屏蔽远程自举加载功能;33脚所需复位信号,由89C52的P1.5提供;29、30脚对应接89C52的读

6、写脚。3. 软件模块设计 嵌入式系统一般采用简化的TCP/IP协议栈。常用的有IP、ARP、UDP、ICMP、TCP以及HTTP等协议。为了尝试实现一个最简易的嵌入式TCP/IP协议,我们选用UDP通讯方式。 UDP的通讯方式有3种:点对点、广播和组播。考虑到点对点通讯需要ARP协议来取得目标节点的物理地址,我们不用点对点通讯。至于广播通讯和组播通讯,两者都不需要ARP协议。但广播方式有如下缺陷: (1)广播数据报不能跨过路由器传播;(2)广播时本地子网的所有主机都会接收到广播并作出响应,既增加了非接收者的开销,保密性也不好。我们采用的组播方式不存在这些问题,较适合作为网络视频监控的信息传输。

7、3.1 主程序工作流程 网络摄像头的图像采集、打包、发送的软件流程如图2所示,对应的主程序源码见例程1。为了便于接收端正确判断每帧图像的开始,主程序在发送1帧图像数据前,先用Send_lwm( ) 函数发送特征字为“lwm”的4字节长的数据包(该函数从略),然后再发送图像数据。void main(void) /(例程1-循环采集和发送图像数据的主程序): init_8019( ); / RTLS8019AS初始化。 while(1) / 循环采集和发送图像: img_capture( ); / 采集1帧图像。 Send_lwm( ); / 发送图像开始的特征字“lwm” Send_img( )

8、; / 发送1帧图像数据。 3.2 以太网控制芯片的初始化RTL8019AS芯片有32个寄存器地址,映射到4个页面,每页有16个寄存器。本系统只用0页的14个(00-01H,04-0BH,0D-0EH,0F-10H)寄存器。程序先定义reg00reg10, 然后用初始化函数init_8019( )对RTL8019AS各寄存器进行配置:#define XBYTE (unsigned char volatile xdata *) 0) A15=1,#define reg00 XBYTE0x8000 /对应300H A14=0,A13=A12=A11=A10=A9=A8=0 .#define reg

9、10 XBYTE0x9000 A15=1, A14=0,A13=0,A12=1,A11=A10=A9=A8=0/对应310H sbit RST8019 = P1 5; / RST8019AS的硬件复位端。void init_8019(void) / (例程2-RTL8019AS的初始化): UINT C1; for(C1=0;C11000;C1+); / 软件延时,确保芯片进入稳定状态RST8019=1; for(C1=0;C11000;C1+); / 硬件复位、延时以确保芯片完全复位 RST8019=0; for(C1=0;C11000;C1+); / 硬件复位、延时以确保芯片完全复位reg

10、00=0x21; / 选择第0页寄存器,并使芯片停止收发和DMA操作reg0e=0xC8; / DCR: 采用普通、8位DMA方式reg07=0xFF; reg0f=0x00; / 清除和屏蔽所有中断(本系统未采用中断)reg0d=0xE0; / TCR:采用普通发送模式、允许CRC产生和校验 为了节省资源,上述对RTLS8019AS的初始化中,凡是与发送无关的寄存器都没有设置。发送时所要用的组播地址、物理地址和IP地址,则在打包时再封装到各协议层数据包的头部。3.3 图像数据的采集 负责图像采集的DB200摄像模块内部有数据、状态、采集控制和地址控制4个寄存器,表1是它们的寻址方式。对各寄存

11、器的操作规则如下: (1)写操作-对采集控制寄存器(CAP_CTRLr)D0位写1,可启动采集过程;对地址控制寄存器(CAP_INCr)D0位写一次1,其图像缓存的地址就加1。 (2)读操作-如果状态寄存器(CAP_STAUSr)的D0=1,表示可以开始图像采集过程;D1=1表示已完成1帧图像采集,可以读取数据寄存器(CAP_DATAr)的图像数据。 DB200工作的地址范围是:1100 0000 0000 0000 1110 0000 0000 0000 = 0C00H 0E00H。据此,我们可写出如下图像采集函数(例程3):#define CAP_CONTROLr XBYTE0X0C000

12、 /A15=1=A14, A13=0#define CAP_STATUSr XBYTE0X0C000void img_capture( ) / (例程3-图像采集): while(!(CAP_STATUSr & 0x01); / 检查DB200是否准备就绪?CAP_CONTROLr=0xff; / 启动采集1帧图像过程。while(!(CAP_CONTROLr & 0x02); / 是否采集完1帧图像?是就结束。img_capture( )函数只完成了1帧图像数据的采集,采集好的数据存在DB200的数据缓冲区内,留待Send_img( )函数读取和发送。Send_img( )是以读1行图像数据

13、就发送1行的方式工作。其源码如下:#define CAP_INCr XBYTE0X0E000 /A15=1=A14,A13=1#define CAP_DATAr XBYTE0X0E000 extern UCHAR xdata outbuf1520; void Send_img( ) / (例程4-图像数据的读取和发送): UINT data Colon, Line ; for(Line=0;Line288;Line+) / 288行 for(Colon=0;Colon385;Colon+) / 385 列 databufColon=CAP_DATAr; / 从 db200读1个像点到datab

14、uf。 CAP_INCr=0xff; / db200图像数据缓存地址加1。 udp_send(databuf, UDP_PORT, 386); / 封装并发送1行图像数据。 3.4 图像数据的封装 DB200采集完1帧图像后,通过数据总线传送给89C52;89C52则将图像数据按TCP/IP协议封装成以太网帧(图3),然后通过数据总线送给RTL8019AS;RTL8019AS则将以太网帧经RJ45接口送到10M以太网上。从图3可以看到,每个以太网帧的最大长度为1518字节,最小为64字节。其数据部分最大为1500字节,最小为46字节。每个UDP数据传输前,必须加上8字节的UDP头来构成UDP数据报;再加上20字节的IP头来构成IP数据报;最后加上14字节的帧头来构成以太网帧。这就是所谓的数据包封装。为了避免分段操作的麻烦,UDP数据报的最大长度应为1500 - 28=1472字节。在实际应用中,我们采用每行图像数据(385字节)封装一个包的方式传输数据。void D

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 高等教育 > 其它相关文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号