Dear all, Thank you for your help in advance. I created a very simple program to test my Monitor-51 which is showed below:
#include "AT89X55.H" sbit P25 = 0xA5; void DELAY(int j) { int i; for(;j>0;j--) { for(i=2;i>0;i--) {;} } } main(){ while(1) { P25 = 0; DELAY(1); P25 = 1; DELAY(1); } }
... C:0x00AE E4 CLR A C:0x00AF F5CB MOV RCAP2H(0xCB),A C:0x00B1 F5CA MOV RCAP2L(0xCA),A C:0x00B3 F5CC MOV TL2(0xCC),A C:0x00B5 F5CD MOV TH2(0xCD),A C:0x00B7 F5C9 MOV T2MOD(0xC9),A C:0x00B9 F5C8 MOV T2CON(0xC8),A C:0x00BB 20B0FD JB RXD(0xB0.0),C:00BB C:0x00BE 30B0FD JNB RXD(0xB0.0),C:00BE C:0x00C1 D2CA SETB TR2(0xC8.2) C:0x00C3 30B003 JNB RXD(0xB0.0),C:00C9 C:0x00C6 30CFFA JNB TF2(0xC8.7),C:00C3 C:0x00C9 30B0FD JNB RXD(0xB0.0),C:00C9 C:0x00CC 30B003 JNB RXD(0xB0.0),C:00D2 C:0x00CF 30CFFA JNB TF2(0xC8.7),C:00CC C:0x00D2 30B0FD JNB RXD(0xB0.0),C:00D2 C:0x00D5 C2CA CLR TR2(0xC8.2) C:0x00D7 20CFD4 JB TF2(0xC8.7),C:00AE C:0x00DA AFCC MOV R7,TL2(0xCC) C:0x00DC AECD MOV R6,TH2(0xCD) C:0x00DE EE MOV A,R6 C:0x00DF C3 CLR C ...
That first instruction is the reset for the monitor. Did you relocate your program to a different starting address? If so, your program will appear at that address and not at 0000h. Jon
Hi Jon, Following instructions in "C51: SETTING PROGRAM START ADDRESS", I did: Change the startup code... 1. Copy the STARTUP.A51 file from the \C51\LIB directory to my project directory. 2. Search for CSEG AT 0000h and change it to CSEG AT 8000h. 3. Add the startup code to my project. Locate the interrupt vectors (uVision Version 2)... 1. Select Options for Target from the Project menu. 2. Select the C51 tab. 3. Check the Interrupt vectors at address checkbox. 4. Change the offset to 0x8000. Specify the code area for the linker (uVision Version 2)... 1. Select Options for Target from the Project menu. 2. Select the Target tab. 3. Change the EPROM starting address to 0x8000. Rebuild my program and check the M51 map file as:
BL51 BANKED LINKER/LOCATER V5.03, INVOKED BY: C:\KEIL\C51\BIN\BL51.EXE STARTUP.obj, TEST.obj TO TESTMON CODE (0X8000-0XFDFF) XDATA (0XFF00-0XFFFF) MEMORY MODEL: LARGE INPUT MODULES INCLUDED: STARTUP.obj (?C_STARTUP) TEST.obj (TEST) LINK MAP OF MODULE: TESTMON (?C_STARTUP) TYPE BASE LENGTH RELOCATION SEGMENT NAME ----------------------------------------------------- * * * * * * * D A T A M E M O R Y * * * * * * * REG 0000H 0008H ABSOLUTE "REG BANK 0" IDATA 0008H 0006H UNIT _IDATA_GROUP_ IDATA 000EH 0001H UNIT ?STACK * * * * * * * C O D E M E M O R Y * * * * * * * 0000H 8000H *** GAP *** CODE 8000H 0003H ABSOLUTE CODE 8003H 0051H UNIT ?PR?MAIN?TEST CODE 8054H 003DH UNIT ?PR?_DELAY?TEST CODE 8091H 000CH UNIT ?C_C51STARTUP OVERLAY MAP OF MODULE: TESTMON (?C_STARTUP) SEGMENT IDATA_GROUP +--> CALLED SEGMENT START LENGTH ---------------------------------------------- ?C_C51STARTUP ----- ----- +--> ?PR?MAIN?TEST ?PR?MAIN?TEST 0008H 0002H +--> ?PR?_DELAY?TEST ?PR?_DELAY?TEST 000AH 0004H SYMBOL TABLE OF MODULE: TESTMON (?C_STARTUP) VALUE TYPE NAME ---------------------------------- ------- MODULE ?C_STARTUP C:8091H SEGMENT ?C_C51STARTUP I:000EH SEGMENT ?STACK C:8000H PUBLIC ?C_STARTUP N:0000H SYMBOL IBPSTACK N:0100H SYMBOL IBPSTACKTOP N:0080H SYMBOL IDATALEN C:8094H SYMBOL IDATALOOP N:0000H SYMBOL PBPSTACK N:0000H SYMBOL PBPSTACKTOP N:0000H SYMBOL PDATALEN N:0000H SYMBOL PDATASTART N:0000H SYMBOL PPAGE N:0000H SYMBOL PPAGEENABLE D:0081H SYMBOL SP C:8091H SYMBOL STARTUP1 N:0000H SYMBOL XBPSTACK N:0000H SYMBOL XBPSTACKTOP N:0000H SYMBOL XDATALEN N:0000H SYMBOL XDATASTART C:8000H LINE# 81 C:8091H LINE# 88 C:8093H LINE# 89 C:8094H LINE# 90 C:8095H LINE# 91 C:8097H LINE# 140 C:809AH LINE# 141 ------- ENDMOD ?C_STARTUP ------- MODULE TEST C:0000H SYMBOL _ICE_DUMMY_ D:0090H PUBLIC P1 C:8003H PUBLIC main B:0090H.5 PUBLIC green_led B:0090H.4 PUBLIC red_led C:8054H PUBLIC _delay ------- PROC MAIN ------- DO I:0008H SYMBOL i ------- ENDDO C:8003H LINE# 12 C:8003H LINE# 13 C:8003H LINE# 28 C:8005H LINE# 29 C:8007H LINE# 31 C:8007H LINE# 32 C:8007H LINE# 33 C:800DH LINE# 34 C:800DH LINE# 35 C:800FH LINE# 36 C:8016H LINE# 38 C:802CH LINE# 40 C:8040H LINE# 41 C:8040H LINE# 42 C:8042H LINE# 43 C:8049H LINE# 45 C:8053H LINE# 46 C:8053H LINE# 48 C:8053H LINE# 49 ------- ENDPROC MAIN ------- PROC _DELAY D:0006H SYMBOL t ------- DO I:000AH SYMBOL q I:000CH SYMBOL m ------- ENDDO C:8054H LINE# 51 C:8054H LINE# 52 C:8054H LINE# 55 C:806CH LINE# 56 C:806CH LINE# 57 C:8072H LINE# 58 C:8072H LINE# 59 C:8083H LINE# 60 C:808DH LINE# 62 C:8090H LINE# 63 ------- ENDPROC _DELAY ------- ENDMOD TEST Program Size: data=15.0 xdata=0 code=157 LINK/LOCATE RUN COMPLETE. 0 WARNING(S), 0 ERROR(S)
What else should I do? Modify the settings for the debugger so that it loads the application but so taht it does not run til main. Then, start the debugger. Enter $=0x8000 in the command window. This should show your program's disassembly in the source window. Jon