Write/Read multiple Variables using BS2
covert
Posts: 4
Hey all, I know there has to be an easier way of doing this... I've spent a lot of time doing this long hand and it failed to build, so I would like someones help with the programming to both condense and understand an easy way of accomplishing the code attached... I'm trying to input a 4-bit number, store it in memory, enter another 4-bit number store it in memory, then enter one more 4-bit number store it in memory. Then I'd like to be able to call the entered numbers out of memory to perform a math equation then output the answer via serial.
Thank you ahead of time for all your help. It's really appreciated!!!
Covert
' {$STAMP BS2} ' {$PBASIC 2.5} ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '--------------------------------------[noparse][[/noparse]Variable Declarations]--------------------------------------------------- ' ParIn1 VAR IN4 'Parallel Input Bit 1 ParIn2 VAR IN5 'Parallel Input Bit 2 ParIn3 VAR IN6 'Parallel Input Bit 3 ParIn4 VAR IN7 'Parallel Input Bit 4 Ans VAR Byte 'Answer Equals 8 Bits Com1 VAR Nib 'Combined 4-bits to make 1 Com2 VAR Nib 'Combined 4-bits to make 2 Com3 VAR Nib 'Combined 4-bits to make 3 Com4 VAR Nib 'Combined 4-bits to make 4 Com5 VAR Nib 'Combined 4-bits to make 5 Com6 VAR Nib 'Combined 4-bits to make 6 Com7 VAR Nib 'Combined 4-bits to make 7 Com8 VAR Nib 'Combined 4-bits to make 8 Com9 VAR Nib 'Combined 4-bits to make 9 Com0 VAR Nib 'Combined 4-bits to make 0 ComPl VAR Nib 'Combined 4-bits to make + ComMi VAR Nib 'Combined 4-bits to make - ComEq VAR Nib 'Combined 4-bits to make = ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '-----------------------------------------[noparse][[/noparse]Set Value Types]------------------------------------------------------ ' Com1 = %0001 'Setting Binary Bits for Decimal 1 Com2 = %0010 'Setting Binary Bits for Decimal 2 Com3 = %0011 'Setting Binary Bits for Decimal 3 Com4 = %0100 'Setting Binary Bits for Decimal 4 Com5 = %0101 'Setting Binary Bits for Decimal 5 Com6 = %0110 'Setting Binary Bits for Decimal 6 Com7 = %0111 'Setting Binary Bits for Decimal 7 Com8 = %1000 'Setting Binary Bits for Decimal 8 Com9 = %1001 'Setting Binary Bits for Decimal 9 Com0 = %1010 'Setting Binary Bits for Decimal 10 ComMi= %1011 'Setting Binary Bits for Decimal 11 ComEq= %1100 'Setting Binary Bits for Decimal 12 ComPl= %1101 'Setting Binary Bits for Decimal 13 ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '----------------------------------------------[noparse][[/noparse]Main Routine]---------------------------------------------------- ' Main: GOSUB Var1: ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '-----------------------------------------[noparse][[/noparse]First Variable Key Scan]---------------------------------------------- ' Var1: 'Main Subroutine IF (ParIn1 = 1 AND ParIn2 = 1 AND ParIn3 = 1 AND ParIn4 = 1) THEN 'Checking Bits for Binary 1111 DEBUG " Welcome... Please enter Number ", CR 'Displaying Opening Screen PAUSE 1000 'Pause for 1 Second ENDIF 'End Statement DO 'Begin Loop IF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 0 AND ParIn4 = 0) THEN 'Checking bits for Binary 0001 (1) DEBUG IBIN4 Com1, CR 'Display 4-bit Binary by calling Com1 'SEROUT 1, 9600, [noparse][[/noparse]Com1, CR] 'Serially send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 101, Com1 'Write the Value Com1 at location 101 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 0 AND ParIn2 = 1 AND ParIn3 = 0 AND ParIn4 = 0) THEN 'Checking bits for Binary 0010 (2) DEBUG IBIN4 Com2, CR 'Display 4-bit Binary by calling Com2 'SEROUT 1, 9600, [noparse][[/noparse]Com2, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 102, Com2 'Write the Value Com2 at location 102 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 1 AND ParIn2 = 1 AND ParIn3 = 0 AND ParIn4 = 0) THEN 'Checking bits for Binary 0011 (3) DEBUG IBIN4 Com3, CR 'Display 4-bit Binary by calling Com3 'SEROUT 1, 9600, [noparse][[/noparse]Com3, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 103, Com3 'Write the Value Com3 at location 103 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 0 AND ParIn2 = 0 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0100 (4) DEBUG IBIN4 Com4, CR 'Display 4-bit Binary by calling Com4 'SEROUT 1, 9600, [noparse][[/noparse]Com4, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 104, Com4 'Write the Value Com4 at location 104 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0101 (5) DEBUG IBIN4 Com5, CR 'Display 4-bit Binary by calling Com5 'SEROUT 1, 9600, [noparse][[/noparse]Com5, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 105, Com5 'Write the Value Com5 at location 105 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 0 AND ParIn2 = 1 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0110 (6) DEBUG IBIN4 Com6, CR 'Display 4-bit Binary by calling Com6 'SEROUT 1, 9600, [noparse][[/noparse]Com6, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 106, Com6 'Write the Value Com6 at location 106 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 1 AND ParIn2 = 1 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0111 (7) DEBUG IBIN4 Com7, CR 'Display 4-bit Binary by calling Com7 'SEROUT 1, 9600, [noparse][[/noparse]Com7, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 107, Com7 'Write the Value Com7 at location 107 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 0 AND ParIn2 = 0 AND ParIn3 = 0 AND ParIn4 = 1) THEN 'Checking bits for Binary 1000 (8) DEBUG IBIN4 Com8, CR 'Display 4-bit Binary by calling Com8 'SEROUT 1, 9600, [noparse][[/noparse]Com8, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 108, Com8 'Write the Value Com8 at location 108 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 0 AND ParIn4 = 1) THEN 'Checking bits for Binary 1001 (9) DEBUG IBIN4 Com9, CR 'Display 4-bit Binary by calling Com9 'SEROUT 1, 9600, [noparse][[/noparse]Com9, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 109, Com9 'Write the Value Com9 at location 109 GOSUB PlMi: 'Go to Subroutine PlMi ELSEIF (ParIn1 = 0 AND ParIn2 = 1 AND ParIn3 = 0 AND ParIn4 = 1) THEN 'Checking bits for Binary 1010 (0) DEBUG IBIN4 Com0, CR 'Display 4-bit Binary by calling Com0 'SEROUT 1, 9600, [noparse][[/noparse]Com0, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 100, Com0 'Write the Value Com0 at location 100 GOSUB PlMi: 'Go to Subroutine PlMi ELSE 'If NO pushbuttons are active GOTO Var1: 'Return to the top and scan again ENDIF 'End Statment LOOP 'End Loop ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '---------------------------------------------[noparse][[/noparse]Addition/Subtraction Subroutine]---------------------------------------- ' PlMi: DO IF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 1 AND ParIn4 = 1) THEN 'Checking bits for Binary 1011 (-) DEBUG IBIN4 ComMi, CR 'Display 4-bit Binary by calling ComMi 'SEROUT 1, 9600, [noparse][[/noparse]ComMi, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 111, ComMi 'Write the Value ComMi at location 111 GOSUB Var2: 'Go to Subroutine Var2 ELSEIF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 1 AND ParIn4 = 1) THEN 'Checking bits for Binary 1101 (+) DEBUG IBIN4 ComPl, CR 'Display 4-bit Binary by calling ComPl 'SEROUT 1, 9600, [noparse][[/noparse]ComPl, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Sencond WRITE 113, ComPl 'Write the Value ComPl at Location 113 GOSUB Var2: 'Go to Subroutine Var2 ELSE GOSUB PlMi: ENDIF LOOP ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '---------------------------------------[noparse][[/noparse]Second Variable Subroutine]--------------------------------------------- ' Var2: DO 'Begin Loop IF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 0 AND ParIn4 = 0) THEN 'Checking bits for Binary 0001 (1) DEBUG IBIN4 Com1, CR 'Display 4-bit Binary by calling Com1 'SEROUT 1, 9600, [noparse][[/noparse]Com1, CR] 'Serially send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 121, Com1 'Write the Value Com1 at location 121 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 0 AND ParIn2 = 1 AND ParIn3 = 0 AND ParIn4 = 0) THEN 'Checking bits for Binary 0010 (2) DEBUG IBIN4 Com2, CR 'Display 4-bit Binary by calling Com2 'SEROUT 1, 9600, [noparse][[/noparse]Com2, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 122, Com2 'Write the Value Com2 at location 122 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 1 AND ParIn2 = 1 AND ParIn3 = 0 AND ParIn4 = 0) THEN 'Checking bits for Binary 0011 (3) DEBUG IBIN4 Com3, CR 'Display 4-bit Binary by calling Com3 'SEROUT 1, 9600, [noparse][[/noparse]Com3, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 123, Com3 'Write the Value Com3 at location 123 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 0 AND ParIn2 = 0 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0100 (4) DEBUG IBIN4 Com4, CR 'Display 4-bit Binary by calling Com4 'SEROUT 1, 9600, [noparse][[/noparse]Com4, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 124, Com4 'Write the Value Com4 at location 124 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0101 (5) DEBUG IBIN4 Com5, CR 'Display 4-bit Binary by calling Com5 'SEROUT 1, 9600, [noparse][[/noparse]Com5, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 125, Com5 'Write the Value Com5 at location 125 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 0 AND ParIn2 = 1 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0110 (6) DEBUG IBIN4 Com6, CR 'Display 4-bit Binary by calling Com6 'SEROUT 1, 9600, [noparse][[/noparse]Com6, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 126, Com6 'Write the Value Com6 at location 126 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 1 AND ParIn2 = 1 AND ParIn3 = 1 AND ParIn4 = 0) THEN 'Checking bits for Binary 0111 (7) DEBUG IBIN4 Com7, CR 'Display 4-bit Binary by calling Com7 'SEROUT 1, 9600, [noparse][[/noparse]Com7, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 127, Com7 'Write the Value Com7 at location 127 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 0 AND ParIn2 = 0 AND ParIn3 = 0 AND ParIn4 = 1) THEN 'Checking bits for Binary 1000 (8) DEBUG IBIN4 Com8, CR 'Display 4-bit Binary by calling Com8 'SEROUT 1, 9600, [noparse][[/noparse]Com8, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 128, Com8 'Write the Value Com8 at location 128 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 1 AND ParIn2 = 0 AND ParIn3 = 0 AND ParIn4 = 1) THEN 'Checking bits for Binary 1001 (9) DEBUG IBIN4 Com9, CR 'Display 4-bit Binary by calling Com9 'SEROUT 1, 9600, [noparse][[/noparse]Com9, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 129, Com9 'Write the Value Com9 at location 129 GOSUB Equ: 'Go to Subroutine Equ ELSEIF (ParIn1 = 0 AND ParIn2 = 1 AND ParIn3 = 0 AND ParIn4 = 1) THEN 'Checking bits for Binary 1010 (0) DEBUG IBIN4 Com0, CR 'Display 4-bit Binary by calling Com0 'SEROUT 1, 9600, [noparse][[/noparse]Com0, CR] 'Serially Send 4-bit Code Out PAUSE 1000 'Pause for 1 Second WRITE 120, Com0 'Write the Value Com0 at location 120 GOSUB Equ: 'Go to Subroutine Equ ELSE 'If NO pushbuttons are active GOTO Equ: 'Return to the top and scan again ENDIF 'End Statment LOOP 'End Loop ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '-----------------------------------------------[noparse][[/noparse]Equating Subroutine]-------------------------------------------- ' Equ: READ 101, Com1 READ 102, Com2 READ 103, Com3 READ 104, Com4 READ 105, Com5 READ 106, Com6 READ 107, Com7 READ 108, Com8 READ 109, Com9 READ 100, Com0 READ 121, Com1 READ 122, Com2 READ 123, Com3 READ 124, Com4 READ 125, Com5 READ 126, Com6 READ 127, Com7 READ 128, Com8 READ 129, Com9 READ 120, Com0 READ 111, ComMi READ 113, ComPl DO IF ComPl THEN (Com0 + Com1 = %00000001) OR (Com0 + Com2 = %00000010) OR (Com0 + Com3 = %00000011) OR (Com0 + Com4 = %00000100) OR (Com0 + Com5 = %00000101) OR (Com0 + Com6 = %00000110) OR (Com0 + Com7 = %00000111) OR (Com0 + Com8 = %00001000) OR (Com0 + Com9 = %00001001) OR (Com1 + Com1 = %00000010) OR (Com1 + Com2 = %00000011) OR (Com1 + Com3 = %00000100) OR (Com1 + Com4 = %00000101) OR (Com1 + Com5 = %00000110) OR (Com1 + Com6 = %00000111) OR (Com1 + Com7 = %00001000) OR (Com1 + Com8 = %00001001) OR (Com1 + Com9 = %00001010) OR (Com2 + Com1 = %00000011) OR (Com2 + Com2 = %00000100) OR (Com2 + Com3 = %00000101) OR (Com2 + Com4 = %00000110) OR (Com2 + Com5 = %00000111) OR (Com2 + Com6 = %00001000) OR (Com2 + Com7 = %00001001) OR (Com2 + Com8 = %00001010) OR (Com2 + Com9 = %00001011) OR (Com3 + Com1 = %00000100) OR (Com3 + Com2 = %00000101) OR (Com3 + Com3 = %00000110) OR (Com3 + Com4 = %00000111) OR (Com3 + Com5 = %00001000) OR (Com3 + Com6 = %00001001) OR (Com3 + Com7 = %00001010) OR (Com3 + Com8 = %00001011) OR (Com3 + Com9 = %00001100) OR (Com4 + Com1 = %00000101) OR (Com4 + Com2 = %00000110) OR (Com4 + Com3 = %00000111) OR (Com4 + Com4 = %00001000) OR (Com4 + Com6 = %00001010) OR (Com4 + Com7 = %00001011) OR (Com4 + Com8 = %00001100) OR (Com4 + Com9 = %00001101) OR (Com4 + Com5 = %00001001) OR (Com5 + Com1 = %00000110) OR (Com5 + Com2 = %00000111) OR (Com5 + Com3 = %00001000) OR (Com5 + Com4 = %00001001) OR (Com5 + Com5 = %00001010) OR (Com5 + Com6 = %00001011) OR (Com5 + Com7 = %00001100) OR (Com5 + Com8 = %00001101) OR (Com5 + Com9 = %00001110) OR (Com6 + Com1 = %00000111) OR (Com6 + Com2 = %00001000) OR (Com6 + Com3 = %00001001) OR (Com6 + Com4 = %00001010) OR (Com6 + Com5 = %00001011) OR (Com6 + Com6 = %00001100) OR (Com6 + Com7 = %00001101) OR (Com6 + Com8 = %00001110) OR (Com6 + Com9 = %00001111) OR (Com7 + Com1 = %00001000) OR (Com7 + Com2 = %00001001) OR (Com7 + Com3 = %00001010) OR (Com7 + Com4 = %00001011) OR (Com7 + Com5 = %00001100) OR (Com7 + Com6 = %00001101) OR (Com7 + Com7 = %00001110) OR (Com7 + Com8 = %00001111) OR (Com7 + Com9 = %00010000) OR (Com8 + Com1 = %00001001) OR (Com8 + Com2 = %00001010) OR (Com8 + Com3 = %00001011) OR (Com8 + Com4 = %00001100) OR (Com8 + Com5 = %00001101) OR (Com8 + Com6 = %00001110) OR (Com8 + Com7 = %00001111) OR (Com8 + Com8 = %00010000) OR (Com8 + Com9 = %00010001) OR (Com9 + Com1 = %00001010) OR (Com9 + Com2 = %00001011) OR (Com9 + Com3 = %00001100) OR (Com9 + Com4 = %00001101) OR (Com9 + Com5 = %00001110) OR (Com9 + Com6 = %00001111) OR (Com9 + Com7 = %00010000) OR (Com9 + Com8 = %00010001) OR (Com9 + Com9 = %00010010) OR DEBUG IBIN8 Ans, CR PAUSE 1000 GOTO Main: ELSEIF ComMi THEN (Com0 - Com1 = %00000001) OR (Com0 - Com2 = %00000010) OR (Com0 - Com3 = %00000011) OR (Com0 - Com4 = %00000100) OR (Com0 - Com5 = %00000101) OR (Com0 - Com6 = %00000110) OR (Com0 - Com7 = %00000111) OR (Com0 - Com8 = %00001000) OR (Com0 - Com9 = %00001001) OR (Com1 - Com1 = %00000010) OR (Com1 - Com2 = %00000011) OR (Com1 - Com3 = %00000100) OR (Com1 - Com4 = %00000101) OR (Com1 - Com5 = %00000110) OR (Com1 - Com6 = %00000111) OR (Com1 - Com7 = %00001000) OR (Com1 - Com8 = %00001001) OR (Com1 - Com9 = %00001010) OR (Com2 - Com1 = %00000011) OR (Com2 - Com2 = %00000100) OR (Com2 - Com3 = %00000101) OR (Com2 - Com4 = %00000110) OR (Com2 - Com5 = %00000111) OR (Com2 - Com6 = %00001000) OR (Com2 - Com7 = %00001001) OR (Com2 - Com8 = %00001010) OR (Com2 - Com9 = %00001011) OR (Com3 - Com1 = %00000100) OR (Com3 - Com2 = %00000101) OR (Com3 - Com3 = %00000110) OR (Com3 - Com4 = %00000111) OR (Com3 - Com5 = %00001000) OR (Com3 - Com6 = %00001001) OR (Com3 - Com7 = %00001010) OR (Com3 - Com8 = %00001011) OR (Com3 - Com9 = %00001100) OR (Com4 - Com1 = %00000101) OR (Com4 - Com2 = %00000110) OR (Com4 - Com3 = %00000111) OR (Com4 - Com4 = %00001000) OR (Com4 - Com6 = %00001010) OR (Com4 - Com7 = %00001011) OR (Com4 - Com8 = %00001100) OR (Com4 - Com9 = %00001101) OR (Com4 - Com5 = %00001001) OR (Com5 - Com1 = %00000110) OR (Com5 - Com2 = %00000111) OR (Com5 - Com3 = %00001000) OR (Com5 - Com4 = %00001001) OR (Com5 - Com5 = %00001010) OR (Com5 - Com6 = %00001011) OR (Com5 - Com7 = %00001100) OR (Com5 - Com8 = %00001101) OR (Com5 - Com9 = %00001110) OR (Com6 - Com1 = %00000111) OR (Com6 - Com2 = %00001000) OR (Com6 - Com3 = %00001001) OR (Com6 - Com4 = %00001010) OR (Com6 - Com5 = %00001011) OR (Com6 - Com6 = %00001100) OR (Com6 - Com7 = %00001101) OR (Com6 - Com8 = %00001110) OR (Com6 - Com9 = %00001111) OR (Com7 - Com1 = %00001000) OR (Com7 - Com2 = %00001001) OR (Com7 - Com3 = %00001010) OR (Com7 - Com4 = %00001011) OR (Com7 - Com5 = %00001100) OR (Com7 - Com6 = %00001101) OR (Com7 - Com7 = %00001110) OR (Com7 - Com8 = %00001111) OR (Com7 - Com9 = %00010000) OR (Com8 - Com1 = %00001001) OR (Com8 - Com2 = %00001010) OR (Com8 - Com3 = %00001011) OR (Com8 - Com4 = %00001100) OR (Com8 - Com5 = %00001101) OR (Com8 - Com6 = %00001110) OR (Com8 - Com7 = %00001111) OR (Com8 - Com8 = %00010000) OR (Com8 - Com9 = %00010001) OR (Com9 - Com1 = %00001010) OR (Com9 - Com2 = %00001011) OR (Com9 - Com3 = %00001100) OR (Com9 - Com4 = %00001101) OR (Com9 - Com5 = %00001110) OR (Com9 - Com6 = %00001111) OR (Com9 - Com7 = %00010000) OR (Com9 - Com8 = %00010001) OR (Com9 - Com9 = %00010010) OR DEBUG IBIN8 Ans, CR PAUSE 1000 GOTO Main: ELSE GOTO Equ: ENDIF LOOP ' '---------------------------------------------------------------------------------------------------------------- ' '================================================================================================================ ' '---------------------------------------[noparse][[/noparse]End of Program Subroutine]---------------------------------------------- ' END
Thank you ahead of time for all your help. It's really appreciated!!!
Covert
Comments
You should make your "Com#" variables an array of nibs, rather than a series of named variables. I believe that PBASIC will allow you to access it as an array anyway, but you don't really need the names...
Your initialization of the com array should be done in a loop. You're just setting each one to n (where n is your counter/index). Some psuedo code:
For this line: IF (ParIn1 = 1 AND ParIn2 = 1 AND ParIn3 = 1 AND ParIn4 = 1) THEN you can substitute the nib alias and compare it to %1111. Look in the PBASIC manual, it's something like INB.
You have "Com0 + Com5 = %00000101" and other similar variants in the big OR blocks. First, what is the purpose of the OR block? Isn't an OR (in this case) a logical (boolean) operator, not an arithmetic operator? Anyway, if you're sure that you want that block then I'm pretty sure that you "Com0 + Com5 = %00000101" will never be possible. The since the Com# can each be either 0 or 1, the highest value when added is two.
For the rest of your code, study up on how to use a FOR loop. Then, look at the patters that you see in your code, and try and determine if you can smash it into a loop. The beginning of Equ would be a good place to start (all those reads are begging to be in a loop). The subroutines Var1 and Var2 could probably be combined, then made much more efficient. Some more detail on what you're trying to accomplish will help any further answers. Specifically, exactly what each section of code is supposed to do (embodied as comments in the code every 5-10 lines or so).
A valiant effort. But I think Your way over thinking everything.
I would read through the serial chapters again.
I'm an old school programmer from the TRS-80 days, I could do this back then (20 years ago) with far less code.
If it was easy, We wouldn't be here.
_______________$WMc%_____
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
The Truth is out there············································ BoogerWoods, FL. USA
Without getting too fancy, how about something like,
edit: more consistent notation, typo
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Tracy Allen
www.emesystems.com
Post Edited (Tracy Allen) : 8/6/2009 3:42:29 PM GMT
For a Senior Project I've designed and built a DTMF Encoder and Decoder with a built calculator interface (just momentary switches connected to my circuit). On the output of my Decoder I have a 4-Bit Binary Coded Decimal signal, via my parallel input to my BS2. Every momentary switch has a specific BCD output (such as 0001 (1) through 1101 (13)).
On the BS2 side of this project my ultimate goals are to calculate the inputs (either addition or subtraction depending on what the user decides on) and to convert it to serial for wireless transmission (which has been taken care of by another teammate). As far as the calculator operation goes I'd like to receive a number (triggered by one momentary switch on the calculator interface, such as 0001 (1)), then receive an operand (addition is BCD 1101 (13) and subtraction is 1011 (11)), then receive the second variable (such as 0010 (2)), then calculate the sum or difference. Finally to finish it off I'd like to receive the last button (Equals sign, BCD 1100 (12)), at this point it should send just the answer serially.
Also when looking at my code you'll notice that after every entry I'd like to send it serially. On the receiving end of my transmission there is another BS2 (this is a teammates part) programmed to receive a byte after each button is pushed so that a robotic arm can write the individual number, then wait for the next number to be entered and so on.
as far as my code goes for right now, I know:
My "First Variable Key Scan" (Var1), works how I need it too, it's really long hand though if you get what I mean. But every time a button is pushed the debug window shows the BCD output, which is what I'd like to see. But just having thirteen BCD outputs isn't enough, I need these BCD digits to be either added or subtracted (which is one reason I moved from the two nibbles to a byte), unfortunately I'm unsure how to either store the numbers entered momentarily while the program retrieves the other numbers, or if I have to actually save the numbers. On the other hand, like Tracy Allen had mentioned, I'm not to sure how to separate all my variable nibbles..?
The whole "OR BLOCKS" are being used because I really couldn't think of another way to accomplish what I wanted without first scanning through each option until the right ones found. I'm not trying to use it as a mathematics operator, but as an actual OR, so yes, like a Boolean operator...
If this still isn't enough, or if you have other questions on what I'm trying to accomplish I'll get back to you much faster than this... Thank you guys soooo much for all your help, I really appreciate it!