📄 serial.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 + -