Dear all, The Siemens Profibus Controller (SPC3), connected to a T89C51RD2 via P0 (multiplexed) and P2, has in its first few addresses registers/latches which I have to set in order to start using it. I believe the SPC to be wired to begin at 0x8000, as the output from P2.7 is inverted before being put into SPC3. In the options for target, I've set: memory model: small code rom: small off chip xdata memory: start: 0x8000 size: 0x600 The rest of the options are left blank. In STARTUP.A51 I've set: XDATASTART EQU 8000H XDATALEN EQU 600H and in code: AUXR = 0x0E; Suppose the address of the register that i'm trying to read is 04H in the SPC. Why does putchar(XBYTE[0x0004]) (or putchar(XBYTE[0x8004]) for that matter) not work? (ie. it outputs the value of the address, '04', and not its contents) I later used a for-loop to output XBYTE[0x0000] through to XBYTE[0xFFFF], which always seem to return the last 2 hex-digits of every address. I've also set the xdata in 'options for target' and Startup.A51 to 0x0000 with size 0x000 to the same effect. Did i miss out or misunderstand something? Any help would be greatly appreciated.
rather that XBYTE, couldn't you define some meaningfully-named variables using _at_? In either case, what does the generated assembler look like?
Hi Andrew, Below is the relevant part of the generated assembler code. Pls excuse and correct my bad programming. But in particular, I would like to find out why it didnt work. Thanks and much appreciated.
; for(aaa=0x0000; aaa<=0xFFFF; aaa++){ //addresses 0000h to FFFFh ; SOURCE LINE # 32 CLR A MOV aaa?040,A MOV aaa?040+01H,A ?C0003: ; bbb = ((XBYTE[aaa] >> 4) & 0x0F)+0x30; //higher 4 bits into ASCII 0-9 ; SOURCE LINE # 32 MOV DPL,aaa?040+01H MOV DPH,aaa?040 MOVX A,@DPTR SWAP A ANL A,#0FH ADD A,#030H MOV bbb?041,A ; if((bbb & 0x0F)>=0xA){ //ASCII A-F ; SOURCE LINE # 33 ANL A,#0FH CLR C SUBB A,#0AH JC ?C0006 ; bbb += 0x7; ; SOURCE LINE # 34 MOV A,#07H ADD A,bbb?041 MOV bbb?041,A ; } ; SOURCE LINE # 35 ?C0006: ; putchar(bbb); //outputs higher 4 bits in ASCII to hyperterminal ; SOURCE LINE # 36 MOV R7,bbb?041 ACALL _putchar