易码技术论坛

 找回密码
 加入易码
搜索
查看: 878238|回复: 40

[源码] [原创]感谢LEE的FTPLINK!我成功实现LAVA通讯!LAVA可以玩联机游戏了!

[复制链接]
发表于 2005-2-2 01:37:00 | 显示全部楼层
#define i3a 0x3a
#define i3b 0x3b
#define i3c 0x3c
#define i3d 0x3d
#define i3e 0x3e
#define i3f 0x3f
     

char ioc;
char temp;
char RxRdy;
char TxRdy;
char rkey;
char rdata;
char tdata;

char watch_dog()
{temp=0x00;
*0x03f6=temp;
}
char switch(char val)
{ioc=*i3d;
ioc=ioc&0xfc;
ioc=ioc|val;
*i3d=ioc;
}

//******************

char test_ready()//没有超时和失败处理大家可以自己加
{char ready;
ready=*i3b;
while (ready!=0x60)
{switch(0x00);
*i3d=0x00;
*i3d=0x04;
switch(0x00);}
}
char waithis()
{
switch(0x00);
*i3d=0x00;
*i3d=0x04;
switch(0x00);
test_ready();
}
char enable_pll()
{char a;
temp=*i3d;
temp=temp&0xfc;
*i3d=temp;
*i3d=0x04;
}

char open_port()
{
enable_pll();
temp=*i3d;
temp=temp&0xfc;
*i3d=temp;
*i3b=0x01;
*i3e=0x20;
temp=*0x043a;
temp=temp|0x10;
*i3f=temp;
*0x043a=temp;
temp=*0x043b;
temp=temp|0x10;
*0x1e=temp;
*0x043b=temp;
switch(0x03);
*i3a=0x80;
*i3c=0x80;
switch(0x01);
*i3b=0x00;
*i3d=0x30;
waithis();
switch(0x01);
*i3a=0x01;
switch(0x00);
*i3c=0x00;
switch(0x02);
*i3c=0x20;
}
char before_rw()
{
temp=*i3d;
temp=temp&0xfc;
temp=temp|0x00;
*i3d=temp;
}
char check_key()
{
rkey=Inkey();
if (rkey==0x1b) exit(0);
return rkey;}

char check_rxrdy()
{
temp=*i3b;
temp=temp&0x01;
if (temp==0) RxRdy=0; else RxRdy=1;
return RxRdy;}
char readbyte()
{
before_rw();
do
{
watch_dog();
check_key();}
while(!check_rxrdy())
{
rdata=*i3a;}
return rdata;}
char check_txrdy()
{temp=*i3b;
temp=temp&0xfc;
if (temp==0) TxRdy=0; else TxRdy=1;
return TxRdy;}
char send_byte(char wsdata)//没有超时和失败处理大家可以自己加
{
before_rw();
do
{}
while (!check_txrdy())
{*i3a=wsdata;
}
}

void main()
{SetScreen(0);
printf("Hello com!\n");
open_port();

do{
readbyte();
send_byte(rdata);}
while (1){}}
 楼主| 发表于 2005-2-2 02:33:00 | 显示全部楼层
下面是关闭串口的代码:
char close_port()
{temp=*i3d;
temp=temp&0xfc;
*i3d=temp;
temp=*i3d;
temp=temp&0xfb;
*i3d=temp;
temp=*i3d;
temp=temp&0xfc;
temp=temp|0x02;
*i3d=temp;
*i3c=0x00;
}
 楼主| 发表于 2005-2-2 03:07:00 | 显示全部楼层
[em49]
说明一下,如果把putchar()去掉会快很多,不过这样WQX上就没显示了。这个代码一次只能接收/发送1字节,所以很慢,感兴趣的可以加上send_string()和read_string(),这样会快多了,不过要注意文曲星17byte的缓冲大小。最好数据按包发送,每个包大小为17byte,效率会高很多的!
 楼主| 发表于 2005-2-2 03:18:00 | 显示全部楼层
[em05]
这里申明一下,我采用的缓冲区大小的计算方法好象不对,17字节也许是错误的,等天亮了我会把用汇编得到的结果放上来的。[em07]
汇编通讯的方法还要谢谢QIQI的宏。
发表于 2005-2-2 13:10:00 | 显示全部楼层
这个帖子强!
支持一个
发表于 2005-2-2 13:24:00 | 显示全部楼层
可以通过修改GVmaker解释器的方法在现有的GVmaker 解释器中加入端口通讯的函数,这样就可以可以真正实现GVmaker 支持端口通讯了.
 楼主| 发表于 2005-2-2 14:26:00 | 显示全部楼层
修改LAVA解释器的方法更好,可以有很快的速度,有兴趣的可以改改啊。我对LAVA解释器不是很了解,不知道能不能把通讯的汇编码加在那个可以用Getpiont()函数执行汇编的解释器后面,然后用Getpiont()函数执行?[em07]
 楼主| 发表于 2005-2-2 18:07:00 | 显示全部楼层
今晚把GVMAKER大卸八块研究研究,呵呵~~~[em05]
发表于 2005-2-2 20:11:00 | 显示全部楼层
楼上如果有意给GVMAKER解释器添加通讯功能,可以联系一下sippey,他对GVMAKER解释器研究得很透彻!
而且添加功能并不是很难的事。
ps:我最近没时间,不然也许可以帮上忙~
发表于 2005-2-2 20:23:00 | 显示全部楼层
强!!!研究研究^_^bb
楼主的方法真的很奇妙~~~:)
 楼主| 发表于 2005-2-2 20:34:00 | 显示全部楼层
sippey? 要怎么联系啊?
发表于 2005-2-2 20:41:00 | 显示全部楼层
Sippey,目前已经归隐。给你一个QQ去找他吧:32113220

另外,你说的串口调试软件在哪里可以找到?给个链接吧……
[此贴子已经被作者于2005-2-2 20:46:54编辑过]

 楼主| 发表于 2005-2-2 20:59:00 | 显示全部楼层
?软件放在帖子里啊,在最下面啊
发表于 2005-2-2 22:41:00 | 显示全部楼层
突然发现这几日眼神很差-_-b
发表于 2005-2-2 22:54:00 | 显示全部楼层
不过,为什么我的2600和Usb2Com的线试验这个东西没有效果啊-_-b
 楼主| 发表于 2005-2-3 11:53:00 | 显示全部楼层
Usb 2 Com的线是什么芯片的?还有线的驱动,推荐用PL2303H的芯片。不同的芯片和驱动兼容性不一样。
发表于 2005-2-3 12:45:00 | 显示全部楼层
那个线好像是写的什么R2032……我也不清楚。
不过,可以用Ftplink传东西的。但是你这个软件昨天试验了,我用手摸那个软件会受到字符^_^b,但是Nc2600不行。
 楼主| 发表于 2005-2-3 13:11:00 | 显示全部楼层
那就不太清楚了,波特率是115200吗?还有,不是2600先发数据的,WQX一直在等电脑端的数据。所以要电脑端先发送。还有,用过软件后最好关机再开机(指WQX),因为里面没加关闭串口的函数和错误处理,有时会打不开端口的。
 楼主| 发表于 2005-2-3 14:13:00 | 显示全部楼层
可能这断代码有问题,那天晚上试的时候也不是每次都成功,今天也不怎么成功,有时能联上,有时不能,怪了。
这断代码是对照FTPLINK和QIQI的宏改编的,不知道是不是COM口在使用上有什么特别注意的?
 楼主| 发表于 2005-2-3 14:39:00 | 显示全部楼层
哦!忘记了,所以我前面的帖子才问在LAVA里像switch_bk等代码会不会因为分布运行而不正确啊。不过用汇编编了一个功能一样的,可是返回的是乱码,而且时间一长就联不上了。
您需要登录后才可以回帖 登录 | 加入易码

本版积分规则

Archiver|手机版|小黑屋|EMAX Studio

GMT+8, 2025-8-24 10:44 , Processed in 0.014344 second(s), 17 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表