NC3000的lava通讯函数
这是我自己写的nc3000的lava通讯函数使用yan的编译器编译
#begin 0x89f0
int inadd;
#end
//汇编缓存
char asm;
//汇编调用
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=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=(&word)&0xff;
asm=(&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=(&word)&0xff;
asm=(&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=(&len)&0xff;
asm=(&len)>>8;
asm=((&len)+1)&0xff;
asm=((&len)+1)>>8;
asm=data&0xff;
asm=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=data&0xff;
asm=data>>8;
asm=(&len)&0xff;
asm=(&len)>>8;
asm=(&temp)&0xff;
asm=(&temp)>>8;
asm=((&temp)+1)&0xff;
asm=((&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 编辑 ] 这样不好,每执行一次函数都要载入一次汇编代码。 那应该怎么改? 把载入与执行分开 辩论其实主要是逻辑学范畴 原帖由 leesoft 于 2008-1-25 12:39 发表 http://www.emsky.net/bbs/images/common/back.gif 把载入与执行分开 就是,应该加载到$19c0以前的内存中。
回复 4# 的帖子
LEE老大,我看到你了,虽然这是08年的 能不能用BASIC实现啊? 原帖由 ailaily 于 2010-12-17 15:41 发表 http://bbs.emsky.net/images/common/back.gif能不能用BASIC实现啊?
POKE再加上CALL就行。 我怎么记着BASIC调用系统的通讯后会出错?
没看清,代码里没调用系统中断……
=============
本来还指望这学期能够玩玩串口或者红外呢,结果才学到1602就算完了,并且我到现在为止还没能成功在1602上写一个字母呢
[ 本帖最后由 wehiue 于 2010-12-17 22:30 编辑 ] 现在再看,都不知道当年写的什么东西了....甚至不记得有写过... 同感阿同感
页:
[1]