??? 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 |