Bonjour,
Je dois réaliser un programme qui compare 2 valeurs, la première valeur provient d'une tension qui varie de 0V à 5V, et la deuxième valeur est une valeur définis. Lorsque les deux valeurs sont identiques j'allume une led.
Il y a 4 variables prédéfinies :
-51 (si les deux valeurs sont identiques le programme allume la led 1)
-103 ==>LED 2
-153 ==>LED 3
-204 ==>LED 4
J'arrive à compile(j'utilise MPLAB IDE v8.40, et je simule avec MPLAB SIM), mais lorsque je simule (je force ADRESH à mes valeurs prédéfinies ( donc ici 51, 102, 153, 204) la simulation marche que pour le nombre 51.
Si je met ADRESH à 102,le programme ne va pas allumé la LED 2 comme prévu mais la LED 3
Voici mon programme
#include <p16F690.inc>
__config(_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)
#define LED1 PORTC,0
#define LED2 PORTC,1
#define LED3 PORTC,2
#define LED4 PORTC,3
#define MAVARIABLE1 .51
#define MAVARIABLE2 .102
#define MAVARIABLE3 .153
#define MAVARIABLE4 .204
cblock 0x020 ;debut de la zone de variable
Delay1 ; Assign an address to label Delay1
Delay2
Display ; define a variable to hold the diplay
endc ;fin de la zone de variable
org 0x000 ;adresse de départ après reset
Start:
bsf STATUS,RP0 ; select Register Page 1
movlw 0xFF
movwf TRISA ; Make PortA all input
clrf TRISC ; Make PortC all output
movlw 0x10 ; A2D Clock Fosc/8
movwf ADCON1
bcf STATUS,RP0 ; back to Register Page 0
bcf STATUS,RP0 ; address Register Page 2
bsf STATUS,RP1
movlw 0xFF ; we want all Port A pins Analoga
movwf ANSEL
bcf STATUS,RP0 ; address Register Page 0
bcf STATUS,RP1
movlw 0x01
movwf ADCON0 ; configure A2D for Channel 0 (RA0), Left justified, and turn on the A2D module
MainLoop:
nop ; wait 5uS for A2D amp to settle and capacitor to charge.
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
nop ; wait 1uS
bsf ADCON0,GO ; start conversion
btfss ADCON0,GO ; this bit will change to zero when the conversion is complete
goto $-1
movf ADRESH,w ; Copy the display to the LEDs
Mavaleur1:
sublw MAVARIABLE1
btfss STATUS,Z
goto Mavaleur2
bsf LED2
goto Start
Mavaleur2:
sublw MAVARIABLE2
btfss STATUS,C
goto Mavaleur3
bsf LED1
goto Start
Mavaleur3:
sublw MAVARIABLE3
btfss STATUS,C
goto Mavaleur4
bsf LED3
goto Start
;
;
Mavaleur4:
sublw MAVARIABLE3
btfss STATUS,C bsf LED4
end
Qu'est ce qui ne vas pas dans mon programme? pourquoi cela fait ca?
Merci