- 注册时间
- 2005-8-2
- 最后登录
- 1970-1-1
|
这是我自己写的nc3000的lava通讯函数
使用yan的编译器编译
#begin 0x89f0
int inadd;
#end
//汇编缓存
char asm[179];
//汇编调用
void exeasm(int addre)
{
inadd=addre;
#code{0xcc};
}
//打开端口
void ComOpen(char mode)
{
//mode=0 BaudRate=
//mode=1 BaudRate=115200
//mode=0xf BaudRate=921600
#loaddata asm=
{0x8,0xa5,0x0,0x48,0xa5,0xa,0x48,0xad,0x36,0x4,0x9,0x8,0x85,0x18,0x8d,0x36,0x4,0xa9,0xf
f,0x85,0x60,0xa5,0x3d,0x29,0xfc,0x9,0x2,0x85,0x3d,0xa9,0x20,0x85,0x3c,0xa9,0x2,0x85,0x3
d,0xa5,0x3d,0x29,0xfc,0x9,0x1,0x85,0x3d,0xa9,0x0,0x85,0x3b,0xa5,0x3d,0x29,0xfc,0x9,0x0,
0x85,0x3d,0xa5,0x3d,0x9,0x4,0x85,0x3d,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x1,0x85,0x3d,0x
68,0x28,0xa9,0x30,0x85,0x3d,0xea,0xea,0xea,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa5,0
x3b,0xc9,0x60,0xf0,0x23,0xa5,0x3d,0x29,0xfb,0x85,0x3d,0xea,0xea,0xea,0xea,0xa5,0x3d,0x9
,0x4,0x85,0x3d,0xa0,0x4,0xa2,0xc8,0x20,0xba,0xe0,0xa5,0x3b,0xc9,0x60,0xf0,0x6,0xca,0xd0
,0xf4,0x88,0xd0,0xef,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa9,0x23,0x85,0x3b,0xa5,0x3
d,0x29,0xfc,0x9,0x1,0x85,0x3d,0xa9,0xff,0x85,0x3a,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d
,0xa9,0x2,0x85,0x3c,0xa9,0x80,0x85,0x17,0x68,0x85,0xa,0x68,0x85,0x0,0x28,0x60};
asm[152]=mode;
exeasm(asm);
}
//读取一个字节
char ComGetc()
{
char word;
#loaddata asm=
{0xa9,0x0,0x8d,0x24,0x4,0x85,0xc7,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa5,0x3c,0x29,
0x10,0xd0,0x13,0xad,0x24,0x4,0xc9,0x6,0xf0,0xa,0xa5,0xc7,0x29,0x7f,0x85,0xc7,0xc9,0x1b,
0xd0,0xe9,0x38,0x60,0xa5,0x3a,0x18,0x8d,0xff,0xff,0x60};
asm[44]=(&word)&0xff;
asm[45]=(&word)>>8;
exeasm(asm);
return(word);
}
//关闭端口
void ComClose()
{
#loaddata asm=
{0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa5,0x3d,0x29,0xfb,0x85,0x3d,0xa5,0x3d,0x29,0xf
c,0x9,0x2,0x85,0x3d,0xa9,0x0,0x85,0x3c,0x60};
exeasm(asm);
}
//写一个字节
void ComPutc(char word)
{
#loaddata asm=
{0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa5,0x3b,0x29,0x60,0xc9,0x60,0xd0,0xf8,0xad,0xf
f,0xff,0x85,0x3a,0x60};
asm[17]=(&word)&0xff;
asm[18]=(&word)>>8;
exeasm(asm);
}
//写一段数据
void ComWrite(char &data[],int len)
{
#loaddata asm=
{0xa5,0x80,0x48,0xa5,0x81,0x48,0xa5,0x82,0x48,0xa5,0x83,0x48,0xad,0xff,0xff,0x85,0x80,0
xad,0xff,0xff,0x85,0x81,0xa9,0xff,0x85,0x82,0xa9,0xff,0x85,0x83,0xa0,0x0,0xb1,0x82,0x48
,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa5,0x3b,0x29,0x60,0xc9,0x60,0xd0,0xf8,0x68,0x8
5,0x3a,0xa9,0x0,0x8d,0xf6,0x3,0xe6,0x82,0xd0,0x2,0xe6,0x83,0xa5,0x80,0xd0,0x2,0xc6,0x81
,0xc6,0x80,0xa5,0x80,0x5,0x81,0xd0,0xd1,0x68,0x85,0x83,0x68,0x85,0x82,0x68,0x85,0x81,0x
68,0x85,0x80,0x60};
asm[13]=(&len)&0xff;
asm[14]=(&len)>>8;
asm[18]=((&len)+1)&0xff;
asm[19]=((&len)+1)>>8;
asm[23]=data&0xff;
asm[27]=data>>8;
exeasm(asm);
}
//读取一段数据,返回读取的数据长度
int ComRead(char &data[],int len)
{
int temp;
#loaddata asm=
{0xa5,0x80,0x48,0xa5,0x81,0x48,0xa5,0x82,0x48,0xa5,0x83,0x48,0xa9,0x0,0x85,0x80,0x85,0x
81,0xa9,0xff,0x85,0x82,0xa9,0xff,0x85,0x83,0xa0,0x0,0xa9,0x0,0x8d,0x24,0x4,0x85,0xc7,0x
a5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa5,0x3c,0x29,0x10,0xd0,0x14,0xad,0x24,0x4,0xc9,0x
6,0xf0,0xa,0xa5,0xc7,0x29,0x7f,0x85,0xc7,0xc9,0x1b,0xd0,0xe9,0x38,0xb0,0x24,0xa5,0x3a,0
x18,0xb0,0x1f,0x91,0x82,0xa9,0x0,0x8d,0xf6,0x3,0xe6,0x80,0xd0,0x2,0xe6,0x81,0xe6,0x82,0
xd0,0x2,0xe6,0x83,0xa5,0x80,0xc9,0xff,0xd0,0xb9,0xa5,0x81,0xc9,0xff,0xd0,0xb3,0xa5,0x80
,0x8d,0xff,0xff,0xa5,0x81,0x8d,0xff,0xff,0x68,0x85,0x83,0x68,0x85,0x82,0x68,0x85,0x81,0
x68,0x85,0x80,0x60};
asm[19]=data&0xff;
asm[23]=data>>8;
asm[96]=(&len)&0xff;
asm[102]=(&len)>>8;
asm[108]=(&temp)&0xff;
asm[109]=(&temp)>>8;
asm[113]=((&temp)+1)&0xff;
asm[114]=((&temp)+1)>>8;
exeasm(asm);
return(temp);
}
void ComWaitReady()
{
#loaddata asm=
{0xa5,0x3d,0x29,0xfc,0x85,0x3d,0xa5,0x3b,0x29,0x7,0xd0,0x9,0xa5,0x3b,0x29,0xcb,0xc9,0xc
b,0xd0,0xec,0x60,0xa9,0x1,0x60};
}
//校检函数
char ComXor(char &data[],int size)
{
char crc;
int i;
for(i=0;i<size;i++)
{
crc=crc^data [ i ];
}
return crc;
}
[ 本帖最后由 玄狼剑 于 2008-1-25 15:38 编辑 ] |
|