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

📄 serial.bak

📁 51 单片机上网
💻 BAK
字号:
//version 1 serial0 115200bps serial1 at 2400bps at 11.0592MHz
//version 2 serial0 57600bps serial1 at 2400bps at 24MHz

#include "w77e58.h"
#include <absacc.h>

//#define RAMSP XBYTE[0x0000]
sbit RS485 = P1^0;
//unsigned char xdata ramIni _at_ 0x0000;
unsigned char xdata ramall[1024] _at_ 0x0000;

#define DEV_NUM 10
unsigned char devAdd[10]={0xf1, 0xf2, 0xf3, 0xf4, 0xf5, 0xf6, 0xf7, 0xf8, 0xf9, 0xfa};

//serial0, 9600bps  rs232
//serial1, 2400bps, rs485
void serial_init(void)
{
   CKCON=0xc0;    //wd=67108864clk
   TA=0xAA;
   TA=0x55;
   WDCON=0x01;    //reset watchdog

//   PCON=0x80;   
   TMOD=0x21;	  //t1 for serial1 bps, t0 16bit timer
//   TH1=0xF4;    //11.0592MHz
//   TL1=0xF4;
   TH1 = 0xE6;	  //24MHz
   TL1 = 0xE6;
   SCON1=0x50;    //2400bps  serial port 1

   T2CON=0x30;    //t2 for serial0 bps 
//   RCAP2H=0xFF;   //11.0592MHz  115200bps
//   RCAP2L=0xFD;
//   TH2=0xFF;
//   TL2=0xFD;
   RCAP2H = 0xFF;   //24MHz 57600bps
   RCAP2L = 0xF3;
   TH2 = 0xFF;
   TL2 = 0xF3;
   SCON=0x50;    //11.0592MHz 115200bps serial port 0

   TR1=1;
   TR2=1;
//   ES=1;
//   EA=1;
}
							   

void serial0_str(unsigned char *str)
{
	unsigned char i;

	for(i=0; str[i]!=0; i++){
		SBUF = str[i];
		while(TI==0);
		TI=0;
	}
}

void serial0_bytes(unsigned char *dat, unsigned char len)
{
	unsigned char i;

	for(i=0; i<len; i++){
		SBUF = dat[i];
		while(TI==0);
		TI=0;
	}
}

void serial1_str(unsigned char *str)
{
	unsigned char i;

	RS485 = 1;
	for(i=0; str[i]!=0; i++){
		SBUF1 = str[i];
		while(TI1==0);
		TI1=0;
	}
	RS485 = 0;
}

void serial1_bytes(unsigned char *dat, unsigned char len)
{
	unsigned char i;

	RS485 = 1;
	for(i=0; i<len; i++){
		SBUF1 = dat[i];
		while(TI1==0);
		TI1=0;
	}
	RS485 = 0;
}

/*
void memory_test(void)
{
	unsigned int i;

	for(i=0; i<4096; i++)
		ramall[i] = 0x55;
	for(i=0; i<4096; i++)
		if(ramall[i] != 0x55){
			serial0_str("memory 0x55 test falure");
			return;
		}

	for(i=0; i<4096; i++)
		ramall[i] = 0xaa;
	for(i=0; i<4096; i++)
		if(ramall[i] != 0xaa){
			serial0_str("memory 0xaa test falure");
			return;
		}

	for(i=0; i<4096; i++)
		ramall[i] = 0xff;
	for(i=0; i<4096; i++)
		if(ramall[i] != 0xff){
			serial0_str("memory 0xff test falure");
			return;
		}

	for(i=0; i<4096; i++)
		ramall[i] = 0x00;
	for(i=0; i<4096; i++)
		if(ramall[i] != 0x00){
			serial0_str("memory 0x00 test falure");
		    return;
		}

	serial0_str("memory test passed");
}
*/

/*
void memory_sptest(void)
{
	RAMSP = 0x55;
	if(RAMSP != 0x55) 
		serial0_str("memory SP 0x55 test falure");

	RAMSP = 0xaa;
	if(RAMSP != 0xaa) 
		serial0_str("memory SP 0xaa test falure");

	RAMSP = 0xff;
	if(RAMSP != 0xff) 
		serial0_str("memory SP 0xff test falure");

	RAMSP = 0x00;
	if(RAMSP != 0x00) 
		serial0_str("memory SP 0x00 test falure");
	serial0_str("memory sp test passed");
}
*/

//send the data to both of serial0 and serial1
void RS485_232(unsigned char xdata *dat, unsigned int len)
{
	unsigned int i;

	RS485 = 1;
	for(i=0; i <len; i++){
		SBUF = dat[i];
		SBUF1 = dat[i];
		while((TI == 0)||(TI1 == 0));
		TI = 0;
		TI1 = 0;
	}
	RS485 = 0;
}

unsigned char RS485_getDat(unsigned char addr, unsigned char xdata *dat)
{
	unsigned char c, i, len;

	//send the remote node address
	RS485 = 1;
	SBUF1 = addr;
	while(TI1==0);
	TI1 = 0;
	RS485 = 0;

	//get ack address
	TR0=0;TF0=0;TH0=0x00;TL0=0x00;TR0=1;
	while((RI1==0)&&(TF0==0));
	if(TF0){TR0=0;TF0=0; return 0;}

	c= SBUF1;
	if(c != addr) return 0;
	
	TR0=0;TF0=0;TH0=0x00;TL0=0x00;TR0=1;
	while((RI1==0)&&(TF0==0));
	len = SBUF1;
	RI1=0;

	for(i=0; i<len; i++){
		while((RI1==0)&&(TF0==0));
		dat[i] = SBUF1;
		RI1=0;
	}
		
	return len;
}

unsigned int RS485_getAll(unsigned char xdata *dat)
{
	unsigned int nlen;
	unsigned char i,alen;
	unsigned char xdata *datP;

	nlen = 0;
	datP = dat;

	for(i=0; i<DEV_NUM; i++){
	    serial0_str("get data from a node");
    	alen = RS485_getDat(devAdd[i], datP);
		nlen = nlen+alen;
		datP = datP + alen;
		if(alen)
			serial0_str("have data");
		else
			serial0_str("no data");			
	}

	return nlen;

}

/*
void videotest(void)
{
	unsigned char i;
//	unsigned char c;

//	while(RI == 0);
//	RI=0;

	SBUF1 = 0xff;
	while(TI1==0);
	TI1=0;
	SBUF1 = 0xaa;
	while(TI1==0);
	TI1=0;

	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);
	for(i=0;i<255;i++);

	for(i=1; i<11; i++){
		SBUF1 = 0xff;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0xf0+i;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x10;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x1A;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x29;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x38;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x47;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x36;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x15;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x46;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x29;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x28;
		while(TI1==0);
		TI1=0;
		SBUF1 = 0x27;
		while(TI1==0);
		TI1=0;
	}
}
*/

void resetWD(void)
{
	TA = 0xAA;
	TA = 0x55;
	WDCON = 0x01;
}

⌨️ 快捷键说明

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