Hier ist der erstellte Assemblercode:
Man sieht darin, dass ganz und gar nicht optimiert wird.
Wegen der for-schleife: Ich konnte keinen Fehler finden. Villeicht habe ich dich falsch verstanden. könntest du dass ein wenig genauer erläutern?Code:;///////////////////////////////////////////////////////////////////////////////// ;// Code Generator: BoostC Compiler - http://www.sourceboost.com ;// Version : 6.96 ;// License Type : Lite License (Unregistered) ;// Limitations : PIC12,PIC16 max code size:2048 words, max RAM banks:2, Non commercial use only ;///////////////////////////////////////////////////////////////////////////////// include "P16F630.inc" ; Heap block 0, size:53 (0x0000002B - 0x0000005F) __HEAP_BLOCK0_BANK EQU 0x00000000 __HEAP_BLOCK0_START_OFFSET EQU 0x0000002B __HEAP_BLOCK0_END_OFFSET EQU 0x0000005F ; Heap block 1, size:0 (0x00000000 - 0x00000000) __HEAP_BLOCK1_BANK EQU 0x00000000 __HEAP_BLOCK1_START_OFFSET EQU 0x00000000 __HEAP_BLOCK1_END_OFFSET EQU 0x00000000 ; Heap block 2, size:0 (0x00000000 - 0x00000000) __HEAP_BLOCK2_BANK EQU 0x00000000 __HEAP_BLOCK2_START_OFFSET EQU 0x00000000 __HEAP_BLOCK2_END_OFFSET EQU 0x00000000 ; Heap block 3, size:0 (0x00000000 - 0x00000000) __HEAP_BLOCK3_BANK EQU 0x00000000 __HEAP_BLOCK3_START_OFFSET EQU 0x00000000 __HEAP_BLOCK3_END_OFFSET EQU 0x00000000 gbl_status EQU 0x00000003 ; bytes:1 gbl_indf EQU 0x00000000 ; bytes:1 gbl_tmr0 EQU 0x00000001 ; bytes:1 gbl_pcl EQU 0x00000002 ; bytes:1 gbl_fsr EQU 0x00000004 ; bytes:1 gbl_porta EQU 0x00000005 ; bytes:1 gbl_portc EQU 0x00000007 ; bytes:1 gbl_pclath EQU 0x0000000A ; bytes:1 gbl_intcon EQU 0x0000000B ; bytes:1 gbl_pir1 EQU 0x0000000C ; bytes:1 gbl_tmr1l EQU 0x0000000E ; bytes:1 gbl_tmr1h EQU 0x0000000F ; bytes:1 gbl_t1con EQU 0x00000010 ; bytes:1 gbl_cmcon EQU 0x00000019 ; bytes:1 gbl_option_reg EQU 0x00000081 ; bytes:1 gbl_trisa EQU 0x00000085 ; bytes:1 gbl_trisc EQU 0x00000087 ; bytes:1 gbl_pie1 EQU 0x0000008C ; bytes:1 gbl_pcon EQU 0x0000008E ; bytes:1 gbl_osccal EQU 0x00000090 ; bytes:1 gbl_wpua EQU 0x00000095 ; bytes:1 gbl_wpu EQU 0x00000095 ; bytes:1 gbl_ioca EQU 0x00000096 ; bytes:1 gbl_ioc EQU 0x00000096 ; bytes:1 gbl_vrcon EQU 0x00000099 ; bytes:1 gbl_eedata EQU 0x0000009A ; bytes:1 gbl_eeadr EQU 0x0000009B ; bytes:1 gbl_eecon1 EQU 0x0000009C ; bytes:1 gbl_eecon2 EQU 0x0000009D ; bytes:1 pause1ms_00000_1_loop EQU 0x00000024 ; bytes:2 pause1ms_00000_1_i EQU 0x00000026 ; bytes:2 pause1ms_00000_1_oszilator EQU 0x00000028 ; bytes:2 CompTempVar574 EQU 0x0000002A ; bytes:1 CompTempVar575 EQU 0x0000002A ; bytes:1 pause_00000_arg_loop EQU 0x00000020 ; bytes:2 pause_00000_1_i EQU 0x00000022 ; bytes:2 CompTempVar576 EQU 0x00000024 ; bytes:1 ORG 0x00000000 GOTO _startup ORG 0x00000004 pause1ms_00000 ; { pause1ms ; function begin MOVLW 0x28 BCF STATUS, RP0 MOVWF pause1ms_00000_1_oszilator CLRF pause1ms_00000_1_oszilator+D'1' CLRF pause1ms_00000_1_i CLRF pause1ms_00000_1_i+D'1' label1 MOVF pause1ms_00000_1_i+D'1', W XORLW 0x80 MOVWF CompTempVar574 MOVF pause1ms_00000_1_oszilator+D'1', W XORLW 0x80 SUBWF CompTempVar574, W BTFSS STATUS,Z GOTO label2 MOVF pause1ms_00000_1_oszilator, W SUBWF pause1ms_00000_1_i, W label2 BTFSS STATUS,C RETURN CLRF pause1ms_00000_1_loop CLRF pause1ms_00000_1_loop+D'1' label3 MOVF pause1ms_00000_1_loop+D'1', W XORLW 0x80 MOVWF CompTempVar575 MOVLW 0x80 SUBWF CompTempVar575, W BTFSS STATUS,Z GOTO label4 MOVLW 0x1E SUBWF pause1ms_00000_1_loop, W label4 BTFSS STATUS,C GOTO label5 INCF pause1ms_00000_1_loop, F BTFSS STATUS,Z GOTO label3 INCF pause1ms_00000_1_loop+D'1', F GOTO label3 label5 INCF pause1ms_00000_1_i, F BTFSC STATUS,Z INCF pause1ms_00000_1_i+D'1', F GOTO label1 ; } pause1ms function end ORG 0x0000002C pause_00000 ; { pause ; function begin CLRF pause_00000_1_i CLRF pause_00000_1_i+D'1' label6 MOVF pause_00000_1_i+D'1', W XORLW 0x80 MOVWF CompTempVar576 MOVF pause_00000_arg_loop+D'1', W XORLW 0x80 SUBWF CompTempVar576, W BTFSS STATUS,Z GOTO label7 MOVF pause_00000_arg_loop, W SUBWF pause_00000_1_i, W label7 BTFSS STATUS,C RETURN CALL pause1ms_00000 INCF pause_00000_1_i, F BTFSC STATUS,Z INCF pause_00000_1_i+D'1', F GOTO label6 ; } pause function end ORG 0x0000003F main ; { main ; function begin BCF STATUS, RP0 CLRF gbl_porta CLRF gbl_portc BSF STATUS, RP0 CLRF gbl_trisa MOVLW 0xFF MOVWF gbl_trisc BCF STATUS, RP0 CLRF gbl_intcon label8 BTFSS gbl_portc,0 GOTO label9 MOVLW 0xFF MOVWF gbl_porta GOTO label10 label9 CLRF gbl_porta label10 MOVLW 0xFF MOVWF pause_00000_arg_loop CLRF pause_00000_arg_loop+D'1' CALL pause_00000 GOTO label8 ; } main function end ORG 0x00000053 _startup BCF PCLATH,3 BCF PCLATH,4 GOTO main END
Ich habe auch ein Problem vom Assemblercode entdeckt, dass der Auslösßer sein könnte. Ich werde ihn heute noch untersuchen:
Dabei wird zuerst der Wert 250 in die Variable pause_00000_arg_loop geschrieben, und danach durch CLRF pause_00000_arg_loop+D'1' wieder gelöscht. Was das +D'1' bedeutet, weiß ich nicht, da ich dass noch nie angewendet habe.Code:MOVLW 0xFA MOVWF pause_00000_arg_loop CLRF pause_00000_arg_loop+D'1' CALL pause_00000
Ist dass villeicht das problem?







Zitieren

Lesezeichen