bonjour,
Je n'arrive pas à saisir comment peut fonctionner le code
compris dans ma boucle
j'ai rajouté dans le Code C18 , 2 instruction ASM NOP , pour bien servir de repereCode:while(PORTAbits.RA4==1) { PT1000=PT1000+1; };
dans le code dessassemblé...
le test
Test du bit 4 du port ACode:5CB4 A880 BTFSS PORTA, 0x4, ACCESS 5CB6 D014 BRA 0x5ce0 5CDE D7EA BRA 0x5cb4
Skip if SET => va en 5CB4 donc boucle sur le test !
sinon va en 5CE0 .. qui se situe apres l'incrementation de la varaible PT1000 (entier long signé)?
le contenu de la boucle while ne serait jamais executé ..
ce qui n'est pas le cas...
pour un signal de 608µS etat haut, j'obtient une valeur de 606 ...
ce qui m'etonne un peu quand meme , avec un cycle machine de 100nS
j'esperait beaucoup plus..
Votre avis ?
Ou est-ce que je me plante ?
j'ai pourtant deja fait de l'assembleur PIC..
PIC18F46K22
Q=10Mhz x 4 (PLL ON) soit 40Mhz
cycle=4/40= 0,1µseconde
code en C18 MPLAB IDE 8.92
Code:// acquisition PT1000 Temper extt INTCONbits.GIE = 0; while(PT1000_OSC==1); // synchro sur niveau Haut while(PT1000_OSC==0); // while(PORTAbits.RA4==1) // mesure duree niveau haut _asm NOP _endasm while(PORTAbits.RA4==1) { PT1000=PT1000+1; }; _asm NOP _endasm INTCONbits.GIE = 1; k=sprintf(txt,"\t PT1000=%6ld ",PT1000); k=PutStr_RS2(txt);
View dissambly Listing
Code:5CA8 9EF2 BCF INTCON, 0x7, ACCESS 3621: // acquisition PT1000 Temper extt 5CAA B880 BTFSC PORTA, 0x4, ACCESS 5CAC D7FE BRA 0x5caa 3622: 5CAE A880 BTFSS PORTA, 0x4, ACCESS 5CB0 D7FE BRA 0x5cae 3623: INTCONbits.GIE = 0; 3624: while(PT1000_OSC==1); // synchro sur niveau Haut 3625: while(PT1000_OSC==0); 5CB2 0000 NOP 3626: // while(PORTAbits.RA4==1) // mesure duree niveau haut 3627: _asm 5CB4 A880 BTFSS PORTA, 0x4, ACCESS 5CB6 D014 BRA 0x5ce0 5CDE D7EA BRA 0x5cb4 3628: NOP 3629: _endasm 5CB8 C6B4 MOVFF PT1000, PT1000 5CBA F6B4 NOP 5CBC C6B5 MOVFF 0x6b5, 0x6b5 5CBE F6B5 NOP 5CC0 C6B6 MOVFF 0x6b6, 0x6b6 5CC2 F6B6 NOP 5CC4 C6B7 MOVFF 0x6b7, 0x6b7 5CC6 F6B7 NOP 5CC8 0106 MOVLB 0x6 5CCA 2BB4 INCF 0xb4, F, BANKED 5CCC 0E00 MOVLW 0 5CCE 0106 MOVLB 0x6 5CD0 23B5 ADDWFC 0xb5, F, BANKED 5CD2 0E00 MOVLW 0 5CD4 0106 MOVLB 0x6 5CD6 23B6 ADDWFC 0xb6, F, BANKED 5CD8 0E00 MOVLW 0 5CDA 0106 MOVLB 0x6 5CDC 23B7 ADDWFC 0xb7, F, BANKED 3630: while(PORTAbits.RA4==1) 3631: { 3632: PT1000=PT1000+1; 5CE0 0000 NOP 3633: }; 3634: _asm 5CE2 8EF2 BSF INTCON, 0x7, ACCESS
-----