'really simple SPI routine symbol reset = output7 ;output symbol ss = output3 ;output symbol SCLK = output4 ;output symbol MISO = input2 ;input symbol MOSI = output2 ; output symbol DRDY = input1 main: sertxd("starting...") high ss low ss findz: w0=0 'y-axis w1=0 'x-axis w2=0 'z-axis w3=0 low SCLK low reset high reset ;pulse the reset line to start a new command low reset low MOSI ;*********clock out the command byte of %01100011 -not sure, not=z-axis, 2048/div high SCLK ;bit 1 low SCLK high mosi high SCLK ;bit 2 low SCLK high SCLK ;bit 3 low SCLK low MOSI high SCLK ;bit 4 low SCLK high SCLK ;bit 5 low SCLK ; high SCLK ;bit 6 low SCLK high MOSI high SCLK ;bit 7 low SCLK high SCLK ;bit 8 low SCLK ;************************************* 'sertxd("checking...") Holdz: IF DRDY = 0 THEN Holdz 'Wait for DRDY to go HIGH ;pause 2000 bit15=pin2 ;read in bit15 HIGH SCLK ;debug ;pause 500 LOW SCLK bit14=pin2 ;read in bit14 HIGH SCLK ;debug ;pause 500 LOW SCLK bit13=pin2 ;read in bit13 HIGH SCLK ;debug ;pause 500 LOW SCLK bit12=pin2 ;read in bit12 HIGH SCLK ;debug ;pause 500 LOW SCLK bit11=pin2 ;read in bit11 HIGH SCLK ;debug ;pause 500 LOW SCLK bit10=pin2 ;read in bit10 HIGH SCLK ;debug ;pause 500 LOW SCLK bit9=pin2 ;read in bit9 HIGH SCLK ;debug ;pause 500 LOW SCLK bit8=pin2 ;read in bit8 HIGH SCLK ;debug ;pause 500 LOW SCLK bit7=pin2 ;read in bit7 HIGH SCLK ;debug ;pause 500 LOW SCLK bit6=pin2 ;read in bit6 HIGH SCLK ;debug ;pause 500 LOW SCLK bit5=pin2 ;read in bit5 HIGH SCLK ;debug ;pause 500 LOW SCLK bit4=pin2 ;read in bit4 HIGH SCLK ;debug ;pause 500 LOW SCLK bit3=pin2 ;read in bit3 HIGH SCLK ;debug ;pause 500 LOW SCLK bit2=pin2 ;read in bit2 HIGH SCLK ;debug ;pause 500 LOW SCLK bit1=pin2 ;read in bit1 HIGH SCLK ;debug ;pause 500 LOW SCLK bit0=pin2; read in bit0 HIGH SCLK w2=w0 'w1 is the value of the z-axis 'sertxd("Z: ",#w1,CR,LF) findx: low SCLK low reset high reset ;pulse the reset line to start a new command low reset low MOSI ;*********clock out the command byte of %01100001 to read the X-axis high SCLK ;bit 1 low SCLK high mosi high SCLK ;bit 2 low SCLK high SCLK ;bit 3 low SCLK low MOSI high SCLK ;bit 4 low SCLK high SCLK ;bit 5 low SCLK ; high SCLK ;bit 6 low SCLK high SCLK ;bit 7 low SCLK high MOSI high SCLK ;bit 8 low SCLK ;************************************* Holdx: IF DRDY= 0 THEN Holdx 'Wait for DRDY to go HIGH ;pause 2000 bit15=pin2 ;read in bit15 HIGH SCLK ;debug ;pause 500 LOW SCLK bit14=pin2 ;read in bit14 HIGH SCLK ;debug ;pause 500 LOW SCLK bit13=pin2 ;read in bit13 HIGH SCLK ;debug ;pause 500 LOW SCLK bit12=pin2 ;read in bit12 HIGH SCLK ;debug ;pause 500 LOW SCLK bit11=pin2 ;read in bit11 HIGH SCLK ;debug ;pause 500 LOW SCLK bit10=pin2 ;read in bit10 HIGH SCLK ;debug ;pause 500 LOW SCLK bit9=pin2 ;read in bit9 HIGH SCLK ;debug ;pause 500 LOW SCLK bit8=pin2 ;read in bit8 HIGH SCLK ;debug ;pause 500 LOW SCLK bit7=pin2 ;read in bit7 HIGH SCLK ;debug ;pause 500 LOW SCLK bit6=pin2 ;read in bit6 HIGH SCLK ;debug ;pause 500 LOW SCLK bit5=pin2 ;read in bit5 HIGH SCLK ;debug ;pause 500 LOW SCLK bit4=pin2 ;read in bit4 HIGH SCLK ;debug ;pause 500 LOW SCLK bit3=pin2 ;read in bit3 HIGH SCLK ;debug ;pause 500 LOW SCLK bit2=pin2 ;read in bit2 HIGH SCLK ;debug ;pause 500 LOW SCLK bit1=pin2 ;read in bit1 HIGH SCLK ;debug ;pause 500 LOW SCLK bit0=pin2; read in bit0 HIGH SCLK w1=w0 'w0 is the value of the x-axis 'sertxd("X: ",#w0,CR,LF) pause 100 findy: low SCLK low reset high reset ;pulse the reset line to start a new command low reset low MOSI ;*********clock out the command byte of %01100010 -find y-axis high SCLK ;bit 1 low SCLK high mosi high SCLK ;bit 2 low SCLK high SCLK ;bit 3 low SCLK low MOSI high SCLK ;bit 4 low SCLK high SCLK ;bit 5 low SCLK ; high SCLK ;bit 6 low SCLK high MOSI high SCLK ;bit 7 low SCLK low MOSI high SCLK ;bit 8 low SCLK ;************************************* 'sertxd("checking...") Holdy: IF DRDY = 0 THEN Holdy 'Wait for DRDY to go HIGH ;pause 2000 bit15=pin2 ;read in bit15 HIGH SCLK ;debug ;pause 500 LOW SCLK bit14=pin2 ;read in bit14 HIGH SCLK ;debug ;pause 500 LOW SCLK bit13=pin2 ;read in bit13 HIGH SCLK ;debug ;pause 500 LOW SCLK bit12=pin2 ;read in bit12 HIGH SCLK ;debug ;pause 500 LOW SCLK bit11=pin2 ;read in bit11 HIGH SCLK ;debug ;pause 500 LOW SCLK bit10=pin2 ;read in bit10 HIGH SCLK ;debug ;pause 500 LOW SCLK bit9=pin2 ;read in bit9 HIGH SCLK ;debug ;pause 500 LOW SCLK bit8=pin2 ;read in bit8 HIGH SCLK ;debug ;pause 500 LOW SCLK bit7=pin2 ;read in bit7 HIGH SCLK ;debug ;pause 500 LOW SCLK bit6=pin2 ;read in bit6 HIGH SCLK ;debug ;pause 500 LOW SCLK bit5=pin2 ;read in bit5 HIGH SCLK ;debug ;pause 500 LOW SCLK bit4=pin2 ;read in bit4 HIGH SCLK ;debug ;pause 500 LOW SCLK bit3=pin2 ;read in bit3 HIGH SCLK ;debug ;pause 500 LOW SCLK bit2=pin2 ;read in bit2 HIGH SCLK ;debug ;pause 500 LOW SCLK bit1=pin2 ;read in bit1 HIGH SCLK ;debug ;pause 500 LOW SCLK bit0=pin2; read in bit0 HIGH SCLK 'sertxd("X:",#w0," Y:",#w2," Z:",#w1,CR,LF) 'w0=w0 - 65335 * 100 / 41 'calibrate x-axis 'w1=w1 - 186 * 100 / 35 'w2=w2 - 65111 * 100 / 408 'w3=w0*w0 'square w0, the x-axis 'w0=w3 'w3=w1*w1 'square w1, the z-axis 'w1=w3 'w3=w2*w2 'square w2, the y-axis 'w2=w3 'w3=w0+w1+w2 'set w3=(x^2)+(z^2)+(y^2), this value shouldn't change! 'w3 = w3 / 1000 'sertxd("xyz^2: ",#w3,CR,LF) 'if w3 > 100 then foundit 'sertxd("no",CR,LF) sertxd("X:",#w1," Y:",#w0," Z:",#w2,CR,LF) goto findz 'foundit: 'sertxd("WOOHOO!") 'goto findz