⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 subcmd.c

📁 日立单片机H8S2144例程.包括AD,DA等程序(用于光源)但对于H8S2144使用者来说有很大的帮助.
💻 C
📖 第 1 页 / 共 2 页
字号:

/************   **********************************/
/*		僐儅儞僪庴怣張棟			     		     */
/*		俼俽俀俁俀俠            *
/*		2003.04.20            */
/*************************************************/
#include	"global.h"
#include	"H8S2144.h"
#include	"Data.h"	
#include	"Extern.h"	

/************   ***********************************/
/*    嫟捠掕悢n    丂丂丂丂丂丂丂丂丂丂 */
/*        										  */
/*           								     */
/*                         2003.04.20            */
/*************************************************/
//


#define 	SEND_NG			0x00		// 
#define 	SEND_OK			0x20		// 
#define 	SEND_RSOK		0x21		// 
#define 	SEND_RSNG		0x22		// 

#define 	SET_IF			1		// 	
#define 	SET_DUTY		2		// 	
#define 	SET_IFAB		3		// 
#define 	SET_CWP			4		// 
#define 	SET_ONOFF		5		//
#define 	SET_POLE		6		//
#define 	SET_MON			7		//
#define 	SET_E2P			8		//
#define 	SET_CLEAR		9		// 
#define 	GET_IF			10		// 	
#define 	GET_DUTY		11		// 	
#define 	GET_IFAB		12		// 
#define 	GET_CWP			13		// 
#define 	GET_POLE		14		//
#define 	CHK_ONOFF		15		//
#define 	CHK_COVER		16		//

#define 	SET_IF_STR			"SI"		// 	
#define 	SET_DUTY_STR		"SD"		// 	
#define 	SET_IFAB_STR		"SA"		// 
#define 	SET_CWP_STR			"SW"		// 
#define 	SET_ONOFF_STR		"SO"		//
#define 	SET_POLE_STR		"SP"		//
#define 	SET_MON_STR			"SM"		//
#define 	SET_E2P_STR			"EW"		//
#define 	SET_CLEAR_STR		"CL"		// 
#define 	GET_IF_STR			"RI"		// 	
#define 	GET_DUTY_STR		"RD"		// 	
#define 	GET_IFAB_STR		"RA"		// 
#define 	GET_CWP_STR			"RW"		// 
#define 	GET_POLE_STR		"RP"		//
#define 	CHK_ONOFF_STR		"RO"		//
#define 	CHK_COVER_STR		"RS"		//


void gpib_command_proc();
void rs_command_proc();

void set_rs4422_data();
void edit_gpib_return(unsigned short cmdno) ;
void hextobi(char  *data_adr, short  size, short *bi_data);		/* hex to binary */
void bitohex(unsigned short data, char *bi_data);		/* binary to hex  (2 byte data) */
unsigned short change_cmd2no();
unsigned short strcopm(unsigned char *str1, unsigned char *str2, unsigned short size) ; 

short check_driverAddr();

void hextobi5(char  *data_adr, short  size, short *bi_data);		/* hex to binary */
void bitohex5(unsigned short  data,char   *bi_data);		/* binary to hex  (4 byte data) */
void cnv_bta5(unsigned short dt, unsigned char *adrs) ; //   5 digit binary to ascii
void rs_returnNG();
void rs_returnOK();

short set_if();
short set_duty();
short set_ifab();
short set_cwpls();
short set_onoff();
short set_pole();
short set_monitor();
short set_e2p();
short CH_clear();
short get_if();
short get_duty();
short get_ab();
short get_cwpls();
short get_pole();
short check_onoff();
short check_cover();


void rs_cmdcheck_job() 
{
	short ret, i ;
	unsigned short	cmdno;

	for (i = 0; i < g_RsRecv_CT; i++)
	{ 
		g_RsRecv_Bf[i] = rs_rx_buf[i];
	}



	if (g_RsRecv_CT < 3) {
		goto rs_rcvdata_exit ;
	}

	ret = check_driverAddr();
	if (ret != OK) {
		goto rs_rcvdata_exit ;
	}



	cmdno = change_cmd2no();

	switch (cmdno) 
	{
		case SET_IF:	// 
			ret = set_if();
			break;
		case SET_DUTY:	// 
			ret = set_duty();
			break;
		case SET_IFAB:	// 
			ret = set_ifab();
			break;
		case SET_CWP:	// 
			ret = set_cwpls();
			break;
		case SET_ONOFF:	// 
			ret = set_onoff();
			break;
		case SET_POLE:	// 
			ret = set_pole();
			break;
		case SET_MON:	// 
			ret = set_monitor();
			break;
		case SET_E2P:	// 
			ret = set_e2p();
			break;
		case SET_CLEAR:	// 
			ret = CH_clear();
			break;
		case GET_IF:	// 
			ret = get_if();
			break;
		case GET_DUTY:	// 
			ret = get_duty();
			break;
		case GET_IFAB:	// 
			ret = get_ab();
			break;
		case GET_CWP:	// 
			ret = get_cwpls();
			break;
		case GET_POLE:	// 
			ret = get_pole();
			break;
		case CHK_ONOFF:	// 
			ret = check_onoff();
			break;
		case CHK_COVER:	// 
			ret = check_cover();
			break;
		default:
			rs_returnNG();
			break;
	}
	rs_rceving = 2;

rs_rcvdata_exit:
	g_RsRecv_CT = 0;

}



short check_CH(short flag, short *cha, short *pix, short *rang)
{
	short ch, pixel,range;
	short data;
	
	// CH
	hextobi(&g_RsRecv_Bf[4], 2, &data);
	ch = data;
	if (ch < 1 || ch > MAX_CH) {
		rs_returnNG();
		return NG;
	}
	*cha = ch;

	if (flag <= 1) {
		// pexel
		hextobi(&g_RsRecv_Bf[6], 2, &data);
		pixel = data;
		if (pixel < 1 || pixel > MAX_PIXEL) {
			rs_returnNG();
			return NG;
		}
		*pix = pixel;
	}

	if (flag <= 0) {
		// range
		hextobi(&g_RsRecv_Bf[8], 2, &data);
		range = data;
		if (range < 1 || range > MAX_RANGE) {
			rs_returnNG();
			return NG;
		}
		*rang = range;
	}
	return OK ;
}

short set_if()
{
	unsigned short ch, pixel;
	short	range, ifdat;
	short data;
	short ret;

	if (g_RsRecv_CT != 15) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(0, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	
	// if1
	hextobi5(&g_RsRecv_Bf[11], 4, &data);
	ifdat = data;
	if (g_RsRecv_Bf[10] == '-') {
		ifdat = 0 - ifdat;
	}
	
	ret = select_ch(ch);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	g_SetIf[ch-1][pixel-1] = ifdat;


	if ( g_Range[ch-1] != range) {
		ret = range_out(range, g_DrivePole[ch-1]);
		if (ret != OK) {
			rs_returnNG();
			return NG;
		}
		g_Range[ch-1] = range;
	}

	ret = set_daif(pixel, ifdat);

	rs_returnOK();
	return OK;
}


short set_duty()
{
	unsigned short ch, pixel;
	short	range, dutydat;
	short data;
	short ret;

	if (g_RsRecv_CT != 13) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(1, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	
	// if1
	hextobi5(&g_RsRecv_Bf[9], 4, &data);
	dutydat = data;
	
	ret = select_ch(ch);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	g_Duty[ch-1][pixel-1] = dutydat;

	ret = duty_out(pixel, dutydat);

	rs_returnOK();
	return OK;
}

short set_ifab()
{
	unsigned short ch, pixel;
	short	range, ifdata, ifdatb;
	short data;
	short ret;

	if (g_RsRecv_CT != 20) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(0, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	
	// if1
	hextobi5(&g_RsRecv_Bf[11], 4, &data);
	ifdata = data;
	if (g_RsRecv_Bf[10] == '-') {
		ifdata = 0 - ifdata;
	}
	hextobi5(&g_RsRecv_Bf[16], 4, &data);
	ifdatb = data;
	if (g_RsRecv_Bf[15] == '-') {
		ifdatb = 0 - ifdatb;
	}
	
	switch(range) {
	case 1:
		g_CalIfaR1[ch-1][pixel-1]  = ifdata;
		g_CalIfbR1[ch-1][pixel-1]  = ifdatb;
		break;
	case 2:
		g_CalIfaR2[ch-1][pixel-1]  = ifdata;
		g_CalIfbR2[ch-1][pixel-1]  = ifdatb;
		break;
	case 3:
		g_CalIfaR3[ch-1][pixel-1]  = ifdata;
		g_CalIfbR3[ch-1][pixel-1]  = ifdatb;
		break;
	}

	rs_returnOK();
	return OK;
}
short set_cwpls()
{
	unsigned short ch, pixel;
	short	range, dat;
	short data;
	short ret;

	if (g_RsRecv_CT != 10) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(0, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	
	// if1
	hextobi(&g_RsRecv_Bf[8], 2, &data);
	dat = data;
	
	ret = select_ch(ch);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	g_CwPulse[ch-1][pixel-1] = dat;

	ret = onoff_out(pixel, g_OnOff[ch-1][pixel-1], dat);

	rs_returnOK();
	return OK;
}

short set_onoff()
{
	unsigned short ch, pixel;
	short	range, dat;
	short data;
	short ret;

	if (g_RsRecv_CT != 10) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(1, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	
	// if1
	hextobi(&g_RsRecv_Bf[8], 2, &data);
	dat = data;
	
	ret = select_ch(ch);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	g_OnOff[ch-1][pixel-1] = dat;

	ret = onoff_out(pixel, dat, g_CwPulse[ch-1][pixel-1]);

	rs_returnOK();
	return OK;
}

short set_pole()
{
	unsigned short ch, pixel;
	short	range, dat;
	short data;
	short ret;

	if (g_RsRecv_CT != 8) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(2, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	
	// if1
	hextobi(&g_RsRecv_Bf[6], 2, &data);
	dat = data;
	
	ret = select_ch(ch);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}
	g_DrivePole[ch-1] = dat;

	ret = range_out(g_Range[ch-1] , dat);

	rs_returnOK();
	return OK;
}

short set_monitor()
{
	unsigned short ch, pixel, range;
	short ret, data, dat;

	if (g_RsRecv_CT != 8) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(2, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}

	hextobi(&g_RsRecv_Bf[6], 2, &data);
	dat = data;
		
	ret = select_ch(ch);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}

	ret = mon_select(dat);

	rs_returnOK();
	return OK;
}
short set_e2p()
{
	if (g_RsRecv_CT != 4) {
		rs_returnNG();
		return NG;
	}
	e2prom_wt_pro();
	rs_returnOK();
	return OK;
}

short CH_clear()
{
	unsigned char chr;
	CH_SELECT = 0x00;
	chr	= P9DR;
	P9DR  = chr & 0xfb;

	rs_returnOK();
	return OK;
}

short get_if()
{
	unsigned short ch, pixel, range;
	short ret, data;
	short i;
	char datstr[10];

	if (g_RsRecv_CT != 8) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(1, &ch, &pixel, &range);
	if (ret != OK) {
		rs_returnNG();
		return NG;
	}

	for (i = 0; i < 4; i++)
	{
		g_RsSend_Bf[i] = g_RsRecv_Bf[i];
	}



	bitohex(g_Range[ch-1], &datstr[0]);
	g_RsSend_Bf[4]  = datstr[0];				
	g_RsSend_Bf[5]  = datstr[1];				



	data = g_SetIf[ch-1][pixel-1];

	cnv_bta5(data, &datstr[0]);
	g_RsSend_Bf[6]  = ' ';				
	for (i = 0; i < 4; i++)
	{
		g_RsSend_Bf[7 + i]  = datstr[i];	
	}

	g_RsSend_Bf[11]  = 0x0d;				
	g_RsSend_CT = 12;

	return OK;
}
short get_duty()
{
	unsigned short ch, pixel, range;
	short ret, data;
	short i;
	char datstr[10];

	if (g_RsRecv_CT != 8) {
		rs_returnNG();
		return NG;
	}

	ret = check_CH(1, &ch, &pixel, &range);
	if (ret != OK) {

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -