This discussion has been locked.
You can no longer post new replies to this discussion. If you have a question you can start a new discussion

is this procedure correct ?

unsigned char read_val1;
unsigned char read_val2;
unsigned char read_val3;
void send_uart(void);

void send_uart()
{ #pragma asm

S1 EQU 08H
S2 EQU 09H
S3 EQU 0AH
S4 EQU 0BH
E1 EQU 0CH
E2 EQU 0DH
E3 EQU 0EH
E4 EQU 0FH

W1 EQU 10H
W2 EQU 11H
W3 EQU 12H
W4 EQU 13H

K1 EQU 14H
K2 EQU 15H
K3 EQU 16H
K4 EQU 17H

CNT EQU 18H

MOV S1,#00H
MOV S2,#0fH
MOV S3,#42H
MOV S4,#40H

MOV K1,#00H
MOV K2,#00H
MOV K3,#00H
MOV K4,#00H
mov r0, read_val1 ;h.b of n1
mov r1,read_val2 ;m.b of n1
mov r2,read_val3 ;l.b of n1
mov r7,#00h
mov r6,#00h
mov r5,#00h
mov r4,#00h
mov r3,#10h ;muliplier

mov a,r3
mov b,r2
mul ab ;product of r2r3
mov r4,a ;r3 in r4
mov r5,b ;r2 in r5
mov a,r3
mov b,r1
mul ab
addc a,r5
mov r5,a
mov r6,b
jnc x1
mov a,r6
add a,#01
mov r6,a
x1:
mov a,r0
mov b,r3
mul ab
add a,r6
mov r6,a
mov r7,b
jnc x2
mov a,r7
add a,#01
mov r7,a
x2:

MOV SP,#30H

MOV E1,r7
MOV E2,r6
MOV E3,r5
MOV E4,r4

MOV CNT,#00H
CALL SUB3224 JC ENDIT

DOAGAIN: INC CNT
CALL SHIFTER24BITL
CALL SUB3224

JNC KHALI1
CALL SHIFTER24BITR
JMP LOOPBACK DEC CNT
KHALI1:

MOV A,S1
JNB Acc.7,DOAGAIN

LOOPBACK: CALL SUB3224
JC BELOW
MOV E1,W1
MOV E2,W2
MOV E3,W3
MOV E4,W4
;PUT ONE
SETB C
MOV A,K1
RLC A
MOV K1,A

MOV A,K2
RLC A
MOV K2,A

MOV A,K3
RLC A
MOV K3,A

MOV A,K4
RLC A
MOV K4,A

CLR C
;-------------
JMP OOOOO BELOW:
;PUT ZERO CLR C

MOV A,K1
ADD A,K1
MOV K1,A

MOV A,K2
RLC A
MOV K2,A

MOV A,K3
RLC A
MOV K3,A

MOV A,K4
RLC A
MOV K4,A

OOOOO: CLR C
;------------- CALL SHIFTER24BITR DJNZ CNT,LOOPBACK
RETT: JMP RETT

ENDIT: MOV K1,#00H
MOV K2,#00H
MOV K3,#00H
MOV K4,#01H
RET
;----------------- 24-bit Shifter -----------------------------
SHIFTER24BITR:
;S1:S2:S3:S4
CLR C
MOV A,S1
RRC A
MOV S1,A

MOV A,S2
RRC A
MOV S2,A

MOV A,S3
RRC A
MOV S3,A

MOV A,S4
RRC A
MOV S4,A

CLR C
RET

SHIFTER24BITL:
MOV A,S4
ADD A,S4 ;
RLC A
MOV S4,A

MOV A,S3
RLC A
MOV S3,A

MOV A,S2
RLC A
MOV S2,A

MOV A,S1
RLC A
MOV S1,A

CLR C

RET
;----------------- 32-BIT-24-BIT SUBSTARCTOR ---------------------
SUB3224:
;E1:E2:E3:E4 - S1:S2:S3:S4 = W1:W2:W3:W4
CLR C
MOV A,E4
SUBB A,S4
MOV W4,A

MOV A,E3
SUBB A,S3
MOV W3,A

MOV A,E2
SUBB A,S2
MOV W2,A

MOV A,E1
SUBB A,S1
MOV W1,A
RET
#pragma endasm
return; }
IS my procedure of calling inline function is correct,ifn't how to do it .also suggest me to receive values store in k1,k2,k3,k4 in c function

0