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

📄 sio.c

📁 日立单片机H8S2144例程.包括AD,DA等程序(用于光源)但对于H8S2144使用者来说有很大的帮助.
💻 C
字号:
/************************************************************************
		撪	梕		: 僔儕傾儖捠怣娭學
		旛	峫		: MCU70婎斅梡丄(RS232C僐儊儞僩偼JIS昞婰)
	----------------------------------------------------------------
		俠俹倀		: H8S/2144(HD64F2144FA20)
		婎	斅		: PTA MAIN BD夵
		奐敪尵岅	: YCH8,YAH8(僀僄儘乕僜僼僩)
		僞	僽		: 4
	----------------------------------------------------------------
		惢	嶌		:乮桳乯僄儖丒傾儞僪丒僄僼
 ************************************************************************/


/*----- 夵	斉	棜	楌 --------------------------------------------------
 No |  擭  寧 擔 | 巵柤 |  撪  梕
 01 | 1999-09-02 | 悰尨 | 弶斉姰惉
 02 | 2001-02-20 | 悰尨 | MUU70梡丂尦僋儘僢僋18.432MHz偵曄峏
 03 | 2001-03-06 | 悰尨 | MUU70梡丂億乕僩妱晅曄峏
 04 | 2001-03-21 | 悰尨 | 娭悢擖懼(幚峴僼傽僀儖僒僀僘弅彫)
 05 | 2001-03-30 | 悰尨 | 斈梡斉
-----------------------------------------------------------------------*/


/********************************************
		忦審僐儞僷僀儖
*********************************************/
//#define CLK18								// 19.6608MHz偺帪僐儊儞僩偵偡傞


/********************************************
		僿僢僟
*********************************************/
#include "H8S2144.h"						// H8S/2144 儗僕僗僞掕媊
#include "global.h"							// 嫟捠掕媊
#include "extern.h"							// 奜晹僾儘僩僞僀僾愰尵
#include	"data.h"

#define NUL			0x00					// 僰儖丄嬻
#define TXBUF_SIZE	0x400					// 憲怣僶僢僼傽僒僀僘
#define TXBUF_MASK	TXBUF_SIZE-1			// 憲怣僶僢僼傽儅僗僋(儕儞僌僶僢僼傽僄儞僪張棟梡)
#define RXBUF_SIZE	0x200					// 庴怣僶僢僼傽僒僀僘
#define RXBUF_MASK	RXBUF_SIZE-1			// 庴怣僶僢僼傽儅僗僋(儕儞僌僶僢僼傽僄儞僪張棟梡)


/********************************************
		掕媊
*********************************************/
#ifdef CLK18
// 冇=18.432MHZ帪偺價僢僩儗乕僩
#define SCI_BRR_1152		4  					// 115200bps(n=0)
#define SCI_BRR_576		9  					// 57600bps(n=0)
#define SCI_BRR_384		14 					// 38400bps(n=0)
#define SCI_BRR_192		29 					// 19200bps(n=0)
#define SCI_BRR_96		59 					// 9600bps(n=0)
#define SCI_BRR_48		119					// 4800bps(n=0)
#define SCI_BRR_24		239					// 2400bps(n=0)
#define SCI_BRR_12		119					// 1200bps(n=1)
#define SCI_BRR_6		239					// 600bps(n=1)
#define SCI_BRR_3		119 				// 300bps(n=2)
#else
// 冇=19.6608MHz偺價僢僩儗乕僩
#define SCI_BRR_1152	4					// 嬤帡抣115200bps(n=0)
#define SCI_BRR_576		9  					// 嬤帡抣57600bps(n=0)
#define SCI_BRR_384		15					// 38400bps(n=0)
#define SCI_BRR_192		31					// 19200bps(n=0)
#define SCI_BRR_96		63					// 9600bps(n=0)
#define SCI_BRR_48		127					// 4800bps(n=0)
#define SCI_BRR_24		255					// 2400bps(n=0)
#define SCI_BRR_12		127					// 1200bps(n=1)
#define SCI_BRR_6		255					// 600bps(n=1)
#define SCI_BRR_3		127					// 300bps(n=2)
#endif

#define SCI_CKS0		0					// 僋儘僢僋慖戰冇
#define SCI_CKS1		1					// 僋儘僢僋慖戰冇/4	
#define SCI_CKS2		2					// 僋儘僢僋慖戰冇/16
#define SCI_CKS3		3					// 僋儘僢僋慖戰冇/64

#define SCI_CH			3					// SCI僠儍儞僱儖巊梡悢

#define	RS_DELIM	0x0a						//	暥帤楍揮憲偺僨儕儈僞


/********************************************
		僾儘僩僞僀僾愰尵
*********************************************/
//--- 僌儘乕僶儖 ---
// 傾僾儕働乕僔儑儞娭悢
void sci_bps(int ch, long bps);				// 儃乕儗乕僩愝掕
void rs_pointer_init(int ch);				// 憲庴怣僶僢僼傽億僀儞僞僇僂儞僞弶婜壔
void rs_rs_cmd(int ch, int);				// RS(RTS) ON/OFF憖嶌
void rs_er_cmd(int ch, int);				// ER(DTR) ON/OFF憖嶌
int rs_cs_sts(int ch);						// CS(CTS) 偺忬懺庢摼
int rs_dr_sts(int ch);						// DR(DSR) 偺忬懺庢摼
int rs_cd_sts(int ch);						// CD(DCD) 偺忬懺庢摼
int rs_ci_sts(int ch);						// CI(RI) 偺忬懺庢摼
void rs_232ttl(int ch);						// SCI0 232C/TTL愗懼

unsigned int rs_putcheck(int ch);			// 憲怣僶僢僼傽嬻偒僶僀僩悢偺庢摼
int rs_putc(int ch, unsigned char);			// 1僶僀僩憲怣
int rs_puts(int ch, unsigned char *);		// 暥帤楍偺憲怣
int rs_putn(int ch, unsigned char *, unsigned int); // n僶僀僩憲怣

unsigned int rs_getcheck(int ch);			// 庴怣僶僀僩悢偺庢摼
unsigned char rs_getc(int ch);				// 1僶僀僩庴怣(傾僗僉乕梡)
int rs_getch(int ch);						// 1僶僀僩庴怣(僶僀僫儕梡)
int rs_gets(int ch, unsigned char *, unsigned int); // 暥帤楍偺庴怣
int rs_getn(int ch, unsigned char *, unsigned int); // n僶僀僩庴怣

// 僕儑僽娭悢
void rs_txcont_job(int ch);					// 僼儘乕惂屼僕儑僽(CTS偱憲怣妱崬傪惂屼偡傞)
void rs_job(int ch);						// RS(RTS)偺惂屼(僼儘乕惂屼)
void tx_job(int ch);						// 憲怣僕儑僽(億乕儕儞僌愱梡)


// 妱崬娭悢
interrupt void IntERI0(void);				// SCI0 僄儔乕妱崬
interrupt void IntERI1(void);				// SCI1 僄儔乕妱崬
interrupt void IntERI2(void);				// SCI2 僄儔乕妱崬
interrupt void IntRXI0(void);				// SCI0 庴怣妱崬
interrupt void IntRXI1(void);				// SCI1 庴怣妱崬
interrupt void IntRXI2(void);				// SCI2 庴怣妱崬
interrupt void IntTXI0(void);				// SCI0 憲怣妱崬
interrupt void IntTXI1(void);				// SCI1 憲怣妱崬
interrupt void IntTXI2(void);				// SCI2 憲怣妱崬


//--- 儘乕僇儖 ---
void rxerr_job(int ch);						// 庴怣僄儔乕僕儑僽(妱崬傛傝僐乕儖)
void rx_job(int ch);						// 庴怣妱崬僕儑僽(妱崬傛傝僐乕儖)
void inttx_job(int ch);						// 憲怣妱崬僕儑僽(妱崬傛傝僐乕儖)

void sci_init(int ch, unsigned char, unsigned char); // 僔儕傾儖億乕僩弶婜壔
void rs_inttx(int ch, int);					// 憲怣妱崬ON/OFF
void rs_intrx(int ch, int);					// 庴怣妱崬ON/OFF


/********************************************
		曄悢愰尵
*********************************************/
// 僌儘乕僶儖

// 儘乕僇儖
static unsigned char *ssr[SCI_CH] = {SCI0_SSR_P,SCI1_SSR_P,SCI2_SSR_P};	// 僔儕傾儖僗僥乕僞僗儗僕僗僞
static unsigned char *scr[SCI_CH] = {SCI0_SCR_P,SCI1_SCR_P,SCI2_SCR_P};	// 僔儕傾儖僐儞僩儘乕儖儗僕僗僞
static unsigned char *tdr[SCI_CH] = {SCI0_TDR_P,SCI1_TDR_P,SCI2_TDR_P};	// 憲怣僨乕僞儗僕僗僞
static unsigned char *rdr[SCI_CH] = {SCI0_RDR_P,SCI1_RDR_P,SCI2_RDR_P};	// 庴怣僨乕僞儗僕僗僞
static unsigned char rs_send_buf[SCI_CH][TXBUF_SIZE]; // 憲怣僶僢僼傽
static unsigned char rs_recv_buf[SCI_CH][RXBUF_SIZE]; // 庴怣僶僢僼傽
static unsigned int rs_send_rp[SCI_CH];		// 憲怣僶僢僼傽撉崬傒億僀儞僞
static unsigned int rs_send_wp[SCI_CH];		// 憲怣僶僢僼傽彂崬傒億僀儞僞
static unsigned int rs_send_c[SCI_CH];		// 憲怣僶僢僼傽巆僇僂儞僞
static unsigned int rs_recv_rp[SCI_CH];		// 庴怣僶僢僼傽撉崬傒億僀儞僞
static unsigned int rs_recv_wp[SCI_CH];		// 庴怣僶僢僼傽彂崬傒億僀儞僞
static unsigned int rs_recv_c[SCI_CH];		// 庴怣僶僢僼傽巆僇僂儞僞
static unsigned int orerr_c[SCI_CH];		// 僆乕僶乕儔儞僄儔乕僇僂儞僞   统计接收过程中overrun error
static unsigned int frerr_c[SCI_CH];		// 僼儗乕儈儞僌僄儔乕僇僂儞僞   统计接收过程中frame error
static unsigned int peerr_c[SCI_CH];		// 僷儕僥傿僄儔乕僇僂儞僞   统计接收过程中parity  error


/************************************************************************
 * 奣梫 : 儃乕儗乕僩愗傝懼偊											*
 * 婡擻 : 																*
 * 堷悢 : int ch 僠儍儞僱儖												*
 * 		  long bps (300,1200,2400,4800,9600,19200,38400,57600,115200)	*
 * 栠抣 : void															*
 * 揈梫 : 斈梡															*
 * 嶌惉 : 2001/03/16 Y.Sugawara											*
 ************************************************************************/
void sci_bps(int ch, long bps)
{
	unsigned char br;
	unsigned char ck;
	
	switch(bps)
	{
	case 300:								// 300bps
		br = SCI_BRR_3;			//SCI_BRR_3=127
		ck = SCI_CKS2;			//SCI_CKS2=2
		break;
	case 1200:								// 1200bps
		br = SCI_BRR_12 ;			//SCI_BRR_12=127
		ck = SCI_CKS1 ;			//SCI_CKS1 =1
		break;
	case 2400:								// 2400bps
		br = SCI_BRR_24 ;			//SCI_BRR_24=255
		ck = SCI_CKS0 ;			//SCI_CKS0=0
		break;
	case 4800:								// 4800bps
		br = SCI_BRR_48 ;			//SCI_BRR_48=127
		ck = SCI_CKS0 ;			//SCI_CKS0=0
		break;
	case 9600:								// 9600bps
		br = SCI_BRR_96 ;			//SCI_BRR_96=63
		ck = SCI_CKS0 ;
		break;
	case 19200:								// 19200bps
		br = SCI_BRR_192 ;			//SCI_BRR_192=31
		ck = SCI_CKS0 ;
		break;
	case 38400:								// 38400bps
		br = SCI_BRR_384 ;			//SCI_BRR_384=15
		ck = SCI_CKS0 ;
		break;
	case 57600:								// 57600bps
		br = SCI_BRR_576 ;			//SCI_BRR_576=9
		ck = SCI_CKS0 ;
		break;
	case 115200:							// 115200bps
		br = SCI_BRR_1152 ;			//SCI_BRR_1152=4
		ck = SCI_CKS0 ;
		break;
	default:								// 晄摉僐儅儞僪
		return;
	}

	sci_init(ch, br, ck);					// 儃乕儗乕僩愝掕
	rs_rs_cmd(ch, ON);						// RS(RTS) ON
	rs_er_cmd(ch, OFF);						// ER(DTR) OFF
	rs_pointer_init(ch);					// 憲庴怣僶僢僼傽億僀儞僞丒僇僂儞僞弶婜壔
}


/************************************************************************
 * 奣梫 : 僔儕傾儖僀儞僞僼僃乕僗偺弶婜壔								*
 * 婡擻 : 																*
 * 堷悢 : int ch 僠儍儞僱儖斣崋											*
 *		  unsigned char br 儃乕儗乕僩抣(bps)							*
 *			15:38400,31:19200,63:9600,127:4800,255:2400(CKS1,0=00)		*
 *			127:1200,255:600(CKS1,0=01)									*
 *			127:300(CKS1,0=10)											*
 *		  unsigned char cksel 儃乕儗乕僩僋儘僢僋慖戰					*
 *						000000xx 										*
 *							  ++--- CKS1,0 僋儘僢僋慖戰 00:冇 01:冇/4 	*
 *									10:冇/16 11:冇/64 					*
 * 																		*
 * 栠抣 : void															*
 * 揈梫 : MCU70愱梡														*
 * 嶌惉 : 2001/03/09 Y.Sugawara											*
 ************************************************************************/
void sci_init(int ch, unsigned char br,unsigned char cksel)
{
	unsigned char wk;						// 儚乕僋
	
	if(ch == 0)
	{
// 僠儍儞僱儖侽
	
// 偟側偔偰傕偄偄偗偳擮偺堊
	wk = SCI0_RDR;							// 庴怣僨乕僞儗僕僗僞僟儈乕儕乕僪
	wk = SCI0_RDR;							// 庴怣僨乕僞儗僕僗僞僟儈乕儕乕僪
	wk = SCI0_RDR;							// 庴怣僨乕僞儗僕僗僞僟儈乕儕乕僪

	SCI0_BRR = br;		//BRR:bit rate register		// 價僢僩儗乕僩儗僕僗僞0

	SCI0_SMR = 	B8("00001000");				// 僔儕傾儖儌乕僪儗僕僗僞0
//					00001000 弶婜抣
//					||||||++--- CKS1,CKS0:选择时钟源作为波特率发生器;00:*clock;01:*/4clock;10:*/16clock;11:*/64clock
//					|||||+--- MP multiprocessor 通信模式眮E疚唬

⌨️ 快捷键说明

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