In the following code: ******************************************** #include <REG51.H> unsigned char rem(unsigned char d1,unsigned char d2) { B=d2; ACC=d1; #pragma asm DIV AB; #pragma endasm return B; } void main(void) { while(1) { unsigned char x,y,z; P0=255; x=65; y=10; z=rem(x,y); P0=z; } } ***************************************** I noticed that the instruction d1=ACC is not converted into assembly (Keil ignores this line). Is this any reason behind that?..How can I solve the problem? Thanks
hi, why do you try to play with ASM for such purposes? Next C lines produce the same result:
unsigned char div(unsigned char x, unsigned char y) { return (x/y); } unsigned char rem(unsigned char x, unsigned char y) { return (x%y); }
unsigned char div(unsigned char x, unsigned char y) MOV A,R7 MOV B(0xF0),R5 DIV AB MOV R7,A RET unsigned char rem(unsigned char x, unsigned char y) MOV A,R7 MOV B(0xF0),R5 DIV AB MOV R7,B(0xF0) RET
Thanks Oleg for that info. The problem is I didn't know how to get the remainder using C. I find your help so valuable Many thanks again.