giacomo56 Inserita: 17 aprile 2023 Segnala Share Inserita: 17 aprile 2023 Ho solo il disassemblato di cui riporto l'ultima parte Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 17 aprile 2023 Segnala Share Inserita: 17 aprile 2023 Così dice poco perchè alla locazione 3FC potrebbe non andarci mai, vista la serie di goto. Bisogna vedere la lista delle riche "C" con espasione ASM, verifica che non ci sia un'opzione da settare nel compilatore. Inoltre bisogna vedere a cosa si riferiscono quelle istruzioni, visto che il locatore le ha poste verso la fine della memoria. Link al commento Condividi su altri siti More sharing options...
giacomo56 Inserita: 17 aprile 2023 Segnala Share Inserita: 17 aprile 2023 Il programma al simulatore funziona come previsto. Quando i è uguale a 5 salta a 0x3fc e poi 0x0. Al reset c'è un salto alla locazione 0x3fe e da qui a 0x3b6 (come si vede nel disassemblato) dove inizia il main. Purtroppo il masm listing non riporta il codice C. 166 03B6 _main: 167 ;psect for function _main 168 169 03B6 l626: 170 ;incstack = 0 171 ; Regs used in _main: [wreg+status,2+status,0+btemp+1] 172 173 03B6 1683 bsf 3,5 ;RP0=1, select bank1 174 03B7 0185 clrf 5 ;volatile 175 03B8 1283 bcf 3,5 ;RP0=0, select bank0 176 03B9 0185 clrf 5 ;volatile 177 03BA 01A2 clrf main@i 178 03BB 01A3 clrf main@i+1 179 03BC 2BEF goto l640 180 03BD l628: 181 03BD 3021 movlw 33 182 03BE 1283 bcf 3,5 ;RP0=0, select bank0 183 03BF 00A1 movwf ??_main+1 184 03C0 3076 movlw 118 185 03C1 00A0 movwf ??_main 186 03C2 u37: 187 03C2 0BA0 decfsz ??_main,f 188 03C3 2BC2 goto u37 189 03C4 0BA1 decfsz ??_main+1,f 190 03C5 2BC2 goto u37 191 03C6 0000 nop 192 03C7 l630: 193 03C7 1283 bcf 3,5 ;RP0=0, select bank0 194 03C8 1405 bsf 5,0 ;volatile 195 03C9 3007 movlw 7 196 03CA 00A1 movwf ??_main+1 197 03CB 307D movlw 125 198 03CC 00A0 movwf ??_main 199 03CD u47: 200 03CD 0BA0 decfsz ??_main,f 201 03CE 2BCD goto u47 202 03CF 0BA1 decfsz ??_main+1,f 203 03D0 2BCD goto u47 204 03D1 l632: 205 03D1 1283 bcf 3,5 ;RP0=0, select bank0 206 03D2 1005 bcf 5,0 ;volatile 207 03D3 3007 movlw 7 208 03D4 00A1 movwf ??_main+1 209 03D5 307D movlw 125 210 03D6 00A0 movwf ??_main 211 03D7 u57: 212 03D7 0BA0 decfsz ??_main,f 213 03D8 2BD7 goto u57 214 03D9 0BA1 decfsz ??_main+1,f 215 03DA 2BD7 goto u57 216 03DB l634: 217 03DB 1283 bcf 3,5 ;RP0=0, select bank0 218 03DC 1485 bsf 5,1 ;volatile 219 03DD 3007 movlw 7 220 03DE 00A1 movwf ??_main+1 221 03DF 307D movlw 125 222 03E0 00A0 movwf ??_main 223 03E1 u67: 224 03E1 0BA0 decfsz ??_main,f 225 03E2 2BE1 goto u67 226 03E3 0BA1 decfsz ??_main+1,f 227 03E4 2BE1 goto u67 228 03E5 l636: 229 03E5 1283 bcf 3,5 ;RP0=0, select bank0 230 03E6 1085 bcf 5,1 ;volatile 231 03E7 l638: 232 03E7 0822 movf main@i,w 233 03E8 3E01 addlw 1 234 03E9 00A2 movwf main@i 235 03EA 0823 movf main@i+1,w 236 03EB 1803 skipnc 237 03EC 3E01 addlw 1 238 03ED 3E00 addlw 0 239 03EE 00A3 movwf main@i+1 240 03EF l640: 241 03EF 0823 movf main@i+1,w 242 03F0 3A80 xorlw 128 243 03F1 00DF movwf btemp+1 244 03F2 3080 movlw 128 245 03F3 025F subwf btemp+1,w 246 03F4 1D03 skipz 247 03F5 2BF8 goto u25 248 03F6 3005 movlw 5 249 03F7 0222 subwf main@i,w 250 03F8 u25: 251 03F8 1C03 skipc 252 03F9 2BFB goto u21 253 03FA 2BFC goto u20 254 03FB u21: 255 03FB 2BBD goto l628 256 03FC u20: 257 03FC l18: 258 03FC 2800 ljmp start 259 03FD __end_of_main: 260 005E btemp set 94 ;btemp 261 005E wtemp0 set 94 Comunque anche in un programmino con solo un paio di assegnamenti alla fine si trova un goto 0x0 secco. Ciao. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 17 aprile 2023 Segnala Share Inserita: 17 aprile 2023 (modificato) Per curiosità provo a riesumare quache mio vecchio programma e verifico. Da moderatore giacomo56 ma tu e vergablas sieto lo stesso utente? Perchè vedo che ti sei accodato alla discussione aperta da vergablas e sembra una normale prosecuzione della discussione. Modificato: 17 aprile 2023 da Livio Orsini Link al commento Condividi su altri siti More sharing options...
giacomo56 Inserita: 17 aprile 2023 Segnala Share Inserita: 17 aprile 2023 Io ho usato la versione 2.4 di XC8. No, sono un altro utente. Ciao. Link al commento Condividi su altri siti More sharing options...
Livio Orsini Inserita: 18 aprile 2023 Segnala Share Inserita: 18 aprile 2023 Io uso/usavo prevalentemente CCSC come compilatore. Di seguito riporto il listato con espanso in asm di un programmino .................... BYTE CONST LED_MAP[10] = {0x90,0xb7,0x19,0x15,0x36,0x54,0x50,0xb5,0,0x24}; .................... .................... .................... void wait() { // This function waits for either ~2ms or until a .................... int countdown; // event happens (in this case a rs232 character) .................... .................... countdown=200; * 002A: MOVLW C8 002B: MOVWF 25 .................... while((--countdown!=0)&&!kbhit()) .................... delay_us(10); 002C: DECF 25,F 002D: BTFSC 03.2 002E: GOTO 037 002F: BTFSC 0C.5 0030: GOTO 037 0031: MOVLW 10 0032: MOVWF 77 0033: DECFSZ 77,F 0034: GOTO 033 0035: NOP 0036: GOTO 02C .................... } 0037: RETLW 00 .................... .................... void display_segs(char c) { .................... if((c>'9')||(C<'0')) * 0012: MOVF 25,W 0013: SUBLW 39 0014: BTFSS 03.0 0015: GOTO 01A 0016: MOVF 25,W 0017: SUBLW 2F 0018: BTFSS 03.0 0019: GOTO 020 .................... output_b(0xff); 001A: BSF 03.5 001B: CLRF 06 001C: MOVLW FF 001D: BCF 03.5 001E: MOVWF 06 .................... else 001F: GOTO 029 .................... output_b(LED_MAP[c-'0']); 0020: MOVLW 30 0021: SUBWF 25,W 0022: CALL 004 0023: MOVWF 27 0024: BSF 03.5 0025: CLRF 06 0026: BCF 03.5 0027: MOVF 27,W 0028: MOVWF 06 .................... } 0029: RETLW 00 .................... .................... .................... void display( char one, char two) { .................... display_segs(one); * 0038: MOVF 23,W 0039: MOVWF 25 003A: CALL 012 .................... output_high(PIN_A0); 003B: BSF 03.5 003C: BCF 05.0 003D: BCF 03.5 003E: BSF 05.0 .................... wait(); 003F: CALL 02A .................... output_low(PIN_A0); 0040: BSF 03.5 0041: BCF 05.0 0042: BCF 03.5 0043: BCF 05.0 .................... display_segs(two); 0044: MOVF 24,W 0045: MOVWF 25 0046: CALL 012 .................... output_high(PIN_A1); 0047: BSF 03.5 0048: BCF 05.1 0049: BCF 03.5 004A: BSF 05.1 .................... wait(); 004B: CALL 02A .................... output_low(PIN_A1); 004C: BSF 03.5 004D: BCF 05.1 004E: BCF 03.5 004F: BCF 05.1 .................... } 0050: BCF 0A.3 0051: BCF 0A.4 0052: GOTO 072 (RETURN) .................... .................... .................... void main() { 0053: CLRF 04 0054: BCF 03.7 0055: MOVLW 1F 0056: ANDWF 03,F 0057: MOVLW 81 0058: BSF 03.5 0059: MOVWF 19 005A: MOVLW A6 005B: MOVWF 18 005C: MOVLW 90 005D: BCF 03.5 005E: MOVWF 18 005F: BSF 03.5 0060: BSF 1F.0 0061: BSF 1F.1 0062: BSF 1F.2 0063: BCF 1F.3 .................... char pos1, pos2; .................... .................... set_tris_b(0); 0064: MOVLW 00 0065: MOVWF 06 .................... output_b(0); 0066: CLRF 06 0067: BCF 03.5 0068: CLRF 06 .................... .................... pos1='0'; 0069: MOVLW 30 006A: MOVWF 21 .................... pos2='1'; 006B: MOVLW 31 006C: MOVWF 22 .................... .................... while(TRUE) { .................... display(pos1,pos2); 006D: MOVF 21,W 006E: MOVWF 23 006F: MOVF 22,W 0070: MOVWF 24 0071: GOTO 038 .................... if(kbhit()) { 0072: BTFSS 0C.5 0073: GOTO 07A .................... pos1=pos2; 0074: MOVF 22,W 0075: MOVWF 21 .................... pos2=getc(); 0076: BTFSS 0C.5 0077: GOTO 076 0078: MOVF 1A,W 0079: MOVWF 22 .................... } .................... } 007A: GOTO 06D .................... .................... } 007B: SLEEP Configuration Fuses: Word Il main inizia alla locazione 0x53 a 0x6D inizia un ciclo di while infinito che termina a 0x7A. Se dovesse uscire dal ciclo infinito il processore viene messo in modo SLEEP, da cui esce o per rest o per un interrupt Link al commento Condividi su altri siti More sharing options...
Messaggi consigliati
Crea un account o accedi per commentare
Devi essere un utente per poter lasciare un commento
Crea un account
Registrati per un nuovo account nella nostra comunità. è facile!
Registra un nuovo accountAccedi
Hai già un account? Accedi qui.
Accedi ora