| ??? 11/25/06 11:33 Read: times |
#128500 - Russell you comment plz ! Responding to: ???'s previous message |
Dear Russell,
Yes, your right about the error in my code. It would work fine for values < 256, but would not give correct results for > 256 ( which was whats intended ). This code takes the value of pulses & doubles it. Since the PCA (HSO mode) timesout (example for 1khz) every 500uS and in order to achieve my objective we need the pulse to be High = 500uS & Low = 500uS to form one 1Khz pulse.
MOV PULSES,#250 ; Pulses desired
MOV A,PULSES
MOV B,#02H ; We need a 1 & 0 to be a pulse
MUL8_16:
MOV PSW,#0
MOV A,X ; Load X into accumulator
MOV B,YL ; Load Y low byte into B register
MUL AB ; Multiply
MOV Z0,A ; Save result low byte
PUSH B ; push result high byte (X * YH)
MOV A,X ; Load X into accumulator
MOV B,YH ; Load Y high byte into B register
MUL AB ; Multiply
; Warning generated "operand allocation required"
POP 0 ; Pop R0 to recall X * YL high byte
ADD A,R0 ; Add X * YL high byte & X * YH low byte
MOV Z1,A ; save result
CLR A ; Clear accumulator
ADDC A,B ; A = B + carry flag
MOV Z2,A ; save results
MOV .LOW(PULSES),A
MOV .HIGH(PULSES),B
Would this code do the job ? Rgds Ranjit |



