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

📄 p89c669.txt

📁 PHILIP公司的P89C669串口0
💻 TXT
字号:
/*******************************************************************************************
* 程序名:	P89C669双串口轴温转发盒程序

* 功能描述:串口0的硬软件
*******************************************************************************************/

//包含文件
#include <reg669.h>


//常量定义
#define	MyAddr	0x0a					//本中转盒地址(沿用这个ID)
#define	BPS		9600L					//波特率
#define	FX		2*11059200L				//本单元时钟频率:由于669是24MHz的CPU时钟,一个机器周期包含6个时钟周期,
										//所以*2
#define STX     0xaa					//数据祯头标志
#define ETX     0x55					//数据祯尾标志
#define FMaxLength	40
#define TOTAL	13
#define	CmdRST	0

#define	CmdTEP	1
#define	TMEDIR	0
#define	HostDIR	0x80					//主机数据(bit7)						
//变量定义
sbit 	TXEN =P3^4;					   	//TXD 串口0发送使能
sbit 	TXEN1 =P1^3;              		//TXD1 串口1发送使能
unsigned char idata TmpVal[20];			//数据接收缓存
unsigned char idata data1Buf[FMaxLength];  		//接收和发送数据区,半双工485可以只用一个数据区
unsigned char idata data2Buf[FMaxLength];
unsigned char *bfpt0[9],*bfpt1[9];
unsigned char data RXLength;                 //暂时存储长度,RXD
unsigned char data TXLength;

unsigned char data *TX_P;    	  	    //指向PCji缓冲区的指针(指向数组,注意回到数组首址
unsigned char data *RX_P;

unsigned char data RXTimeOut;   	    //数据帧过长或帧在接收完整前等待的时间,即接收超时。

bit  gRXCompFlag=0;						//接收完一帧数据标记



//宏定义
#define	TXD_EN()		TXEN=1			//485_0发送有效
#define	RXD_EN()		TXEN=0			//485_0允许接受
#define	TXD1_EN()		TXEN1=1			//485_1发送有效
#define	RXD1_EN()		TXEN1=0			//485_1允许接受

/*******************************************************************************************
* 函数名:	Uart1Init UART1

* 功能描述:初始化串口0、串口1

× 详细说明:串口0的设置:中断方式收发
	串口1按查询方式收发,有主程序调用控制。
*******************************************************************************************/
void Uart1Init( void )
{
	//串口0初始化	
	TMOD|=0X20;				//||TMOD;   //T1方式2uart
    TH1=0xfa;//256-(FX)/(384*BPS);	//0xfd;			//0xfd:9600bps  //0xf4:2400bps
    TL1=0xfa;//256-FX/(384*BPS);	//0xfd;			//11.0592MHz    //d0:600bps
    TR1=1;					//定时器开始运行
    SCON=0X50;
	ES0=1;
	PS0=1;
	RXD_EN();				//相对主机而言,转发单元的串口0应常处于接收状态


	//串口1初始化	
	S1STAT = 0x20 ; 		//区分接收和发送中断
	S1CON = 0x00 ; 			//串口控制寄存器清零
	REN_1 = 1 ;				//串口1接受允许						
	SM0_1 = 0 ;				//设定串口通讯方式为模式1
	SM1_1 = 1 ; 		

	BRGCON = 0 ; 			//设置波特率
	BRGR1 = 1136 >> 8 ;
	BRGR0 = 1136 & 0x0ff ;
	BRGCON = 1 ;
	TI_1=1;

}




/*********************************************************************************************************
** 函数名称: 串口中断服务子程序serial
** 功能描述: 结束和发送数据并处理链路(帧格式),发送数据在data1Buf/*TX_P中,指明长度TXLength
             接收没有考虑缓冲区
**-------------------------------------------------------------------------------------------------------
** 修 改:
** 日 期:
**-------------------------------------------------------------------------------------------------------
********************************************************************************************************/
void serial(void) interrupt 4 using 1
{
	static unsigned char data FRXLength;				
	static unsigned char data sumCS;					
    unsigned char data comBuff;

    if(TI_0)
    {
        TI_0=0;
        if (TXLength==0)
			RXD_EN();                           
	    else
		{
	        SBUF=*TX_P;TX_P++;                  
	        TXLength--;
		}
    }
    if(RI_0)                                     //接收
    {
	    RI_0=0;
	    comBuff=SBUF;
		RXTimeOut=10;							
		RXLength++;								
		*RX_P=comBuff;							
		RX_P++;
		sumCS=sumCS+comBuff;					

		if (RXLength==1)						
		{
			if (comBuff!=STX)					
			{	RXLength=0;
				RX_P=data2Buf;
			}
			return;
		}

		if (RXLength==2)							
		{
			FRXLength=comBuff;						
			sumCS=comBuff;							
			if (comBuff>FMaxLength)					
			{
				RXLength=0;						
				RX_P=data2Buf;					
			}
			return;
		}
		if (RXLength==3)							
		{
			if(comBuff!=MyAddr)
			{
				RX_P=data2Buf;					
				RXLength=0;						
			}
			return;
		}
		if (RXLength>FRXLength+3)			
		{
			RX_P--;RX_P--;
			comBuff=(*RX_P)<<1;
			if (sumCS==(comBuff+ETX))		
				gRXCompFlag=1;				
			RX_P=data2Buf;
			RXLength=0;
		}
    }
}

⌨️ 快捷键说明

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