| ??? 01/06/12 20:05 Read: times |
#185356 - yes Responding to: ???'s previous message |
its simple, will be fast, its easy to read - what more ?
(There is error on last line MOV MESS_1,A is true, MOV A,MESS_1 is wrong When one is learning language it is very good to learn on real task, in this case fast results are main aim( consciously or not). But... take a moment to learn something additional (its free :-). One disadvantage in Your code is RAM usage - 8 bytes instead 16 bits. Below is my proposal- probably it is with more lines(compared to Your code), probably will be slower, but uses 2 bytes instead 8 bytes. In Your code some program's segment will load 8 muxer bytes with 2 bits values. Then other fragment will call Your code to form MESS_1,MESS_2 . My code uses only MEAS_1 ,MEAS_2. Any change in muxer settings is stored in ready to use MEAS_1,MEAS_2 bytes. Code can be extended to allow muxer settings reading. I wrote , but not tested, can be wrong, search for errors.
;Inputs: MUX_1, MUX_2, MUX_3, MUX_4, MUX_5, MUX_6, MUX_7, MUX_8
;Outputs: MESS_1, MESS_2
;;;MESS_1 DATA 0x10 ???? this is in bank2 ???
;;;MESS_2 DATA 0x11 ???? this is in bank2 ???
; MUX_1 through 8 will all each contain a value from RES_1 through RES_4
;;;;MUX_1 DATA 0x20;
;;;;.....
;;;;MUX_8 DATA 0x27
;8 bytes instead 16 bits ????
MUX_1byte DATA 100 ;or 0x20 , but manipulating as single bits is not needed ;in this task (as i assume)
MUX_2byte DATA 101
RES_1 EQU 0x00
;...
RES_4 EQU 0x03
SETMUX1_8byR2R3: ;R2 is mux numberr 1..8 ,r3 is value res_1..res_4 (0..3)
mov a,r2
jz SETMUX1_8byR2R3fail
clr c
subb a,#9
jnc SETMUX1_8byR2R3fail
;here we are sure mux number is in allowed margins 1..8
mov a,r3
anl a,#3 ;2 bits for muxer , see RES_1,RES4
mov r3,a
mov a,r2 ;mux number 1..8
dec a
;divide by 4 , ;four muxers in one byte
rr a
rr a
anl a,#1
add a,#MUX_1byte
mov r0,a
mov a,r2
mov r4,#3 ;help byte
setmux1_8_r3prepare:
dec a
anl a,#3
jz setmux1_8_r3ready
xch a,r3
rl a
rl a
xch a,r3
push a
mov a,r4
rl a
rl a
mov r4,a
pop a
jmp setmux1_8_r3prepare
setmux1_8_r3ready:
mov a,r4
xrl a,#0ffh
anl a,@r0
orl a,r3
mov @r0,a
mov a,#0ffh ; ok result
ret
SETMUX1_8byR2R3fail:
clr a ;error result
ret
|



