
    80: ?C_STARTUP:     LJMP STARTUP1 
C:0x0000    020007   LJMP     STARTUP1(C:0007)
    20:           JMP   0x7000 
    21: ; #pragma endasm 
    22: ;  
    23: ; } 
    24:                         ; SOURCE LINE # 7 
C:0x0003    027000   LJMP     BOOT(C:7000)
    25:         RET      
C:0x0006    22       RET      
   139:                 MOV     SP,#?STACK-1 
C:0x0007    75814E   MOV      SP(0x81),<b>#0x4E</b>
   140:                 LJMP    ?C_START 
C:0x000A    02000D   LJMP     main(C:000D)
     5: main() 
C:0x000D    80F4     SJMP     asmBoot(C:0003)


   120:         ORL     AUXR1,#ENBOOT        ; enable boot 
   121:  
   122:  
   123: ; Détecte et configure le baudrate 
   124: ; La mesure utilise T2 qui à une horloge de fosc/2 
   125: Detect: 
C:0x7000    43A220   ORL      AUXR1(0xA2),#0x20
   126:         MOV      TMOD,#0x02 
C:0x7003    758902   MOV      TMOD(0x89),#0x02
   127:         MOV      T2CON,#0x30 
C:0x7006    75C830   MOV      T2CON(0xC8),#0x30
   128:         CLR      A 
C:0x7009    E4       CLR      A
   129:         MOV      TH2,A 
C:0x700A    F5CD     MOV      TH2(0xCD),A
   130:         MOV      TL2,A 
C:0x700C    F5CC     MOV      TL2(0xCC),A
   131:         JNB      RXD,$ 
C:0x700E    30B0FD   JNB      RXD(0xB0.0),C:700E
   132:         JB       RXD,$ 
C:0x7011    20B0FD   JB       RXD(0xB0.0),C:7011
   133:         SETB     TR2 
C:0x7014    D2CA     SETB     TR2(0xC8.2)
   134:         JNB      RXD,$ 
C:0x7016    30B0FD   JNB      RXD(0xB0.0),C:7016
   135:         CLR      TR2 
   136: ; Charge le Timer avec 65536 - tm/16 
C:0x7019    C2CA     CLR      TR2(0xC8.2)
   137:         MOV      A,TL2 
C:0x701B    E5CC     MOV      A,TL2(0xCC)
   138:         SWAP     A 
   139:         ; Arrondi au demi; le carry contient l'incrément si un arrondi supérieur est nécessaire 
C:0x701D    C4       SWAP     A
   140:         RLC      A      ; Mémorise l'arrondi 
C:0x701E    33       RLC      A
   141:         RR       A 
C:0x701F    03       RR       A
   142:         ANL      A,#0x0F 
C:0x7020    540F     ANL      A,#0x0F
   143:         MOV      R0,A 
C:0x7022    F8       MOV      R0,A
   144:         MOV      A,TH2 
C:0x7023    E5CD     MOV      A,TH2(0xCD)
   145:         SWAP     A 
C:0x7025    C4       SWAP     A
   146:         ANL      A,#0xF0 
C:0x7026    54F0     ANL      A,#B(0xF0)
   147:         ORL      A,R0 
C:0x7028    48       ORL      A,R0
   148:         ADDC     A,#0   ; Ajoute le carry 
C:0x7029    3400     ADDC     A,#0x00
   149:         MOV      R0,A 
C:0x702B    F8       MOV      R0,A
   150:         MOV      A,TH2 
C:0x702C    E5CD     MOV      A,TH2(0xCD)
   151:         SWAP     A 
C:0x702E    C4       SWAP     A
   152:         ANL      A,#0x0F 
C:0x702F    540F     ANL      A,#0x0F
   153:         ADDC     A,#0   ; Ajoute le report de l'addition précédente 
C:0x7031    3400     ADDC     A,#0x00
   154:         MOV      R1,A 
   155:         ; compl. à 2 
C:0x7033    F9       MOV      R1,A
   156:         CLR      C 
C:0x7034    C3       CLR      C
   157:         CLR      A 
C:0x7035    E4       CLR      A
   158:         SUBB     A,R0 
C:0x7036    98       SUBB     A,R0
   159:         MOV      TL2,A 
C:0x7037    F5CC     MOV      TL2(0xCC),A
   160:         MOV      RCAP2L,A 
C:0x7039    F5CA     MOV      RCAP2L(0xCA),A
   161:         CLR      A 
C:0x703B    E4       CLR      A
   162:         SUBB     A,R1 
C:0x703C    99       SUBB     A,R1
   163:         MOV      TH2,A 
C:0x703D    F5CD     MOV      TH2(0xCD),A
   164:         MOV      RCAP2H,A 
C:0x703F    F5CB     MOV      RCAP2H(0xCB),A
   165:         SETB     TR2 
C:0x7041    D2CA     SETB     TR2(0xC8.2)
   166:         MOV      SCON,#0x52      
   167:  
   168: Wait_Uchar: 
   169: ; Attend le 1er caractère 
C:0x7043    759852   MOV      SCON(0x98),#0x52
   170:         JNB      RI,$ 
C:0x7046    3098FD   JNB      RI(0x98.0),WAIT_UCHAR(C:7046)
   171:         CLR      RI 
C:0x7049    C298     CLR      RI(0x98.0)
   172:         MOV      A,SBUF 
   173:         ; Dans la valeur recue, les 2 LSB n'on pas été pris car on les a déjà utilisé pour la detection du baudrate 
C:0x704B    E599     MOV      A,SBUF(0x99)
   174:         CLR      C 
C:0x704D    C3       CLR      C
   175:         RLC      A 
C:0x704E    33       RLC      A
   176:         SETB     C 
C:0x704F    D3       SETB     C
   177:         RLC      A 
   178: ; Renvoie le caractère 
C:0x7050    33       RLC      A
   179:         JNB      TI,$ 
C:0x7051    3099FD   JNB      TI(0x98.1),C:7051
   180:         CLR      TI 
C:0x7054    C299     CLR      TI(0x98.1)
   181:         MOV      SBUF,A 
   182:  
   183: ; Check to see if uppercase "U" 
C:0x7056    F599     MOV      SBUF(0x99),A
   184:         CJNE     A,#'U',Not_U1  ; Check to see if uppercase "U" 
C:0x7058    B45502   CJNE     A,#0x55,NOT_U1(C:705D)
   185:         JMP      Intel_Hex 
   186: Not_U1: 
   187: ; On teste encore un caractère car avec des débits élevés, on manque partiellement le premier 
C:0x705B    801A     SJMP     INTEL_HEX(C:7077)
   188:         JNB      RI,$ 
C:0x705D    3098FD   JNB      RI(0x98.0),NOT_U1(C:705D)
   189:         CLR      RI 
C:0x7060    C298     CLR      RI(0x98.0)
   190:         MOV      A,SBUF 
   191: ; Renvoie le caractère 
C:0x7062    E599     MOV      A,SBUF(0x99)
   192:         JNB      TI,$ 
C:0x7064    3099FD   JNB      TI(0x98.1),C:7064
   193:         CLR      TI 
C:0x7067    C299     CLR      TI(0x98.1)
   194:         MOV      SBUF,A 
C:0x7069    F599     MOV      SBUF(0x99),A
   195:         CJNE     A,#'U',Not_U   ; Check to see if uppercase "U" 
C:0x706B    B45502   CJNE     A,#0x55,NOT_U(C:7070)
   196:         JMP      Intel_Hex 
   197: Not_U: 
   198: ; Dans ce cas on recommence la détection 
C:0x706E    8007     SJMP     INTEL_HEX(C:7077)
   199:         MOV      SCON,#0 
C:0x7070    759800   MOV      SCON(0x98),#0x00
   200:         CLR      TR2 
C:0x7073    C2CA     CLR      TR2(0xC8.2)
   201:         JMP      Detect 
   202:  
   203:  
   204: ;***** Intel Hex File Load routine ***** 
   205: ;This routine loads an Intel Hex formatted file into  
   206: ;the buffer memory. The hex file is received as a series 
   207: ;of ASCII characters on the serial input line of the 
   208: ;serial port. A record type of 00H is considered to be 
   209: ;a data field. Any other type of record is considered 
   210: ;to be an End-of-File marker. This routine also calculates 
   211: ;the checksum on the field as it is received and compares 
   212: ;this calculated checksum with the checksum field received 
   213: ;in the record. 
   214: Intel_Hex: 
C:0x7075    808C     SJMP     DETECT(C:7003)
   215: ORL AUXR1,#20h  ; ENBOOT bit determines whether the BOOTROM is enabled 
C:0x7077    43A220   ORL      AUXR1(0xA2),#0x20
   216: MOV R0,#11      ; R0 = osc freq (integer) 
C:0x707A    780B     MOV      R0,#0x0B
   217: MOV R1,#01h 
C:0x707C    7901     MOV      R1,#0x01
   218: MOV DPH,#0      ;block code, block 0, 0k to 8k, 00H 
C:0x707E    758300   MOV      DPH(0x83),#0x00
   219: MOV DPL,#0 
C:0x7081    758200   MOV      DPL(0x82),#0x00
   220: LCALL 0FFF0h 
   221:  
C:0x7084    12FFF0   LCALL    C:FFF0
   222: MOV A,#'m' 
C:0x7087    746D     MOV      A,#0x6D
   223: call CO 
C:0x7089    118D     ACALL    CO(C:708D)
   224: jmp $ 
   225:  
   226:  
   227: ;***** console output routine ***** 
   228: ;Outputs character in the ACC to  
   229: ;the serial output line. 
   230: CO: 
C:0x708B    80FE     SJMP     C:708B
   231:         JNB      TI,$ 
C:0x708D    3099FD   JNB      TI(0x98.1),CO(C:708D)
   232:         CLR      TI 
C:0x7090    C299     CLR      TI(0x98.1)
   233:         MOV      SBUF,A 
C:0x7092    F599     MOV      SBUF(0x99),A
   234:         RET 
   235:  
   236: ;***** console input routine ***** 
   237: ;Waits until character has been received 
   238: ;and then returns char in ACC. 
   239: CI: 
C:0x7094    22       RET      
   240:         JNB      RI,$ 
C:0x7095    3098FD   JNB      RI(0x98.0),CI(C:7095)
   241:         CLR      RI 
C:0x7098    C298     CLR      RI(0x98.0)
   242:         MOV      A,SBUF 
C:0x709A    E599     MOV      A,SBUF(0x99)
   243:         RET 
C:0x709C    22       RET      


