微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 基于C8051F020的远程多点温度监测系统

基于C8051F020的远程多点温度监测系统

时间:02-01 来源:互联网 点击:

引言

随着Internet的发展和应用,越来越多的嵌入式系统接入网络。然而,大部分嵌入式系统都是作为B/S模式中的应用服务器,必须随时对客户机的请求做出回应,要求具有较强的实时性。mC/OS-II是近年来发展迅速的一个开放源码实时操作系统,具有移植性好、可裁剪、可固化的优点。将mC/OS-II引入网络嵌入式系统,既可以实现系统的实时性要求,同时可以提高系统的可靠性,易于调试程序。

图1 系统硬件结构框图

图2 系统TCP/IP协议部分程序流程图

系统硬件设计

本系统设计中采用美国Cygnal公司生产的集成混合信号SoC芯片C8051F020,其内核与8051兼容。当它工作在最大系统时钟频率 25MHz 时,峰值速度可以达到 25MIPS。C8051F020除了256B的内部 RAM,还另有位于外部数据存储器地址空间的 4KB的 XRAM,以及64KB可在系统编程的 FLASH 存储器。因此,它有足够的RAM空间用于存放1500B的以太帧,以及μC/OS-II中再入函数的模拟栈。C8051F020除了有标准8051的端口( P0、P1、P2和P3)外,还附加4个端口(P4、P5、P6和P7),内部还有很多的功能器件。

系统的硬件结构框图如图1所示。网卡芯片使用台湾 Realtek 公司生产的RTL8019AS。在系统中用到的网卡地址为十六进制的0300H~0310H,因此,C8051F020的P7口采用复用方式与RTL8019AS的数据/地址线相接,网卡的SA8脚则直接与高电平相接。C8051F020的 P5.2与RTL8019AS的复位端相连,用来复位网卡。RTL8019AS则外接一个隔离LPF滤波器,通过RJ45接口接入以太网。多个单总线温度传感器DS18B20共享一条总线,由 P3.0口进行控制。

系统软件实现

TCP/IP协议实现

介质访问层主要由以太网控制器 RTL8019AS来实现,其数据通信协议采用IEEE802.3 标准,只处理接收地址与本机物理地址相符或为广播地址的以太帧,并只对ARP、IP数据报进行处理。

网络层实现IP、ARP和ICMP 协议:IP 数据报的首部保留 20 字节的基本控制信息,每个IP数据报包含一个分片;实现完整的ARP 协议;对于ICMP协议, 只实现 ICMP 中类型号为 0 ,代码为 0 的 Ping 应答协议。

传输层实现TCP协议。在系统中,TCP 协议只用于支持 HTTP 协议,由于在连接时一直处于被动服务的状态,因此在设计中省去了SYN - SENT 状态和CLOSED状态,让它一开始就处于 LISTEN 状态,来监听客户端的连接请求,避免了主动打开的操作,可更高效地服务于客户机。而当服务器发出数据报时,系统并不存储,只是记录下该数据报的状态信息。由于系统中数据传输量少,滑动窗口可设置为一个固定值(1 500 字节 )。

应用层实现HTTP 协议。现场监测设备与用户的交互式数据交换通过 HTTP 协议来实现,HTTP在端口80上使用TCP的服务。系统TCP/IP协议部分程序的流程图如图2所示。

mC/OS-II对TCP/IP协议及温度监测的实时管理

mC/OS-II在C8051F020单片机上的移植

mC/OS-II的移植,要求所用的C编译器支持混合编程,在这里选用 KEIL C51集成开发环境。由于mC/OS-II是可剥夺的实时操作系统,任务随时会被另一任务中断,一段时间后再可以运行。为了防止在任务切换过程中相应数据被破坏,mC/OS-II中使用了大量的可重入函数。在KEIL C51中,Cx51编译器为再入函数生成模拟栈,通过这个模拟栈完成参数传递和存放局部变量。根据再入函数所采用的编译模式(SMALL、COMPACT、LARGE),模拟栈可以位于片内或片外存储空间。对于本系统,模拟栈对RAM空间的要求较大,故选用LARGE模式。可直接利用芯片上集成的XRAM(4K),无须另外扩展外部数据存储器。通过配置STARTUP.A51文件进行设置:

XBPSTACK EQU 1 ; //选用LARGE模式

XBPSTACKTOP EQU 1000H ; //设置再入栈栈顶指针

在移植过程中主要完成对以下五个文件的修改:与CPU相关的文件OS_CPU_A.ASM、OS_CPU_C.C、OS_CPU.H和与应用相关的文件OS_CFG.H、INCLUDES.H。

其移植过程在这里不是重点,下面简要介绍与应用相关较紧密的部分设置。

0S-CPU.H:

#define OS_CRITICAL_ METHOD 1 //中断方式1

#if OS_CRITICAL_METHOD == 1

#define OS_ENTER_ CRITICAL() EA=0

//关中断

#define OS_EXIT_CRITICAL() EA=1 //开中断

#endif

OS_CFG.H:

OSTimeDlyHMSM()函数使应用程序无需知道延时时间对应的时钟节拍数,直接按小时、分、秒、毫秒来定义时间,方便对任务运行时间进行管理。

#define OS_TIME_DLY_ HMSM_EN 1

//允许使用函数OSTimeDly HMSM()。

由于每个嵌入式监测系统可以同时与多个PC机连接,向不同用户提供信息,因此可在OS_CFG.H头文件中定义一个包含各种连接信息的结构变量。当TCP报文到时,使用连接状态信

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top