不确定标题的字词,但这是我的问题。
我正在制作激光标签,目前每件背心都有多个生命值。在代码中,我称它为流。
我想做的是在玩游戏时:
每件背心都将扫描其流或命中点,以查看是否尝试射击。一旦检测到镜头的第一位,便暂停流扫描,直到镜头的所有位都到达为止。然后使用另一个常数值扫描该值,以确定镜头是否合法或是否有一些噪音进入系统,在这种情况下镜头无效并被忽略。
每件背心都具有一项功能,可以不断地从1到最大玩家数。就个人而言,我并不关心数字是前进还是后退,或者只要以固定的方式处理每个玩家号码就可以了。
外部引脚将定义玩家何时准备射击。在该功能将编号设置为同一播放器之前,不会发生射击(传输)。然后所有数据立即全部传输出去,然后完成拍摄。
到目前为止,这是我的代码:
TXDP equ P3.1 ;pin to output data on
LCTR equ 30h ;data selector counter
MYDATA equ 31h ;data to send out
LI1 equ P3.5 ;bit to select data
LI2 equ P3.5 ;bit to select data
timer_interrupt:
;Save registers
push ACC
push PSW
;R7 = player# from 1 to MAX
djnz R7,notstart
mov R7,#MAX
notstart:
;Send out my data one bit at a time
;if current player number is me
cjne R7,#ME,notme
mov A,MYDATA
jz nodato
;As data is sent, 0's fill in and MYDATA eventually becomes 0.
clr C
rrc A
mov MYDATA,A
mov TXDP,C
nodato:
notme:
;Start the receiving process if flag is set
jnb STARTB,rcvst
;?? something needs to go here ??
clr STARTB
;?? and here ??
sjmp exittimer
rcvst:
;At this point we move on to the next stream
acall selectnextstream
;And see if there is incoming data
jb RCVP,norcv
;there is, so set the flag
setb STARTB
norcv:
exittimer:
;restore registers
pop PSW
pop ACC
reti
selectnextstream:
inc LCTR
mov A,LCTR
rrc A
mov LI1,C
rrc A
mov LI2,C
ret
我最大的问题是让#3成功工作。
问题是,当玩家编号匹配时,射击不能中途开始,而在系统设置下一个玩家编号时,射击不能结束,因为如果每个人都想进行射击,则将同时发生两次射击。
我不能同时拍摄两张或更多张照片,因为这会弄乱接收器。
此外,之所以使用大量的数据I / O,是因为我想创建数据保证。定义它的最佳方法更像是按键反跳(如果您按下按钮,直到很长时间之后才能识别该值)。
因此,我正在考虑创建一个像这样的字节以不断发送:
01111110
对于接收方,希望这些值中的任何一个都符合接收到的有效发射的条件:
00011000
00111100
01111110
但是这些只是例子。
此外,由于激光机的速度限制,我无法使用UART进行数据交换。
我可以在代码中做什么来解决此问题?