搜索
bottom↓
回复: 4

BASIC Stamp 2 机器人控制板 程序电路图

[复制链接]

出0入0汤圆

发表于 2010-3-28 08:35:51 | 显示全部楼层 |阅读模式
我在网上搜到的程序好象是里面的程序那位高人编译哈,我花了10个大洋买的:
Program practice

Decode basic stamp 2 of parallax Inc

Decode basic stamp 2 EEPROM data(PBASIC opcode) .

import sys,string,array,glob#files = glob.glob('*.obj')#i = 0#for fn in files:# print i,':', fn# i = i+1#i = int(raw_input('select name:'))#if i<0 or i>=len(files): # print 'exceed index range, quit!'# exit(0)#fn = filesif 0: fn = '0.obj' src1 = file(fn, "rb") src1.seek(0x3ad) lenrs = ord(src1.read(1)) lenr = lenrs*0x12+4 src1.seek(0x3af) dats = src1.read(lenr) orgdat=array.array('B', dats) for i in range(16, lenrs*0x10-2, 16): del orgdat del orgdat del orgdat[lenrs*0x10:]else: fn = '0.bin' src1 = file(fn, "rb") dats = src1.read() orgdat=array.array('B', dats)i = 0printorgcode = 0if printorgcode : for d in orgdat: print "%02X"%d, i = i+1 if i%16 == 0: print; i=0def bintoint(strdat, strlen): i = j= 0# print '[%d %d]'%(len(strdat), strlen) if strlen == 1: return 0 for i in range(strlen): j<<=1 if strdat == '1': j |= 1 return jdef exactaddr1(strdat): return '(%d,%03x)'%(bintoint(strdat[0:3],3), bintoint(strdat[3:14],11))def exactlist(strdat, strtip = ""): dattp = bintoint(strdat[0:2], 2) if strtip == "" : strtip = 'param' if strdat[0:4] == '1101': outstr = strtip outstr = fixout(outstr, 20) strdat = strdat[3:] usedlen = 0 lentmp = bintoint(strdat[0:2], 2) totalbit = 9 if lentmp == 0: totalbit = 10 outstr +='(%d,%04x)'%(lentmp, bintoint(strdat[2:totalbit-lentmp], totalbit-2-lentmp)) usedlen += totalbit-lentmp if enabledbg: print outstr if enabledbg: print 'list:%s'%strdat, lentmp, strdat[2:totalbit-lentmp] return strdat[usedlen:] if strdat[0:4] == '0111': outstr = strtip outstr = fixout(outstr, 20) strdat = strdat[4:] usedlen = 0 lentmp = bintoint(strdat[0:2], 2) totalbit = 9 if lentmp == 0: totalbit = 10 outstr +='(%d,%04x)'%(lentmp, bintoint(strdat[2:totalbit-lentmp], totalbit-2-lentmp)) usedlen += totalbit-lentmp if enabledbg: print outstr if enabledbg: print 'list:%s'%strdat, lentmp, strdat[2:totalbit-lentmp] return strdat[usedlen:] if '1111' == strdat[0:4]: return strdat[12:] if dattp == 2: return de1(strdat, [strtip, 2, inddef['const']]) if dattp == 3: return de1(strdat, [strtip, 3, inddef['var']]) if dattp == 1: return de1(strdat, [strtip, 3, inddef['var']]) if enabledbg: print 'here', strdat codeinf = optdef[strdat[:3]]; codeinf[0] = strtip return de1(strdat, codeinf);def funname(codestr): if codestr in codedef: return codedef[codestr][0] return codestrcodedef = { #'0101111':['name', [[skip, type],[...]]] '0000000':['END', [[7, 2],]], '0000001':['SLEEP', [[7, 3],]], '0000010':['NAP', [[7, 3],]], '0000011':['STOP', [[7, 8],]], '0000100':['OUTPUT', [[7, 0],]], '0000101':['HIGH', [[7, 1],]], '0000110':['TOGGLE', [[7, 0],]], '0000111':['LOW', [[7, 5],]], '0001000':['REVERSE', [[7, 4],]], '0001001':['GOTO', [[7, 2],]], '0001010':['GOSUB', [[15,3],]], '0001011':['RETURN', [[7, 8],]], '0001100':['INPUT', [[7, 3],]], '0001101':['IF', [[7, 6],]], '0001110':['SWITCH', [[4, 6],]], '0001111':['BRANCH', [[7, 4],]], '0010000':['CHOICE', [[7, 5],[4, 2],[5,12]]], '0010001':['LOOKDOWN', [[10,5],[3, 2],[1,12]]], '0010010':['RANDOM', [[10,2],[2,12],]], '0010011':['READ', [[7, 3],[3,15],[1,12]]], '0010100':['WRITE', [[7, 3],]], '0010101':['PAUSE', [[7, 0],]], '0010110':['FREQOUT', [[7, 0],]], '0010111':['FREQOUT', [[7, 0],]], '0011000':['DTMFOUT', [[7, 5],]], '0011001':['XOUT', [[7, 5],]], '0011010':['=', [[7, 0],]], '0011111':['=', [[7, 0],]], '0011110':['=', [[7, 0],]], '0100000':['DEBUG', [[7, 5],]], '0100001':['SEROUT', [[7, 5],]], '0100010':['SERIN', [[7, 8],]], '0100011':['SERIN', [[7, 5],]], '0100100':['PULSOUT', [[7, 0],]], '0100101':['PULSIN', [[7, 0],[3,2],[1,12]]], '0100110':['COUNT', [[7, 7],]], '0100111':['SHIFTIN', [[7, 5],]], '0101000':['SHIFTOUT', [[7, 5],]], '0101001':['RCTIME', [[10,2],[1,12]]], '0101010':['BUTTON', [[10,2],[1, 3]]], '0101011':['PWM', [[7, 0],]], '0110000':['NEXT', [[7, 3],]], '0111000':['NEXT', [[16,3],]], '0111001':['WHILE', [[7, 0],[7, 0],[0, 3]]], '0111010':['UNTIL', [[13,3],]], '0111011':['NEXT', [[12,3],]], '1000000':['SQR', [[7, 0],]], '1000001':['ABS', [[7, 0],]], '1000010':['NOT', [[7, 0],]], '1000010':['~', [[7, 0],]], '1000011':['-', [[7, 0],]], '1000100':['DCD', [[7, 0],]], '1000101':['NCD', [[7, 0],]], '1000110':['COS', [[7, 0],]], '1000111':['SIN', [[7, 0],]], '1001000':['HYP', [[7, 0],]], '1001001':['ATN', [[7, 0],]], '1001010':['& ', [[7, 0],]], '1001011':['|', [[7, 0],]], '1001100':['^', [[7, 0],]], '1001101':['MIN', [[7, 0],]], '1001110':['MAX', [[7, 0],]], '1001111':['+', [[7, 0],]], '1010000':['-', [[7, 0],]], '1010001':['*/', [[7, 0],]], '1010010':['*', [[7, 0],]], '1010011':['**', [[7, 0],]], '1010100':['//', [[7, 0],]], '1010101':['/', [[7, 0],]], '1010110':['DIG', [[7, 0],]], '1010111':['<<', [[7, 0],]], '1011000':['>>', [[7, 0],]], '1011001':['REV', [[7, 0],]], '1011010':['>=', [[7, 0],]], '1011011':['<=', [[7, 0],]], '1011100':['==', [[7, 0],]], '1011101':['<>', [[7, 0],]], '1011110':['>', [[7, 0],]], '1011111':['<', [[7, 0],]],}vardef = { '1110000':['bit', [[8, 9],]], '1110001':['nib', [[6, 9],]], '1110010':['byte', [[5, 9],]], '1110011':['word', [[4, 9],]], '1110100':['bit_array', [[8, 9],]], '1110101':['nib_array', [[6, 9],]], '1110110':['byte_array',[[5, 9],]], '1110111':['word_array',[[4, 9],]], '1111010':['byte', [[5, 9],]], '0111010':['byte', [[5, 9],]], '1111110':['byte', [[5, 9],]], '1111011':['word', [[4, 9],]], '0111011':['word', [[4, 9],]], '1111111':['word', [[4, 9],]], '1111101':['bit_array', [[6, 9],]],}vecdef = { '00':['elem', 1, 1], '11':['', 2, 14], }optdef = { '111':['variable', 4, 2], '110':['const', 3, 1], '101':['opera', 7, 0], '100':['opera', 7, 0], }parmdef = { '110':['variable', 3, 2], }inddef = {'general':0, 'const':1, 'var':2, 'address':3, 'addresslist':4, 'lists':5, 'expersion':7, 'debugin':8, 'opera':10, 'param expersion':11, 'skip':12 }def exactexp(strdat, codename): if enabledbg: print 'in exactexp' while strdat[0] == '1': if enabledbg: print 'exactexp', strdat[:30] if strdat[:7] in codedef: strdat = decodecode(strdat, codedef[strdat[:7]]) continue if strdat[:7] in vardef: strdat = decodecode(strdat, vardef[strdat[:7]]) continue if strdat[1:3] == '00': strdat = de1(strdat, [codename, 4, 14]) while strdat[0:5] != '11111': strdat = decodeexp(strdat) strdat = decodeexp(strdat) break continue if strdat[1:3] == '01': strdat = de1(strdat, [codename, 3, 1]) continue if strdat[1:3] == '10': strdat = de1(strdat, [codename, 3, 1]) continue if enabledbg: print 'out exactexp' strdat = strdat[3:] lentmp = bintoint(strdat[1:3],2) totalbit = 10 if lentmp == 0: totalbit = 11 if enabledbg: print strdat, totalbit, lentmp outstr +='(%d,%04x)'%(lentmp, bintoint(strdat[3:totalbit-lentmp], \ totalbit-3-lentmp)) outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit outstr = codename outstr = fixout(outstr, 20) strdat = strdat[totalbit-lentmp:] if enabledbg: print 'out exactexp' return strdat[1:]def fixout(outstr, splen): outstr += ' '*(splen-len(outstr)) return outstrdef outnum(datval): outstr = "%-6d"%datval if datval > 0x20 and datval < 0x7f: outstr += ' ==> %c'%datval return fixout(outstr, 10)def de1(strdat, codeinf): if enabledbg: print 'decode:', len(strdat),strdat[:50] global endcnts codename, skipbit, codetype = codeinf if codetype == 0: outstr = strdat[:skipbit] else: outstr = codename outstr = fixout(outstr, 20) usedlen = 0 if codetype == 0: #general code if strdat[:7] == '0000000': endcnts += 1 else: endcnts = 0 outstr += funname(strdat[:skipbit]) elif codetype == 9: #var type outstr += '%04x'%bintoint(strdat[7:], skipbit) usedlen += 7 elif codetype == 12: #strip zero if bintoint(strdat[skipbit:], skipbit) != 0 or len(strdat) < skipbit: print '!!!z', strdat[:50] return strdat strdat = strdat[skipbit:] if codetype == 1: #constant declen = bintoint(strdat, 4) usedlen = 4 datval = 0 if strdat[4] == '0': datval = 1<<declen usedlen += 1 else: declen+=1 if len(strdat[4:4+declen]) != declen: print '!!!1:%s[%2d]'%(strdat[4:], len(strdat[4:])) return "" if declen == 1: datval = 0 else: datval = bintoint(strdat[4:4+declen], declen) usedlen += declen outstr += outnum(datval) elif codetype == 2: #variable while strdat[0] == '1': if strdat[0:7] in vardef : strdat = decodecode(strdat, vardef[strdat:7]) elif strdat[0:3] == '100': strdat = de1(strdat, [codename, 2, 1]) else:break lentmp = bintoint(strdat[0:3],3) totalbit = 10 if lentmp == 0: totalbit = 11 outstr +='(%d,%04x)'%(lentmp, bintoint(strdat[3:totalbit-lentmp], \ totalbit-3-lentmp)) usedlen += totalbit-lentmp elif codetype == 3: #address outstr +='(%d,%04x)'%(bintoint(strdat[0:3],3), bintoint(strdat[3:14],11)) usedlen += 14 elif codetype == 4: #adder list while 1: outstr += "%s,"%exactaddr1(strdat[usedlen:]) usedlen += 14 if strdat[usedlen] == '0': usedlen += 1 strdat = strdat[usedlen:] break usedlen += 1 outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat elif codetype == 5: #lists strdat = exactlist(strdat) while 1: if enabledbg: print 'lists', strdat if strdat[:2]=='00': break if strdat[:2]=='01': usedlen += 2 strdat = exactlist(strdat[2:]) elif strdat[:2] == '10': usedlen += 2 strdat = de1(strdat, ['address', 2, 3]) break elif strdat[:2] == '11': while strdat[0] == '1': if enabledbg: print 'lists', strdat if strdat[:7] in vardef: strdat = decodecode(strdat, vardef[strdat[:7]]) elif strdat[:7] in codedef: strdat = decodecode(strdat, codedef[strdat[:7]]) elif strdat[2:4] == '00': strdat = de1(strdat, [codename, 3, 1]) elif strdat[2:4] == '01': strdat = de1(strdat, [codename, 3, 2]) usedlen += 2 outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat[2:] elif codetype == 6: #next strdat = exactlist(strdat) strdat = exactexp(strdat, codename) strdat = de1(strdat, [codename, 0, 15])[1:] strdat = de1(strdat, [codename, 0, 3]) return strdat elif codetype == 7: #expersion strdat = exactlist(strdat) strdat = exactexp(strdat, codename) #if strdat[:1] == '1': # strdat = decodecode(strdat, vardef[strdat[:7]]) #strdat = exactlist(strdat, [codename, 7, 2])  return strdat elif codetype == 8: #debugin while 1: codetype = bintoint(strdat[:3], 3) usedlen += 3 strtmp = "t:%-6d"%codetype if codetype == 6: codelen = bintoint(strdat[4:7], 3) strdat = strdat[24+codelen:] usedlen += 21+codelen strdat = de1(strdat, [strtmp, 4, 2]) usedlen += 6 if strdat[:2] != '01':break strdat = strdat[2:] outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat[2:] elif codetype == 10: #opera expersion if not strdat[:3] in optdef : print '!!!t', strdat return "" return de1(strdat, optdef[strdat[:3]]) elif codetype == 11: #param expersion if not strdat[:3] in parmdef : print '!!!m', strdat return "" return de1(strdat, parmdef[strdat[:3]]) elif codetype == 13: #array process while strdat[0] != '0': strdat = de1(strdat[1:], vecdef[strdat[1:3]]) usedlen += 1 usedlen += 1 outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit return strdat[1:] elif codetype == 14: declen = bintoint(strdat, 2) usedlen = 2 datval = 0 if strdat[2] == '0': datval = 1<<declen usedlen += 1 else: declen+=1 if len(strdat[2:2+declen]) != declen: print '!!!1:%s[%2d]'%(strdat[2:], len(strdat[2:])) return "" if declen == 1: datval = 0 else: datval = bintoint(strdat[2:2+declen], declen) usedlen += declen outstr += outnum(datval) elif codetype == 15: while strdat[0] == '1': if strdat[1:3] == '00': strdat = de1(strdat, [codename, 4, 14]) while strdat[0:5] != '11111': strdat = decodeexp(strdat) strdat = decodeexp(strdat) break# if strdat[0:5] == '11111':# strdat = decodecode(strdat, vardef[:7])# break# if strdat[2:4] != '11':# strdat = de1(strdat, [codename, 4, 14])# elif strdat[0:7] in vardef:# strdat = decodecode(strdat, vardef[:7]) continue if strdat[1:3] == '01': strdat = de1(strdat, [codename, 3, 1]) continue if strdat[1:3] == '10': strdat = de1(strdat, [codename, 3, 1]) continue# if strdat[1:5] == '1111':# lentmp = bintoint(strdat[5:7],2)# outstr +='(%d,%-4d)'%(lentmp, bintoint(strdat[7:11], 4))# strdat = strdat[11:]# print outstr# continue# if strdat[1:4] == '110':# lentmp = bintoint(strdat[5:7],2)# outstr +='(%d,%-4d)'%(lentmp, bintoint(strdat[7:10], 3))# strdat = strdat[10:]# print outstr# continue strdat = strdat[3:] lentmp = bintoint(strdat[1:3],2) totalbit = 10 if lentmp == 0: totalbit = 11 if enabledbg: print strdat, totalbit, lentmp outstr +='(%d,%04x)'%(lentmp, bintoint(strdat[3:totalbit-lentmp], \ totalbit-3-lentmp)) outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit outstr = codename outstr = fixout(outstr, 20) strdat = strdat[totalbit-lentmp:] return strdat elif codetype == 16: #skip return strdat outstr = fixout(outstr, 40) print outstr, '\t', usedlen+skipbit if len(strdat) < usedlen: print '!!!e:[%s],usedlen:%d'%(strdat, usedlen) return strdat[usedlen:]def decodecode(strdat, codedes): for def1 in codedes[1]: print strdat[:20] strdat = de1(strdat, [codedes[0], def1[0], def1[1]]) print strdat[:20] return strdatdef decodeexp(strdat): print strdat[:20] if strdat[:7] in codedef: strdat = decodecode(strdat, codedef[strdat[:7]]) elif strdat[:7] in vardef: strdat = decodecode(strdat, vardef[strdat[:7]]) elif strdat[:3] in optdef: strdat = de1(strdat, optdef[strdat[:3]]) elif endcnts >= 1: if len(strdat)>7: return strdat[7:] return "" else : print '!!!x:', strdat return "" return strdatdef decodedat(strdat): strdat = strdat.strip() while strdat != None and 1<len(strdat): strdat = decodeexp(strdat) if strdat != None and 0 != len(strdat) and endcnts < 2: print '!!!d:[%s]'%strdatenabledbg = 0endcnts = 0strDat = ''ibreak = 0typtmp = 0typeSta = {}orgdat.reverse()for dat in orgdat: for i in range(0,8): if dat&0x80 : typtmp |= 1 if printorgcode : sys.stdout.write('1') strDat = strDat+'1' else: if printorgcode : sys.stdout.write('0') strDat = strDat+'0' dat=dat<<1 ibreak = ibreak+1 if ibreak%7==0 : if typtmp in typeSta: typeSta[typtmp] = typeSta[typtmp]+1 else: typeSta[typtmp] = 1 if printorgcode : sys.stdout.write(' ') typtmp = 0 ibreak = 0 typtmp <<= 1stacksize = bintoint(strDat[3:14], 11)*8+bintoint(strDat[:3], 3)print 'stacksize:', stacksizeprint '\n'decodedat(strDat[stacksize:])exit(0)
点击此处下载 ourdev_541750.zip(文件大小:7K) (原文件名:75448169programpratice.py.zip)

(原文件名:KK.jpg)


(原文件名:MM.jpg)
点击此处下载 ourdev_541749.pdf(文件大小:5.20M) (原文件名:BASIC Stamp Manual v2.2.pdf)

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2010-3-28 08:49:35 | 显示全部楼层
上传编译器:点击此处下载 ourdev_541753.rar(文件大小:16.99M) (原文件名:Setup-Stamp-Editor-v2.5.rar)

有人编译成功记得上传哦

出0入0汤圆

发表于 2010-11-11 09:13:26 | 显示全部楼层
楼主,这文件怎么用???

出0入0汤圆

发表于 2010-11-11 09:21:45 | 显示全部楼层
记号

出0入0汤圆

发表于 2012-9-16 13:14:53 | 显示全部楼层
楼主,这东西怎么玩?能提供核心代码?谢谢!
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-29 19:24

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

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