- 注册时间
- 2004-8-31
- 最后登录
- 1970-1-1
|
首先 调用红外要先想$f00 写入b0 f0 11 00 00 在运行中断INT $014A
数据出入的端口:3A 状态的端口:3B
使用方法:
10 S$="" OKE 199,0 RINT "红外聊天室","(用于无笔纸情况下)","<Y>发话 <Q>退出"
20 INPUT "名字:";NAME$:GRAPH
30 POKE 6160,0 OKE 6161,74:POKE 6162,1:POKE 6163,96
40 DATA 176,240,17,0,0
50 FOR I=3840 TO 3844:READ A:POKE I,A:NEXT
60 CALL 6160:S=0:S$=""
65 IF PEEK(199)=249 THEN POKE 199,0:GOSUB 130
66 IF PEEK(199)=128+ASC ("q") THEN POKE 199,0:TEXT :PRINT "JD SOFT!":END
70 IF PEEK(59)=97 THEN GOTO 71 ELSE GOTO 65
71 IF PEEK(58)=255 THEN GOTO 72 ELSE GOTO 65
72 IF PEEK(59)=97 THEN L=PEEK(58):I=0:S$="":GOTO 90
80 GOTO 65
90 IF PEEK(59)=97 THEN S$=S$+CHR$(PEEK(58)):I=I+1 ELSE D=D+1
100 IF D=5 THEN PRINT "连接失败!":GOTO 65
110 IF I=L THEN PRINT S$:GOTO 65
120 GOTO 90
130 PRINT "消息(小于";20-LEN(NAME$);"字节)":INPUT "";T$ :S$=NAME$+":"+T$
131 IF LEN(S$)=0 OR LEN(S$)>20 THEN GOTO 130
140 POKE 58,255:POKE 58,LEN(S$)
150 FOR I=1 TO LEN(S$):POKE 58,ASC (MID$(S$,I,1))
155 NEXT
160 RETURN
2台机器,当红外端口刚刚打开时,会发出信号 #$55(85) 在空闲状态下 $A4(59)的值为$60(96)
如何发送数据呢:
A机器与B机器(红外都已打开)
A机器像A3写入255,此时 A4值从$60变成了$61,表示有数据(原因是WQX的IrDa是2个,一输入一输出,在机器上挨的近,在数据发送出去的同时,也接受到自己发送的数据)
B机器的A3变成了255,A4变成了$61,但此处指的255意思是CPU从地址A3读出的值为255,A3并不是普通的内存,是IO端口,硬件的设置就这样,CPU从A3读出值后,A3的值就变化了,CPU不访问A3的话A3的值就不变
如果A机器向A3写入了01在写02 在写03,那么,B机器读取第1次值为01,第2次为02,第3次为03,而后A4的值变回$60,表示"红外缓存"已经没有数据了(但似乎缓存有限,好象也有时间限制)
如希望将$0a $0b $0c $0d $0e $0f 发送到B机器上,那么
在确认A机器与B机器红外连接完好的情况下
A发送$0a到B,B在确定$A4值变为$61时,读取A3的值,同时A4自动变回了$60
B机器在发送一具有特殊代表的数据到$A3,A机器接受到,确认数据已经传送,继续传送下一个
由于红外有类似缓存的东西,所以传输起来非常快,不必像写nand那样需要delay时间
基本上数据就是这样传输的
虽然知道"打开红外"的中断,但却怎么也不知道"关闭红外"的中断,晕!!!
此中断与io端口通用与NC2000A/C NC2600C 不能使用于除此3型号外任何型号
BASIC代码是个简单的红外聊天程序,可以n台机器以上聊,由于不想做的太复杂和提高速度,有传输字节最高20的限制并且2人以上聊天的话,万一2人同时在传输数据可能将2人的数据都掺在了一起再成A说AAAAA B说BBBBB显示出来的确是ABABA
经过测试2机器摆在一起程90度仍可以传输,并且用放小镜子(反光的凹面镜将15Cm到了45CM(差不多)),可以考虑使用光纤作为红外传输媒体(配合球面镜),本人并没实验过双机线,不知串口如何使用
未来BASIC游戏必将是非常侧重与汇编、批量法、多人游戏、型号通用的。所以......大家应该多研究这些对BASIC有很大用途的东西,不要只弄BASIC,也学点汇编,了解些系统中断与工作原理(至少我不精通)
PS:红外传输时没有特定对象,比如说3台机器,1台机器的红外对着另两台发,那么那两台会同时受到信息
错别字很多,不好意思
|
|