//e51pro.h
#include <at89x52.h>

typedef unsigned int UINT;
typedef	unsigned long ULONG;
typedef unsigned char BYTE;
typedef bit BOOL;

struct _prowork//定义编程器的一般操作，具体器件的编程器实现下列函数
{
	void (*fpInitPro)();//编程前的准备工作
	void (*fpReadSign)();//读特征字
	void (*fpErase)();//擦除器件
	BOOL (*fpWrite)(BYTE);//写器件
	BYTE (*fpRead)();//读器件
	void (*fpLock)();//写锁定位
	void (*fpProOver)();//编程结束后的工作
};
typedef struct _prowork ProWork;

sbit A_0=ACC^0;//方便位操作
sbit A_1=ACC^1;
sbit A_2=ACC^2;
sbit A_3=ACC^3;
sbit A_4=ACC^4;
sbit A_5=ACC^5;
sbit A_6=ACC^6;
sbit A_7=ACC^7;

sbit B_0=B^0;//方便位操作
sbit B_1=B^1;
sbit B_2=B^2;
sbit B_3=B^3;
sbit B_4=B^4;
sbit B_5=B^5;
sbit B_6=B^6;
sbit B_7=B^7;

extern BYTE ComBuf[18];//串口通讯数据缓存，发送和接收都使用
extern UINT nAddress;//ROM中地址计数
extern UINT nTimeOut;//超时计数
extern ProWork pw;//编程器一般操作 
extern void Delay_ms(UINT nMs);//延时函数 毫秒级 小于65535ms
extern void Delay_us(BYTE nUs);//延时函数 微秒级 小于255us

extern BOOL WaitComm();//等待上位机的命令
//WaitComm()将等待18个字节。第一个字节(ComBuf[0])表示命令：00=初始化编程器，01=读特征字，02=擦除器件，
//03=写器件，04=读器件，05=写锁定位。第二个字节(ComBuf[1])表示器件的FID（Funcation IDentification）。
//主程序将根据FID调用该器件的编程器函数。后面16个字节(ComBuf[2~17])是该命令的相关数据
//返回值=1表示等待完成 =0表示等待超时

extern BOOL WaitResp();//等待上位机的回应
//WaitResp()将等待1个字节。为了提高编程器读器件的通讯效率，等待上位机ReadRomThread线程建立后
//将会发送一个字节作为回应，if （ComBuf[0]==1）表示继续读16个字节(ComBuf[2~17])然后发送给PC，
//else if(ComBuf[0]==0xff)表示要求重发数据，else读器件结束。
//返回值=1表示等待完成 =0表示等待超时

extern BOOL WaitData();//等待上位机的数据
//WaitData()等待18个字节,在写器件函数中使用。if(ComBuf[0]==1)表示继续写数据块(ComBuf[2~17]16字节)
//else 写器件结束。

extern void SendData();//发送数据或回应操作完成,18字节，编程器完成操作后用该函数回应，表示操作完成。
//在读器件过程中用该函数发送读出的ROM数据给上位机

extern void SendResp();//回应上位机一个字节,在写器件函数中使用。为了提高编程器写器件的通讯效率，
//编程器每写完数据块（ComBuf[2~17]])后，回应上位机一个字节(ComBuf[0])。如果没出错将回应1，出错回应0xff。

extern void SetVpp5V();//设置VPP=5V
extern void SetVpp0V();//Vpp=0V
extern void SetVpp12V();//Vpp=12V
