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

📄 subrs.c

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

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

void rs_recv_job();		// 俼俽係俉俆庴怣張棟
void rs_send_job() ;

void rs_send_set(); 		// 憲怣僶僢僼傽偐傜俼俽係俉俆憲怣僶僢僼傽奿擺

void wait_rs_send()
{
	unsigned short i,j;

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

/************************************************************************
 * 奣梫 : RS-232C RS(RTS) ON / OFF										*
 * 婡擻 : 巜掕SCI僠儍儞僱儖偺RS(RTS)傪ON/OFF偡傞(懚嵼偟側偄CH偼柍帇)	*
 * 堷悢 : int ch SCI僠儍儞僱儖斣崋										*
 *        int on RS(RTS) ON(1)/OFF(0)									*
 * 栠抣 : void															*
 * 揈梫 : PTA MAIN BD愱梡												*
 * 嶌惉 : 2001/03/30 Y.Sugawara											*
 ************************************************************************/
void rs_send_enable(short flag)
{
	if(flag == ON){ 
		P9DR = P9DR | BIT1;				// RS  enable
	}
	else {
		P9DR = P9DR & (~BIT1);			// RS disenable
	}
}



// 俼俽係俉俆庴怣張棟
void rs_recv_job ()			
{
	int					stat;
	unsigned short		i,ch_no;

    	ch_no = 0;				/* RS 憲庴怣僠儍儞僱儖斣崋0 丄俠倧倣丂侽巜掕 	*/
    	stat = rs_getch(ch_no);
	if (stat != -1) {          		/* 僨乕僞庴怣		*/		
		if (g_RsRecv_CT == 0) {		/* START枹専弌 */
     			rs_rx_buf[0] = stat;
    	    		g_RsRecv_CT= 1;				/* 庴怣僶僀僩悢峏怴	*/
			rs_rceving = 1;			/*  庴怣拞僙僢僩 */
			start_timer(IT_RECVRS , RSNEXTRECV);  	/*   憲庴怣敾掕僞僀儅僙僢僩  */
		
		} 
		else {
			rs_rx_buf[g_RsRecv_CT] = stat;
 			g_RsRecv_CT++;				/* 庴怣僶僀僩悢峏怴	*/
		
			if ( stat == CR) {				//  庴怣廔椆
 		   		g_RsRecv_CT--;				/* 庴怣僶僀僩悢峏怴	*/
				stop_timer(IT_RECVRS );		 // 僞僀儉傾僂僩儕僙僢僩


				if (rs_sd_flg == 1) {
					g_RsSend_CT = 0;			// 俼俽憲怣暥帤悢 
					rs_sending = 0;				// 俼俽憲怣梫媮丄憲怣拞僼儔僌 
					g_RsRecv_CT = 0;			//  RS 庴怣暥帤僇僂儞僞 俠俼俠傪娷傓/

					rs_rceving = 0;				//	RS485庴怣廔椆僼儔僌
					rs_sd_flg = 0;				//  RS 俤俶俙俛俴俤僼儔僌 	
					
					rs_pointer_init(0);	

				}
				else {
					rs_cmdcheck_job();
				}

//				rs_cmdcheck_job();
			}
		}
	}
	else {
		if (check_timer(IT_RECVRS ) == 1) {	 // 僞僀儉傾僂僩儕僙僢僩
			g_RsRecv_CT= 0;				/* 庴怣僶僀僩悢峏怴	*/
			rs_rceving = 0;			/*  庴怣拞僙僢僩 */
			for (i = 0; i < 64; i++)
			{ 
				g_RsRecv_Bf[i] = 0;
			}
		}
	}
}

/************************************************************************/
/*                                                                      */
/*                                                                      */
/*                    俼俽係俉俆丂岎怣娗棟	                            */
/*                                                                      */
/*                                                                      */
/************************************************************************/
// 	俼俽係俉俆丂憲怣娗棟
void rs_send_job() 
{					
	unsigned int	ii,rs_ch,i;
	short 			stat;
	unsigned char	ichr ;

	if ((rs_sending == 0) && (rs_rceving == 2 )){   
		rs_send_set(); 		// 憲怣僶僢僼傽偐傜俼俽係俉俆憲怣僶僢僼傽奿擺
		rs_sending = 1;			// 憲怣拞僼儔僌僙僢僩
		rs_sd_flg = 1;
		rs_rceving = 0;			// 庴怣拞僼儔僌僋儕傾
		g_RsRecv_CT= 0;

		wait_rs_send();

		rs_send_enable(ON);

		stat = rs_putn(0, &rs_tx_buf[0], g_RsSend_CT);		// 憲怣巜掕
		start_timer(IT_SENDRS , SENDRSEND);  	/*   憲怣敾掕僞僀儅僙僢僩  */
	}
	if (rs_sending != 0) {		//  憲怣拞
		rs_ch = 0;
		ii = rs_txbufempty(rs_ch);				// 枹憲怣僶僀僩悢僠僃僢僋
		if (ii == 0){							// 憲怣廔椆	

			wait_rs_send();
			
			rs_sending = 0;
//			rs_pointer_init(0);	

			rs_send_enable(OFF);

			stop_timer(IT_SENDRS);  	/*   憲怣敾掕僞僀儅僙僢僩  */
			for (i = 0; i < 64; i++)
			{ 
				g_RsRecv_Bf[i] = 0;
			}
		}
		else {
			if (check_timer(IT_SENDRS) == 1) {
				rs_sending = 0;
				rs_pointer_init(0);	

				rs_send_enable(OFF);

				stop_timer(IT_SENDRS);  	/*   憲怣敾掕僞僀儅僙僢僩  */
				for (i = 0; i < 64; i++)
				{ 
					g_RsRecv_Bf[i] = 0;
				}
			}
		}
	}
}

//  俼俽係俉俆憲怣僶僢僼傽奿擺 
void rs_send_set() 
{ 					
	unsigned short i;
	unsigned char *adr;

	adr = &g_RsSend_Bf[0]; 			/* 憲怣僨乕僞搊榐僉儏乕傾僪儗僗  */
	// 僶僢僼傽乕僋儕傾
	for (i = 0; i < 64; i++) 
	{ 
		rs_tx_buf[i] = 0;
	}		
	for (i = 0; i < g_RsSend_CT; i++ ) 
	{
		rs_tx_buf[i] = *(adr + i);		/* 憲怣僨乕僞僙僢僩   */
	}
//	rs_tx_buf[g_RsSend_CT] = (unsigned char)(CR);	/* 俠俼  */
//	g_RsSend_CT ++;  /*  RS 憲怣暥帤悢  	*/

}

⌨️ 快捷键说明

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