Programme ASM simple qui ne marche pas
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

Programme ASM simple qui ne marche pas



  1. #1
    inoxxam

    Programme ASM simple qui ne marche pas


    ------

    Bonjour,
    j'ai maintenant un peu d'expérience avec les PICs, que jusqu'ici j'ai toujours codé en C, et maintenant je me suis mis à l'assembleur. J'ai donc suivi les cours de Bigonoff ainsi que ses petits exerces. Afin de mettre ca en pratique j'ai décider de faire mon premier projet en assembleur à base d'un PIC16F876. Ce programme est à priori simple pour l'instant: il ne contient que les initialisations, une boucle principale quasiment vide, et une boucle infinie dans l'interruption.

    Code:
    ;*****************************************************************************
    ;                                                                            *
    ;                          Système d'ambiance à LEDs                         *
    ;                                                                            *
    ;*****************************************************************************
    ;  Codeur: NonoxX		     												 *
    ;  Création du projet le: 16/03/2010                                         *
    ;  Date de dernière modification: 16/03/2010                                 *
    ;  Numéro de version: 0.1 alpha												 *
    ;*****************************************************************************
    ;  TODO List :                                                               *
    ;     - Tout                                                                 *
    ;*****************************************************************************
    ;  Notes:                                                                    *
    ;                                                                            *
    ;                                                                            *
    ;*****************************************************************************
    
    	LIST p=16F876					; Choix du composant (PIC16F876)
    	#include <p16F876.inc>			; Inclusion du fichier correspondant
    
    	__CONFIG	_CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_ON & _HS_OSC 
    
    ;*****************************************************************************
    ;                           ASSIGNATIONS SYSTEME                             *
    ;*****************************************************************************
    ; REGISTRE OPTION_REG (configuration)
    ; -----------------------------------
    OPTIONVAL	EQU	B'01000111'
    			; RBPU     b7 : 1= Résistance rappel +5V hors service
    			; INTEDG   b6 : 1= Interrupt sur flanc montant de RB0
    			;               0= Interrupt sur flanc descend. de RB0
    			; TOCS      b5 : 1= source clock = transition sur RA4
    			;                0= horloge interne
    			; TOSE      b4 : 1= Sélection flanc montant RA4(si B5=1)
    			;                0= Sélection flanc descendant RA4
    			; PSA       b3 : 1= Assignation prédiviseur sur Watchdog
    			;                0= Assignation prédiviseur sur Tmr0
    			; PS2/PS0   b2/b0 valeur du prédiviseur
                ;           000 =  1/1 (watchdog) ou 1/2 (tmr0)
    			;           001 =  1/2               1/4
    			;           010 =  1/4		     1/8
    			;           011 =  1/8		     1/16
    			;           100 =  1/16		     1/32
    			;           101 =  1/32		     1/64
    			;           110 =  1/64		     1/128
    			;           111 =  1/128	     1/256
    
    
    ; REGISTRE INTCON (contrôle interruptions standard)
    ; -------------------------------------------------
    INTCONVAL	EQU	B'00010000'
    			; GIE       b7 : masque autorisation générale interrupt
                            ;                ne pas mettre ce bit à 1 ici
                            ;                sera mis en temps utile
    			; PEIE      b6 : masque autorisation générale périphériques
    			; T0IE      b5 : masque interruption tmr0
    			; INTE      b4 : masque interuption RB0/Int
    			; RBIE      b3 : masque interruption RB4/RB7
    			; T0IF      b2 : flag tmr0
    			; INTF      b1 : flag RB0/Int
    			; RBIF      b0 : flag interruption RB4/RB7
    
    ; REGISTRE PIE1 (contrôle interruptions périphériques)
    ; ----------------------------------------------------
    PIE1VAL		EQU	B'00000000'
    			; PSPIE     b7 : Toujours 0 sur PIC 16F786
    			; ADIE      b6 : masque interrupt convertisseur A/D
    			; RCIE      b5 : masque interrupt réception USART
    			; TXIE      b4 : masque interrupt transmission USART
    			; SSPIE     b3 : masque interrupt port série synchrone
    			; CCP1IE    b2 : masque interrupt CCP1
    			; TMR2IE    b1 : masque interrupt TMR2 = PR2
    			; TMR1IE    b0 : masque interrupt débordement tmr1
    
    ; REGISTRE PIE2 (contrôle interruptions particulières)
    ; ----------------------------------------------------
    PIE2VAL		EQU	B'00000000'
    			; UNUSED    b7 : inutilisé, laisser à 0
    			; RESERVED  b6 : réservé, laisser à 0
    			; UNUSED    b5 : inutilisé, laisser à 0
    			; EEIE      b4 : masque interrupt écriture EEPROM
    			; BCLIE     b3 : masque interrupt collision bus
    			; UNUSED    b2 : inutilisé, laisser à 0
    			; UNUSED    b1 : inutilisé, laisser à 0
    			; CCP2IE    b0 : masque interrupt CCP2
    
    ; REGISTRE ADCON1 (ANALOGIQUE/DIGITAL)
    ; ------------------------------------
    ADCON1VAL	EQU	B'00000010' ; PORTA en mode analog
    			; ADFM		b7 : Justifier à droite (1) ou gauche (0)
    			; UNUSED    b6
    			; UNUSED    b5
    			; UNUSED    b4
    			; PCFGx     b3..b0 : Configuration des ports (Analog / Digital) (ici AN0..AN4 en analog)
    
    ; DIRECTION DES PORTS I/O
    ; -----------------------
    
    DIRPORTA	EQU	B'00111111'	; Direction PORTA (1=entrée)
    DIRPORTB	EQU	B'11111011'	; Direction PORTB
    DIRPORTC	EQU	B'11111111'	; Direction PORTC
    
    
    ;*****************************************************************************
    ;                           ASSIGNATIONS PROGRAMME                           *
    ;*****************************************************************************
    ; Pour le moment aucune
    ;----------------------
    
    ;*****************************************************************************
    ;                                   DEFINES                                  *
    ;*****************************************************************************
    ; Boutons
    ;--------
    #define BOUTONAM PORTB, 0			; Bouton Auto/Manu
    #define BOUTONPROG PORTB, 1			; Bouton Programmation/fonctionnement
    
    ; Voyants
    ;--------
    #define LEDAUTOMANU PORTB, 2		; Voyant mode
    
    ;*****************************************************************************
    ;                                    MACROS                                  *
    ;*****************************************************************************
    ; Changement de banque
    ;---------------------
    BANK0 macro					; Passage en banque 0
    	bcf STATUS, RP0
    	bcf STATUS, RP1
    	endm
    
    BANK1 macro					; Passage en banque 1
    	bsf STATUS, RP0
    	bcf STATUS, RP1
    	endm
    
    BANK2 macro					; Passage en banque 2
    	bcf STATUS, RP0
    	bsf STATUS, RP1
    	endm
    
    BANK3 macro					; Passage en banque 3
    	bsf STATUS, RP0
    	bsf STATUS, RP1
    	endm
    	
    
    ;*******************************************************************************
    ;                               VARIABLES BANQUE 0                             *
    ;*******************************************************************************
    	CBLOCK 0x20
    	tempo_rebond : 1		; Tempo rebond
    	endc
    
    ;*******************************************************************************
    ;                              VARIABLES COMMUNES                              *
    ;*******************************************************************************
    	CBLOCK 0x70
    	STATUS_temp : 1
    	W_temp : 1
    	FSR_temp : 1
    	PCLATH_temp : 1
    	flags1 : 1				; Flags:
    							; b0: Mode: manu(1) auto (0)
    							; b1: Tempo rebond: rebond en cours (1) pas de rebond (0)
    	endc
    
    ;*******************************************************************************
    ;                              DEMARRAGE SUR RESET                             *
    ;*******************************************************************************
    	ORG 0x000
    	goto init
    
    ;///////////////////////////////////////////////////////////////////////////////
    
    ;			            		  INTERRUPTIONS
    
    ;///////////////////////////////////////////////////////////////////////////////
    	ORG 0x004
    	bcf OPTION_REG, GIE
    ; Sauvegarder l'etat du PIC
    ;--------------------------
    	movwf W_temp					; Sauvegarde de W
    	swapf STATUS, w					; Swap STATUS résultat dans W
    	movwf STATUS_temp				; Sauvegarde du status "Swappé"
    	movf FSR , w					; Chargement de FSR
    	movwf FSR_temp					; Sauvegarde de FSR
    	movf PCLATH , w					; Chargement de PCLATH
    	movwf PCLATH_temp				; Sauvegarde de PCLATH
    	clrf PCLATH						; Les interruptions sont en page 0
    	BANK0							; On se met en banque 0
    
    test
    	bsf LEDAUTOMANU
    	bcf INTCON, INTF
    goto test
    
    ; Restaurer l'etat du PIC
    ;------------------------
    restoreint
    	movf FSR_temp, w				; Chargement de FSR_temp
    	movwf FSR						; On redonne à FSR sa valeur
    	movf PCLATH_temp, w				; Chargement de PCLATH_temp
    	movwf PCLATH					; On redonne à PCLATH sa valeur
    	swapf STATUS_temp, w			; Chargement de STATUS_temp et remise dans l'ordre
    	movwf STATUS 					; On redonne sa valeur à STATUS
    	swapf W_temp, f					; Swap de w_temp, valeur dans lui-même
    	swapf W_temp, w					; Re-swap de w_temp, valeur dans w sans affecter status
    	retfie							; Retour d'interruption
    
    ;///////////////////////////////////////////////////////////////////////////////
    
    ;			            	        PROGRAMME
    
    ;///////////////////////////////////////////////////////////////////////////////
    ;*******************************************************************************
    ;                                 INITIALISATIONS                              *
    ;*******************************************************************************
    init
    ; Initialisation des ports
    ;-------------------------
    	BANK0							; Passage en banque 0
    	clrf PORTA						; Remise à zéro du port A
    	clrf PORTB						; Remise à zéro du port B
    	clrf PORTC						; Remise à zéro du port C
    	BANK1							; Passage en banque 1
    	movlw ADCON1VAL					; Chargement du masque d'ADCON1
    	movwf ADCON1					; Chargement de ADCON1
    	movlw DIRPORTA					; Direction port A
    	movwf TRISA						; Chargement dans TRISA
    	movlw DIRPORTB					; Direction port B
    	movwf TRISB						; Chargement dans TRISB
    	movlw DIRPORTC					; Direction port C
    	movwf TRISC						; Chargement dans TRISC
    
    ; Initialisation du registre d'options
    ;-------------------------------------
    	movlw OPTIONVAL					; Chargement du masque d'OPTION_REG
    	movwf OPTION_REG				; Chargement de OPTION_REG
    
    ; Initialisation des registres d'interruption
    ;--------------------------------------------
    	movlw INTCONVAL					; Chargement du masque de INTCON
    	movwf INTCON					; Chargement de INTCON
    	movlw PIE1VAL					; Chargement du masque de PIE1
    	movwf PIE1						; Chargement de PIE1
    	movlw PIE2VAL					; Chargement du masque de PIE2
    	movwf PIE2						; Chargement de PIE2
    
    ; Effacement de la RAM banque 0
    ;------------------------------
    	BANK0				; Passage banque 0
    	movlw	0x20		; initialisation pointeur
    	movwf	FSR			; d'adressage indirect
    init1
    	clrf	INDF		; effacer ram
    	incf	FSR,f		; pointer sur suivant
    	btfss	FSR,7		; tester si fin zone atteinte (>7F)
    	goto	init1		; non, boucler
    
    ; Initialisation des interruptions
    ;----------------------------------
    	BANK1					; Passage banque 1
    	bsf OPTION_REG , GIE	; Autorise interruptions générales
    
    	bcf LEDAUTOMANU			; Eteindre la LED
    
    auto
    	clrwdt
    
    	goto auto
    
    	END
    Si je supprime la ligne " bsf OPTION_REG , GIE ; Autorise interruptions générales" ( presque tout à la fin ), les PINs du port B en entrée sont à +5V, mais si je remets cette ligne, les entrées en question sont dans le vide, et si je mets dans la boucle auto "bsf LDAUTOMANU", la LED en question ne s'allume pas.

    J'imagine que mon problème est basique, mais je n'arrive pas a voir ce qui cloche.

    Si quelqu'un voit ce qu'il y a, merci d'avance!

    -----

  2. #2
    Qristoff
    Animateur Électronique

    Re : Programme ASM simple qui ne marche pas

    Salut
    t'as pas l'impression de boucler là !
    Code:
    test
    	bsf LEDAUTOMANU
    	bcf INTCON, INTF
    goto test
    Tout existe, il suffit de le trouver...!

  3. #3
    inoxxam

    Re : Programme ASM simple qui ne marche pas

    Si c'était fait exprès pour voir si ca marche, mais ca ne rentre même pas dedans, en toute logique, si ce programme est bon, il ne devrait rien faire, puis lors qu'un appui sur le bouton, aller se coincer dans la boucle d'interrupt et maintenir indéfiniment la LED allumée

  4. #4
    Qristoff
    Animateur Électronique

    Re : Programme ASM simple qui ne marche pas

    T'as debuggé en pas à pas avec Mplab ? pour savoir exactement où passe ton pointeur ?
    Tout existe, il suffit de le trouver...!

  5. A voir en vidéo sur Futura
  6. #5
    inoxxam

    Re : Programme ASM simple qui ne marche pas

    Oui, mon pointeur passe les étapes d'initialisation et va s'échouer dans la boucle de fin (etiquette auto), comme prévu.

  7. #6
    Qristoff
    Animateur Électronique

    Re : Programme ASM simple qui ne marche pas

    je trouve ta programmation un peu "Warrior", essaie de mettre dans ton programme des signes qui peuvent être détectés de l'extérieur plutôt que des boucles internes sans effets et dificillement débugable de l'extérieur !
    Tout existe, il suffit de le trouver...!

  8. #7
    inoxxam

    Re : Programme ASM simple qui ne marche pas

    J'ai un peu modifié ca pour un truc plus soft, à l'interruption sur RB0 ca change l'état de la LED, en théorie. Parce que à la simulation MPLAB SIM, quand je stimule le RB0, ca ne saute pas en 0x04.

  9. #8
    inoxxam

    Re : Programme ASM simple qui ne marche pas

    Salut,
    j'ai trouvé mon erreur. C'était tout con! En fait lorsque j'active les interruptions générales à la fin de l'initialisation, je fais "bsf OPTION_REG, GIE", mais en fait le bit GIE se trouve en INTCON!

    Voici mon programme maintenant:
    Code:
    ;*****************************************************************************
    ;                                                                            *
    ;                          Système d'ambiance à LEDs                         *
    ;                                                                            *
    ;*****************************************************************************
    ;  Codeur: NonoxX		     												 *
    ;  Création du projet le: 16/03/2010                                         *
    ;  Date de dernière modification: 16/03/2010                                 *
    ;  Numéro de version: 0.1 alpha												 *
    ;*****************************************************************************
    ;  TODO List :                                                               *
    ;     - Tout                                                                 *
    ;*****************************************************************************
    ;  Notes:                                                                    *
    ;                                                                            *
    ;                                                                            *
    ;*****************************************************************************
    
    	LIST p=16F876					; Choix du composant (PIC16F876)
    	#include <p16F876.inc>			; Inclusion du fichier correspondant
    
    	__CONFIG	_CP_OFF & _DEBUG_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_OFF & _WDT_ON & _HS_OSC 
    
    ;*****************************************************************************
    ;                           ASSIGNATIONS SYSTEME                             *
    ;*****************************************************************************
    ; REGISTRE OPTION_REG (configuration)
    ; -----------------------------------
    OPTIONVAL	EQU	B'01000111'
    			; RBPU     b7 : 1= Résistance rappel +5V hors service
    			; INTEDG   b6 : 1= Interrupt sur flanc montant de RB0
    			;               0= Interrupt sur flanc descend. de RB0
    			; TOCS      b5 : 1= source clock = transition sur RA4
    			;                0= horloge interne
    			; TOSE      b4 : 1= Sélection flanc montant RA4(si B5=1)
    			;                0= Sélection flanc descendant RA4
    			; PSA       b3 : 1= Assignation prédiviseur sur Watchdog
    			;                0= Assignation prédiviseur sur Tmr0
    			; PS2/PS0   b2/b0 valeur du prédiviseur
                ;           000 =  1/1 (watchdog) ou 1/2 (tmr0)
    			;           001 =  1/2               1/4
    			;           010 =  1/4		     1/8
    			;           011 =  1/8		     1/16
    			;           100 =  1/16		     1/32
    			;           101 =  1/32		     1/64
    			;           110 =  1/64		     1/128
    			;           111 =  1/128	     1/256
    
    
    ; REGISTRE INTCON (contrôle interruptions standard)
    ; -------------------------------------------------
    INTCONVAL	EQU	B'00010000'
    			; GIE       b7 : masque autorisation générale interrupt
                            ;                ne pas mettre ce bit à 1 ici
                            ;                sera mis en temps utile
    			; PEIE      b6 : masque autorisation générale périphériques
    			; T0IE      b5 : masque interruption tmr0
    			; INTE      b4 : masque interuption RB0/Int
    			; RBIE      b3 : masque interruption RB4/RB7
    			; T0IF      b2 : flag tmr0
    			; INTF      b1 : flag RB0/Int
    			; RBIF      b0 : flag interruption RB4/RB7
    
    ; REGISTRE PIE1 (contrôle interruptions périphériques)
    ; ----------------------------------------------------
    PIE1VAL		EQU	B'00000000'
    			; PSPIE     b7 : Toujours 0 sur PIC 16F786
    			; ADIE      b6 : masque interrupt convertisseur A/D
    			; RCIE      b5 : masque interrupt réception USART
    			; TXIE      b4 : masque interrupt transmission USART
    			; SSPIE     b3 : masque interrupt port série synchrone
    			; CCP1IE    b2 : masque interrupt CCP1
    			; TMR2IE    b1 : masque interrupt TMR2 = PR2
    			; TMR1IE    b0 : masque interrupt débordement tmr1
    
    ; REGISTRE PIE2 (contrôle interruptions particulières)
    ; ----------------------------------------------------
    PIE2VAL		EQU	B'00000000'
    			; UNUSED    b7 : inutilisé, laisser à 0
    			; RESERVED  b6 : réservé, laisser à 0
    			; UNUSED    b5 : inutilisé, laisser à 0
    			; EEIE      b4 : masque interrupt écriture EEPROM
    			; BCLIE     b3 : masque interrupt collision bus
    			; UNUSED    b2 : inutilisé, laisser à 0
    			; UNUSED    b1 : inutilisé, laisser à 0
    			; CCP2IE    b0 : masque interrupt CCP2
    
    ; REGISTRE ADCON1 (ANALOGIQUE/DIGITAL)
    ; ------------------------------------
    ADCON1VAL	EQU	B'00000010' ; PORTA en mode analog
    			; ADFM		b7 : Justifier à droite (1) ou gauche (0)
    			; UNUSED    b6
    			; UNUSED    b5
    			; UNUSED    b4
    			; PCFGx     b3..b0 : Configuration des ports (Analog / Digital) (ici AN0..AN4 en analog)
    
    ; DIRECTION DES PORTS I/O
    ; -----------------------
    
    DIRPORTA	EQU	B'00111111'	; Direction PORTA (1=entrée)
    DIRPORTB	EQU	B'11111011'	; Direction PORTB
    DIRPORTC	EQU	B'11111111'	; Direction PORTC
    
    
    ;*****************************************************************************
    ;                           ASSIGNATIONS PROGRAMME                           *
    ;*****************************************************************************
    ; Pour le moment aucune
    ;----------------------
    
    ;*****************************************************************************
    ;                                   DEFINES                                  *
    ;*****************************************************************************
    ; Boutons
    ;--------
    #define BOUTONAM PORTB, 0			; Bouton Auto/Manu
    #define BOUTONPROG PORTB, 1			; Bouton Programmation/fonctionnement
    
    ; Voyants
    ;--------
    #define LEDAUTOMANU PORTB, 2		; Voyant mode
    
    ;*****************************************************************************
    ;                                    MACROS                                  *
    ;*****************************************************************************
    ; Changement de banque
    ;---------------------
    BANK0 macro					; Passage en banque 0
    	bcf STATUS, RP0
    	bcf STATUS, RP1
    	endm
    
    BANK1 macro					; Passage en banque 1
    	bsf STATUS, RP0
    	bcf STATUS, RP1
    	endm
    
    BANK2 macro					; Passage en banque 2
    	bcf STATUS, RP0
    	bsf STATUS, RP1
    	endm
    
    BANK3 macro					; Passage en banque 3
    	bsf STATUS, RP0
    	bsf STATUS, RP1
    	endm
    	
    
    ;*******************************************************************************
    ;                               VARIABLES BANQUE 0                             *
    ;*******************************************************************************
    	CBLOCK 0x20
    	tempo_rebond : 1		; Tempo rebond
    	endc
    
    ;*******************************************************************************
    ;                              VARIABLES COMMUNES                              *
    ;*******************************************************************************
    	CBLOCK 0x70
    	STATUS_temp : 1
    	W_temp : 1
    	FSR_temp : 1
    	PCLATH_temp : 1
    	flags1 : 1				; Flags:
    							; b0: Mode: manu(1) auto (0)
    							; b1: Tempo rebond: rebond en cours (1) pas de rebond (0)
    	endc
    
    ;*******************************************************************************
    ;                              DEMARRAGE SUR RESET                             *
    ;*******************************************************************************
    	ORG 0x000
    	goto init
    
    ;///////////////////////////////////////////////////////////////////////////////
    
    ;			            		  INTERRUPTIONS
    
    ;///////////////////////////////////////////////////////////////////////////////
    	ORG 0x004
    	bcf OPTION_REG, GIE
    ; Sauvegarder l'etat du PIC
    ;--------------------------
    	movwf W_temp					; Sauvegarde de W
    	swapf STATUS, w					; Swap STATUS résultat dans W
    	movwf STATUS_temp				; Sauvegarde du status "Swappé"
    	movf FSR , w					; Chargement de FSR
    	movwf FSR_temp					; Sauvegarde de FSR
    	movf PCLATH , w					; Chargement de PCLATH
    	movwf PCLATH_temp				; Sauvegarde de PCLATH
    	clrf PCLATH						; Les interruptions sont en page 0
    	BANK0							; On se met en banque 0
    
    	btfsc	INTCON,INTE				; tester si interrupt RB0 autorisée
    	btfss	INTCON,INTF				; oui, tester si interrupt RB0 en cours
    	goto 	restoreint				; non sauter au test suivant
    	call	intrb0					; oui, traiter interrupt RB0
    	bcf		INTCON,INTF				; effacer flag interupt RB0
    	goto	restoreint				; et fin d'interruption
    
    ; Restaurer l'etat du PIC
    ;------------------------
    restoreint
    	movf FSR_temp, w				; Chargement de FSR_temp
    	movwf FSR						; On redonne à FSR sa valeur
    	movf PCLATH_temp, w				; Chargement de PCLATH_temp
    	movwf PCLATH					; On redonne à PCLATH sa valeur
    	swapf STATUS_temp, w			; Chargement de STATUS_temp et remise dans l'ordre
    	movwf STATUS 					; On redonne sa valeur à STATUS
    	swapf W_temp, f					; Swap de w_temp, valeur dans lui-même
    	swapf W_temp, w					; Re-swap de w_temp, valeur dans w sans affecter status
    	retfie							; Retour d'interruption
    
    ;*******************************************************************************
    ;                              TRAITEMENT INTERRUPTION RB0                     *
    ;*******************************************************************************
    intrb0
    	movf PORTB, w					; Chargement de PORTB
    	xorlw B'00000100'				; Inversion du bit correspondant à la LED
    	movwf PORTB						; Modification du portb
    	return
    
    ;///////////////////////////////////////////////////////////////////////////////
    
    ;			            	        PROGRAMME
    
    ;///////////////////////////////////////////////////////////////////////////////
    ;*******************************************************************************
    ;                                 INITIALISATIONS                              *
    ;*******************************************************************************
    init
    ; Initialisation des ports
    ;-------------------------
    	BANK0							; Passage en banque 0
    	clrf PORTA						; Remise à zéro du port A
    	clrf PORTB						; Remise à zéro du port B
    	clrf PORTC						; Remise à zéro du port C
    	BANK1							; Passage en banque 1
    	movlw ADCON1VAL					; Chargement du masque d'ADCON1
    	movwf ADCON1					; Chargement de ADCON1
    	movlw DIRPORTA					; Direction port A
    	movwf TRISA						; Chargement dans TRISA
    	movlw DIRPORTB					; Direction port B
    	movwf TRISB						; Chargement dans TRISB
    	movlw DIRPORTC					; Direction port C
    	movwf TRISC						; Chargement dans TRISC
    
    ; Initialisation du registre d'options
    ;-------------------------------------
    	movlw OPTIONVAL					; Chargement du masque d'OPTION_REG
    	movwf OPTION_REG				; Chargement de OPTION_REG
    
    ; Initialisation des registres d'interruption
    ;--------------------------------------------
    	movlw INTCONVAL					; Chargement du masque de INTCON
    	movwf INTCON					; Chargement de INTCON
    	movlw PIE1VAL					; Chargement du masque de PIE1
    	movwf PIE1						; Chargement de PIE1
    	movlw PIE2VAL					; Chargement du masque de PIE2
    	movwf PIE2						; Chargement de PIE2
    
    ; Effacement de la RAM banque 0
    ;------------------------------
    	BANK0				; Passage banque 0
    	movlw	0x20		; initialisation pointeur
    	movwf	FSR			; d'adressage indirect
    init1
    	clrf	INDF		; effacer ram
    	incf	FSR,f		; pointer sur suivant
    	btfss	FSR,7		; tester si fin zone atteinte (>7F)
    	goto	init1		; non, boucler
    
    ; Initialisation des interruptions
    ;----------------------------------
    	BANK1					; Passage banque 1
    	bsf INTCON , GIE	; Autorise interruptions générales
    
    	bcf LEDAUTOMANU			; Eteindre la LED
    
    auto
    	clrwdt
    
    	goto auto
    
    	END
    Celà fonctionne à moitié maintenant :/
    Sur le simulateur MPLAB, ca marche au poil, mais sur ISIS, la LED s'allume à la première interruption, mais ne s'éteind pas à la seconde... Est-ce juste un bug ISIS?

  10. #9
    Qristoff
    Animateur Électronique

    Re : Programme ASM simple qui ne marche pas

    Est-ce juste un bug ISIS?
    seul la réalité pourra te le dire ! les simulateurs ont leurs limites....
    Tout existe, il suffit de le trouver...!

  11. #10
    inoxxam

    Re : Programme ASM simple qui ne marche pas

    Ok donc en gros il faudrait que je me fasse une petite plaquette d'essai. Je vais y songer!

Discussions similaires

  1. Convertir un programme en C en ASM
    Par zanzeoo dans le forum Électronique
    Réponses: 6
    Dernier message: 17/04/2012, 16h43
  2. programme de pwm sur pic 16f877 qui marche dans un sens
    Par invite0dc3f76c dans le forum Électronique
    Réponses: 1
    Dernier message: 15/02/2010, 04h20
  3. [PIC 16f886] Un simple code ne marche pas
    Par blinkseb dans le forum Électronique
    Réponses: 2
    Dernier message: 01/02/2009, 14h34
  4. Windows7 : quoi qui marche, quoi qui marche pas?
    Par archeos dans le forum Logiciel - Software - Open Source
    Réponses: 11
    Dernier message: 18/01/2009, 15h04
  5. tv qui marche pas et qui marche!!
    Par bobluc dans le forum Dépannage
    Réponses: 12
    Dernier message: 19/09/2006, 17h12
Découvrez nos comparatifs produits sur l'informatique et les technologies.