除此之外,还可以按照设计的需要自行增加帧的类型,以实现更为复杂的通信。
4 系统外存储器EEPROM
由于控制中经常会涉及到参数的更改,为了使掉电后不影响系统的运行,即需要参数能够重现,系统采用带有I2C总线接口的EEPROM 2402芯片实现数据的存储和读取。读和写分别调用的两个函数如下:
unsigned char eepromread(unsigned char beginbyte){
unsigned char data result;
unsigned char i;
EA=0;
i=RW24XX(&result,1,beginbyte,READ_OP,M2402);
EA=1;
return(result);
}
/******************************************************
unsigned char i;
EA=0;
i=RW24XX(&datum,beginbyte,WRITE_OP,M2402);
EA=1;
}
可以看出,函数RW24XX是对EEPROM外存储芯片操作的主体函数,这里给出该函数中包含参数的定义:
bit RW24XX(unsigned char *DataBuff,unsigned char ByteQuantity,unsigned int Address,unsigned char ControlByte,enum eepromtype EepromType)
其中,DataBuff为读写数据输入输出缓冲区的首地址,ByteQuantity为要读写数据的字节数,Address为EEPROM芯片的片内地址,ControlByte是EEPROM的控制字节,具体形式为(1)(0)(1)(0)(A2)(A1)(A0)(R/W),其中R/W=1,表示读操作,R/W=0为写操作,A2、A1、A0为EEPROM的页选或片选地址;EepromType为枚举变量,需为M2401~M24256中的一种,分别对应24C01~24C256,本系统中为M2402;函数返回值为一个位变量,若返回1表示此次操作失效,0表示操作成功;ERRORCOUNT为允许最大次数,若出现ERRORCOUNT次操作失效后,则函数中止操作,并返回1。
图5
在该函数中,调用的若干I2C总线函数如下:
void IICStart(void);
void IICStop(void);
bit IICRecAck(void);
void IICNoAck(void);
void IICAck(void);
unsigned char IICReceiveByte(void);
void IICSendByte(unsigned char sendbyte);
结语
本系统结构简单,操作方便,拥有手动和自动两种控制模式,具有一定的智能性;既可现场控制,又可远程控制;能根据现场状况,合理地调节控制状态。另外,利用RTX51TNY实时操作系统提供的系统特征,可以简化多任务程序设计,满足多个任务的时间特性要求。基于实时多任务操作系统,可以将各任务进行细分馐,使各任务保持相对独立;能有效改善程序结构,便于模块化处理,使程序的可读性、可维护性和可移植性都得到进一步提高。