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

📄 sube2p.c

📁 日立单片机H8S2144例程.包括AD,DA等程序(用于光源)但对于H8S2144使用者来说有很大的帮助.
💻 C
字号:
/************   **********************************/
/*     E2_PROM娭楢張棟			        		 */
/*                         2003.04.20            */
/*************************************************/
#include	"global.h"
#include	"H8S2144.h"
#include	"Extern.h"	
#include	"Data.h"

//	PS.h偱愰尵偟傑偡	#define	DELIM	13	//	僨儕儈僞僐乕僪偺愰尵
#define		E2P_IO			(*((volatile unsigned char *)0xffffbf))		//E2P24 Addr

#define 	E2P_CLK			0x04			/* EP_ROM CLK僐乕僪		*/
#define 	E2P_IN			0x02			/* EP_ROM IN DATA僐乕僪	*/
#define 	E2P_OUT			0x01			/* EP_ROM OUT DATA僐乕僪*/
#define 	MSK_CLKOFF		0xfb			/* E2P_CLK reset 	*/
#define 	MSK_INOFF		0xfd			/* E2P_IN reset 	*/
#define 	MSK_OUTOFF		0xfe			/* E2P_OUT reset 	*/
#define 	MSK_E2POFF		0xf8			/* E2P_ALL reset   	*/


void	e2prom_rd_pro();  	
void	e2prom_wt_pro();					/* E2_PROM 彂崬傒 張棟   */

void	e2p_bytout(unsigned char);			/*  1 僶僀僩忋埵傾僪儗僗僨乕僞弌椡 	 	*/
void	e2p_bytin(unsigned char *);			/*  1 僶僀僩撉崬傒  */
void	bit_in_e2p(unsigned char *) ;		/*  bit data in */
void	bit_out_e2p(unsigned  char);			/*  uchr 弌椡  	*/
void	ack_chk() ;							/*  ack 懸偪 */

void	mk_pls_wide();						/* 儗儀儖暆妋曐   		*/
void	wait_e2p();							/*  5 mA wait  */


/* E2_PROM 儕乕僪 張棟          */
void e2prom_rd_pro()  	
{		
	unsigned char ichr,jchr;
	long  iconv;
	unsigned short *adrs_base;
	unsigned char  *const_adr1, *const_adr2;
	short i,j,k,m,n;

    adrs_base =  &(const_start);    	
    const_adr1 =  (unsigned char *)adrs_base;   	/*  曗惓抣傾僪儗僗	*/
    adrs_base =  &const_end;    	
    const_adr2 =  (unsigned char *)adrs_base;   	/*僄儕傾廔椆	*/
	iconv = const_adr2 - const_adr1;	/* 僄儕傾廔椆 -	曗惓抣愭摢 */
	k = (iconv / (long)16 ) + 1;	/*  16僶僀僩扨埵屄悢  	*/

	intmask(2);				/* 俶俵俬埲奜妱傝崬傒嬛巭 			*/

	n = 0;					/* e2p_rom 奿擺愭摢傾僪儗僗  		*/

	for ( i=0;i< k; i++ ) 
	{ 
	  /*   奐巒忣曬弌椡  	  */
		ichr = 0;
		ichr |= E2P_CLK;
		ichr |= E2P_OUT ;				/* CLK,OUT H   */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		ichr &= MSK_OUTOFF;				/* CLK H,OUT  L  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		ichr &= MSK_E2POFF;				/* CLK L,OUT  L  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		m = (n >> 7 ) & 0x0e;  			/* upper byte, 3bit   */

		jchr = 0xa0 | (unsigned char)m;	/* id ,upper adrs  */
		e2p_bytout(jchr);				/*  1 僶僀僩忋埵傾僪儗僗僨乕僞弌椡 	 	*/

		jchr = (unsigned char)(n &	0x0ff); /* 壓埵傾僪儗僗僙僢僩   */
		e2p_bytout(jchr);				/*  1 僶僀僩壓埵傾僪儗僗僨乕僞弌椡 	 	*/

	  /*   奐巒忣曬弌椡  	  */	
		ichr =  0 ;						/* CLK l ,OUT H   */
		ichr |=  E2P_OUT ;				/* CLK l ,OUT H   */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		ichr |= E2P_CLK;				/* CLK ,OUT H  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		ichr &= MSK_OUTOFF;				/* CLK H,OUT  L  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		ichr =   0x0;					/* CLK,OUT L  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		m = (n >> 7 ) & 0x07;  			/* upper byte, 3bit   */
		jchr = 0xa1 | (unsigned char)m;	/* slave 憲怣巜掕僙僢僩 id ,upper adrs  */
		e2p_bytout(jchr);				/*  1 僶僀僩忋埵傾僪儗僗僨乕僞弌椡 	 	*/

    //    const_adr1 +=  (long)n;     	/*  曗惓抣傾僪儗僗 峏怴	*/
		for (j=0; j<15;j++) 
		{ 
			e2p_bytin(&jchr);				/*  1 僶僀僩撉崬傒  */
			*const_adr1++  = jchr;		/* 曐懚 */	
			ichr =   0x0;					/* CLK,OUT L   */
			bit_out_e2p(ichr);				/*  1價僢僩弌椡  	*/
		}
		e2p_bytin(&jchr);				/*  1 僶僀僩撉崬傒  */
		*const_adr1++  = jchr;			/* 16 僶僀僩栚  曐懚 		*/	
		ichr =  E2P_OUT ;				/* CLK l ,OUT H ack  */
		bit_out_e2p(ichr);					/*  1價僢僩弌椡  	*/

		ichr =   0x0;					/* CLK L ,OUT L  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/
		ichr |=  E2P_CLK;				/* CLK H,OUT L ,STOP OUT  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/
		ichr |=  E2P_OUT;				/* CLK ,OUT H , D/A load,strb on  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/
		wait_e2p();						/*  5 mA wait  */
		n += 16;						/*  16 byte 傾僪儗僗峏怴 */
	}
	intmask(0);							/* 慡妱崬傒嫋壜 */
}


void e2prom_wt_pro()  		/* E2_PROM 彂崬傒 張棟   */
{
	unsigned char ichr,jchr;
	long  iconv;
	unsigned short *adrs_base;
	unsigned char  *const_adr1, *const_adr2;
	short i,j,k,m,n;	

	adrs_base =  &(const_start);    	
	const_adr1 =  (unsigned char *)adrs_base;   	/*  曗惓抣傾僪儗僗	*/
	adrs_base =  &const_end;    	
	const_adr2 =  (unsigned char *)adrs_base;   	/*僄儕傾廔椆	*/

	iconv = const_adr2 - const_adr1;				/* 僄儕傾廔椆 -	曗惓抣愭摢 */
	k = (iconv / (long)16 ) + 1;					/*  16僶僀僩扨埵屄悢  	*/

	intmask(2);										/* 俶俵俬埲奜妱傝崬傒嬛巭 			*/
	n = 0;											/* e2p_rom 奿擺愭摢傾僪儗僗  		*/

	for ( i=0; i< k; i++ ) 
	{ 
		/*   奐巒忣曬弌椡  	  */
		ichr = 0;
		ichr |= E2P_CLK ;
		ichr |= E2P_OUT ;				/* CLK,OUT H   */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		ichr &= MSK_OUTOFF;				/* CLK H,OUT  L  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		ichr &= MSK_E2POFF;				/* CLK L,OUT  L  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/

		m = (n >> 7 ) & 0x07;  			/* upper byte, 3bit   */
		jchr = 0xa0 | (unsigned char)m;	/* id ,upper adrs  */
		e2p_bytout(jchr);				/*  1 僶僀僩忋埵傾僪儗僗僨乕僞弌椡 	 	*/
		jchr = (unsigned char)(n &	0x0ff); /* 壓埵傾僪儗僗僙僢僩   */
		e2p_bytout(jchr);				/*  1 僶僀僩壓埵傾僪儗僗僨乕僞弌椡 	 	*/

     //   const_adr1 +=  (long)n;     	/*  曗惓抣傾僪儗僗	峏怴 	*/
		for (j=0; j<16;j++) { 
			jchr  =  *(const_adr1)++;		/* 彂崬傒 僨乕僞庢弌偟 	*/	
			e2p_bytout(jchr);			/*  1 僶僀僩彂崬傒  */
		}

		ichr =   0x0;				/* CLK L ,OUT L ack弌椡  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/
		ichr |=  E2P_CLK;				/* CLK H,OUT L ,STOP OUT  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/
		ichr |=  E2P_OUT;				/* CLK ,OUT H , D/A load,strb on  */
		E2P_IO = ichr;
		mk_pls_wide();					/* 儗儀儖暆妋曐   		*/
		wait_e2p();						/*  1 mA wait  */
		n += 16;						/*  16 byte 傾僪儗僗峏怴 */
	}
	intmask(0);				/* 慡妱崬傒嫋壜 */
}


void e2p_bytin(unsigned char *uchr) 			/*  1 僶僀僩撉崬傒  */
{	
	unsigned char ichr,jchr, kchr;
	short i;	
	jchr = 0x80;
	ichr = 0;

	for(i=0;i<8;i++) 
	{
		bit_in_e2p(&kchr);		/*  bit data in */
		if (kchr) {
			ichr |= jchr;
		}
		jchr >>= 1;
	}

	while(1) {
		kchr = E2P_RSIN;
//		kchr = E2P_IO;
		kchr &= E2P_IN;
		if (kchr == 0) {	//if(kchr!=0)
			break;
		}
	}
	*uchr = ichr;		/* 侾僶僀僩僨乕僞僙僢僩 */
}

void bit_in_e2p(unsigned char *kr) 		/*  bit data in */
{
	unsigned char ichr,jchr;
	short i,j;
		
	ichr = 0;
	ichr |= E2P_CLK ;
	ichr |= E2P_OUT ;

	E2P_IO = ichr;

	for(i=0;i<5;i++) {j++;}

  	jchr = E2P_RSIN  ;
 // 	jchr = E2P_IO  ;
	jchr &=  E2P_IN;

	ichr &= MSK_CLKOFF;
	E2P_IO = ichr;

	*kr = jchr;			/* 僨乕僞曐懚 	 	*/
	mk_pls_wide();					/* 儗儀儖暆妋曐   		*/
}

void e2p_bytout(unsigned char uchr)				/*  1 僶僀僩 僨乕僞弌椡 	 	*/
{
	unsigned char ichr, jchr;
	short i;	

	jchr = 0x80;
	for(i=0; i<8; i++) {
		ichr = 0x0;						/*     */
		if (uchr & jchr) {
			ichr |= E2P_OUT;	/*  E2P OUT 僨乕僞 俷俶僙僢僩 */
		}
		bit_out_e2p(ichr);			/*  ichr 弌椡  	*/
		jchr >>= 1;
	}
	ack_chk();					/*  ack 懸偪 */
}

void bit_out_e2p(unsigned char uchr)		/*  uchr 弌椡  	*/
{
	unsigned char ichr;

	ichr = uchr;
	E2P_IO = ichr;
	mk_pls_wide();			/* 儗儀儖暆妋曐 	*/
	ichr |= E2P_CLK;		/* CLOCK H 弌椡 	*/
	E2P_IO = ichr;
	mk_pls_wide();			/* 儗儀儖暆妋曐 	*/
	ichr &= MSK_CLKOFF;		/* CLOCK L 弌椡   	*/
	E2P_IO = ichr;
	mk_pls_wide();			/* 儗儀儖暆妋曐 	*/
}

void ack_chk()  					/*  ack 懸偪 */
{
	unsigned char ichr;

	ichr =  E2P_OUT;	 /*E2P OUT on */
	E2P_IO = ichr;
	mk_pls_wide();			/* 儗儀儖暆妋曐 	*/
	while(1) 
	{
		if(( E2P_IO & E2P_IN) == 0) { /* ACK receiv  */
//		if(( E2P_RSIN & E2P_IN) == 0) { /* ACK receiv  */
			break;
		}
	}
	// xu ????
	ichr |= E2P_CLK;	 /*E2P CLOCK on, D/A load,strb on */
	E2P_IO = ichr;
	mk_pls_wide();			/* 儗儀儖暆妋曐 	*/
	ichr &= MSK_CLKOFF;	 /*E2P CLOCK off, D/A load,strb on */
	E2P_IO = ichr;
	mk_pls_wide();			/* 儗儀儖暆妋曐 	*/
}


void mk_pls_wide() 			/* 儗儀儖暆妋曐 	*/
{
	short i;
	long ilong;
	for (ilong= 0; ilong < 20; ilong++) 
	{
		i++;
	}
}

void wait_e2p() 						/*  5 mA wait  */
{
	short i;
	long ilong;
	for (ilong= 0; ilong < 13000; ilong++) 
	{
		i++;
	}
}

⌨️ 快捷键说明

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