Problème avec programmation pic16F690

cs_bibou1234 Messages postés 5 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 1 novembre 2010 - 15 juin 2010 à 21:33
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 - 16 juin 2010 à 19:40
Bonjour
j'ai un problème au niveau de la programmation en assembleur d'un pic16F690
J'ai trois fonctions a testé
-la détection des defauts pour la pression
-la detection des defauts pour la temperature
-et la batterie

Lorsque j'ai testé mes fonctions une par une elles marchent toutes correctement.
Lorsque je les met toute ensemble, ça ne marche plus.
J'ai cherché la fonction qui faisait tout buggé et il semble que ça soit la fonction qui teste la batterie.
Lorsque que je la met avec la fonction qui detecte les defauts de la pression et la fonction qui detecte les defauts pour la temperature, elle empeche les fonctions qui detecte les defauts de fonction. on dirait qu'elle les bloque.
Je n'arrive pas à voir ce qui fait buggé, j'ai re verifié chaque ligne du programme, verifier les valeurs des registres. et je dois rendre la programmation pour vendredi :s

Savez-vous d'où cela pourrait venir?


Merci d'avance

2 réponses

cs_bibou1234 Messages postés 5 Date d'inscription mercredi 24 février 2010 Statut Membre Dernière intervention 1 novembre 2010
15 juin 2010 à 21:40
#include

__config (_INTRC_OSC_NOCLKOUT & _WDT_OFF & _PWRTE_OFF & _MCLRE_OFF & _CP_OFF & _BOR_OFF & _IESO_OFF & _FCMEN_OFF)



cblock 0x020
result : 1
result1 : 1
result2 : 1
Delay1
Delay2
endc

org 0x000




;detection des defauts pour la pression
Start:
movlw 0x00
movwf PORTC
movlw 0x00
movwf PORTA
movlw 0x00
movwf PORTB

bsf PORTC,7

bsf STATUS,RP0
movlw 0xFF
movwf TRISA
clrf TRISC
clrf TRISB
movlw 0x10
movwf ADCON1
bcf STATUS,RP0
bsf STATUS,RP1
movlw b'00000001' ;Configuration de AN0 comme pin analogique
movwf ANSEL
bcf STATUS,RP0
bcf STATUS,RP1
movlw 0x01
movwf ADCON0

MainLoop:
nop ;Attente de 5µs
nop ;1µs
nop ;1µs
nop ;1µs
nop ;1µs

bsf ADCON0,GO
btfss ADCON0,GO
goto $-1
movf ADRESH,w
movwf result
Mavaleur1:
movf result,w
sublw 0x0A
btfss STATUS,C
goto Mavaleur2
bsf PORTC,2
bsf PORTC,5
goto Start1
;
Mavaleur2: ;On est inférieur à 1.8V donc on détecte le défaut « ILL »

movf result,w
sublw 0x5C ;On soustrait 0x05C à « result »
btfss STATUS,C
goto Mavaleur3
bsf PORTC,2
bsf PORTC,4
goto Start1

Mavaleur3: ;On est inférieur à 2,2V donc on détecte aucun défaut
movf result,w
sublw 0x70
btfss STATUS,C
goto Mavaleur4
bsf PORTC,1
goto Start1
;
Mavaleur4: ;On est inférieur à 3.15V donc on détecte le défaut « ILL »
movf result,w
sublw 0xA1
btfss STATUS,C
goto Mavaleur5
bsf PORTC,2
bsf PORTC,4
goto Start1

Mavaleur5: ;On est inférieur à 3.55V donc on détecte le défaut « OC »
movf result,w
sublw 0xB5
btfss STATUS,C
goto Mavaleur6
bsf PORTC,2
bsf PORTC,3
goto Start1

Mavaleur6: ;On est inférieur à 4.8V donc on détecte le défaut « ILL »
movf result,w
sublw 0xF5
btfss STATUS,C
goto Mavaleur7
bsf PORTC,2
bsf PORTC,4
goto Start1

Mavaleur7: ;On est inférieur à 5V donc on détecte le défaut « SCBAT 
movf result,w
sublw 0xFF ;On soustrait 0xFF à « result »
btfss STATUS,C
goto Start
bsf PORTC,2
bsf PORTC,6
goto Start1

;detection des defauts pour la temperature
Start1:

bsf STATUS,RP0
clrf TRISB
movlw 0x10
movwf ADCON1
bcf STATUS,RP0

bcf STATUS,RP0
bsf STATUS,RP1
movlw b'00000010'
movwf ANSEL
bcf STATUS,RP0
bcf STATUS,RP1
movlw 0x05
movwf ADCON0

MainLoop1:
nop
nop
nop
nop
nop

bsf ADCON0,GO
btfss ADCON0,GO
goto $-1
movf ADRESH,w
movwf result1

Mavaleur8:
movf result1,w
sublw 0x0A
btfss STATUS,C
goto Mavaleur9
bsf PORTC,0
bsf PORTC,5
goto Start2
;
Mavaleur9:

movf result1,w
sublw 0x5C
btfss STATUS,C
goto Mavaleur10
bsf PORTC,0
bsf PORTC,4
goto Start2

Mavaleur10:
movf result1,w
sublw 0x70
btfss STATUS,C
goto Mavaleur11
bsf PORTB,4
goto Start2

Mavaleur11:
movf result1,w
sublw 0xA1
btfss STATUS,C
goto Mavaleur12
bsf PORTC,0
bsf PORTC,4
goto Start2

Mavaleur12:
movf result1,w
sublw 0xB5
btfss STATUS,C
goto Mavaleur13
bsf PORTC,0
bsf PORTC,3
goto Start2

Mavaleur13:
movf result1,w
sublw 0xF5
goto Mavaleur14
bsf PORTC,0
bsf PORTC,4
goto Start2

Mavaleur14:
movf result1,w
sublw 0xFF
goto Start1
bsf PORTC,0
bsf PORTC,6
goto Start2


;signal batterie
Start2:


clrf TRISB
bsf STATUS,RP0
bcf TRISB,7
bcf STATUS,RP0
movlw 0x10
movwf ADCON1
bcf STATUS,RP0
bsf STATUS,RP1
movlw b'00000100'
movwf ANSEL
bcf STATUS,RP0
bcf STATUS,RP1
movlw b'00001001'
movwf ADCON0

MainLoop2:
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
bsf PORTB,7
bsf ADCON0,GO
btfss ADCON0,GO
goto $-1
movf ADRESH,w
movwf result2

Mavaleur15:
movf result2,w
sublw 0xAD
btfss STATUS,C
bcf PORTB,7
goto Start2

goto OndelayLoop

; movlw D'255'
movwf Delay1
movlw D'255'
movwf Delay2

OndelayLoop:
decfsz Delay1,f
goto OndelayLoop
goto OndelayLoop


bcf PORTC,0
OffDelayLoop:
decfsz Delay1,f
goto OffDelayLoop
decfsz Delay2,f
goto OffDelayLoop
goto MainLoop2
goto Start
.
end
0
cs_patatalo Messages postés 1466 Date d'inscription vendredi 2 janvier 2004 Statut Modérateur Dernière intervention 14 février 2014 2
16 juin 2010 à 19:40
salut,


essai peut-être de mettre un goto à la fin de ta fonction, si jamais ton compilo aligne les fonction, il y a peut-être une instruction qui est executée sans que tu le sache.

@++
0
Rejoignez-nous