commande des switches en assembleur
Répondre à la discussion
Affichage des résultats 1 à 12 sur 12

commande des switches en assembleur



  1. #1
    invite54f06dd2

    commande des switches en assembleur


    ------

    Bonjour,
    je veux réaliser un GBF de signaux(rampe, sinusoidales, rectangulaires) à base du p16f84 avec langage assembleur, le programme fonctionne
    (chaque forme de signal dans un programme)
    mais, ce que je veux c'est que je commande à l'aide de 4 switches la sortie (ex: si SWx actif, on visualise à la sortie le signal y)

    -----

  2. #2
    pazcal

    Re : commande des switches en assembleur

    Et quelle est la qeustion?

  3. #3
    invite54f06dd2

    Re : commande des switches en assembleur

    Comment puis-je commandes les switches ?
    avec les instructions de test (bcf, bsf..) ou bien il y a une methode spécifique?

  4. #4
    gedonet

    Re : commande des switches en assembleur

    Citation Envoyé par jaoNET Voir le message
    Comment puis-je commandes les switches ?
    avec les instructions de test (bcf, bsf..) ou bien il y a une methode spécifique?
    Bonjour
    C'est le B.A BA de la programmation, tu utilises l'instructions BTFSC ou BTFSS selon si le switch activé vaut 1 ou 0. On teste le premier, si ce n'est pas lui on teste le second et ainsi de suite.
    Si les switchs sont sur RB4-7 tu peux utiliser les interuptions pour lire uniquement sur un changement d'etat des I/O.

    Il manque une information à ton probleme, c'est est que le switch doit être à 1 (ou à 0) pour agir sur ta routine ou doit il simplement changer d'etat. Dans le premier cas les tests BTFSC en cascades suffisent, dans le second cas il faut lire et enregistrer l'etat des switch au debut puis dans l'interruption comparer la nouvelle lecture avec la precedente, c'est un peu plus delicat, mais rien d'impossible.
    Gilles

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

    Re : commande des switches en assembleur

    Citation Envoyé par gedonet Voir le message
    Bonjour
    C'est le B.A BA de la programmation, tu utilises l'instructions BTFSC ou BTFSS selon si le switch activé vaut 1 ou 0. On teste le premier, si ce n'est pas lui on teste le second et ainsi de suite.
    Si les switchs sont sur RB4-7 tu peux utiliser les interuptions pour lire uniquement sur un changement d'etat des I/O.

    Il manque une information à ton probleme, c'est est que le switch doit être à 1 (ou à 0) pour agir sur ta routine ou doit il simplement changer d'etat. Dans le premier cas les tests BTFSC en cascades suffisent, dans le second cas il faut lire et enregistrer l'etat des switch au debut puis dans l'interruption comparer la nouvelle lecture avec la precedente, c'est un peu plus delicat, mais rien d'impossible.
    Gilles
    Bonsoir
    merci Gilles pour votre réponse

  7. #6
    invite54f06dd2

    Re : commande des switches en assembleur

    bonjour

    lorsque j'essaie de simuler le programme sous ISIS
    je trouve ces erreurs

    quelqu'un peut m'expliquer sont dus à quoi ces erreurs?

  8. #7
    invite54f06dd2

    Re : commande des switches en assembleur


  9. #8
    invite54f06dd2

    Re : commande des switches en assembleur

    le programme d'une seule fonction travaille bien
    ///////////////////////////

    Code:
    LIST      p=16F876            ; Définition de processeur
    	#include <p16F876.inc>        ; fichier include
    
    	__CONFIG   _CP_OFF &  _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC 
    	
    
    
    BANK0	macro				; passer en banque0
    		bcf	STATUS,RP0
    		bcf	STATUS,RP1
    	endm
    
    BANK1	macro				; passer en banque1
    		bsf	STATUS,RP0
    		bcf	STATUS,RP1
    	endm
    
    ;Variables
    	cblock	0x20
    FREQ_H
    FREQ_M
    FREQ_L
    
    ACC_H
    ACC_M
    ACC_L
    
    	endc
    
        ; Fréquence de sortie : ici 20KHZ : 0x16872B * 0.01354651 = 19999.99 Hz
        #define STARTAT_H       0x16
        #define STARTAT_M       0x87
        #define STARTAT_L       0x2B
    
    ; J'ai fais un test à 20KHz en prenant un nombre de cycles à 22
    ; f out = freq_h/freq_m/freq_l * (f quartz/4 /nb cycles NCO / 2^nb bits accumulateur)
    ; nb cycles = 22
    ; f quartz = 20 Mhz
    ; nb bits accumulateur = 24 soit 2^24 = 16 777 216
    ; donc f out = freq_h/freq_m/freq_l * 0.01354651
    
    	org 0x0000
    start
    
    	BANK1
    	movlw			B'00000000'			; Mise en sortie du port B
    	movwf			TRISC
    	BANK0
    	
    ;Initialisation
    	clrf		ACC_H
    	clrf		ACC_M
    	clrf		ACC_L
    	clrf		PORTC
    
    	movlw           STARTAT_H
    	movwf           FREQ_H
    	movlw           STARTAT_M
    	movwf           FREQ_M
    	movlw           STARTAT_L
    	movwf           FREQ_L
    
    NCOLoop
    	; addition de la valeur de la fréquence désirée
            ; avec l'accumulateur de phase le tout sur 24 bits
    	movf            FREQ_L,w                ; 1
    	addwf           ACC_L,f                 ; 1
    	
    	movf            FREQ_M,w                ; 1
    	btfsc           STATUS,C                ; 1 / 2
    	incfsz          FREQ_M,w                ; 1 / 2
    	addwf           ACC_M,f                 ; 1
    
    	movf            FREQ_H,w                ; 1
    	btfsc           STATUS,C                ; 1 / 2
    	incfsz          FREQ_H,w                ; 1 / 2
    	addwf           ACC_H,f                 ; 1
                    
    LookupSine
    	movf            ACC_H,w                 ; 1
    	call            SINE_TABLE              ; 2 + 5 dans la sous routine
                                                
    Output
    	movwf           PORTC                   ; 1 sortie de la valeur lue sur le port C
    
    	goto 		NCOLoop			; 2
    
    
    
    SINE_TABLE:
        ; les deux lignes suivantes permettent de sélectionner un bloc 
        ; de 256 octects. Ici B1 et B0 de PCLATH à 11 donc on sélectionne
        ; le troisième bloc de mémoire toujours dans la bank 0
        ; si modif du bloc de mémoire modifier le param ORG ci-dessus
        ; _X_FD car les trois instructions suivantes rajoutent 3 au PC
    	bsf             PCLATH,1                                ; 1
    	bsf             PCLATH,0                                ; 1
    	addwf           PCL,f                                   ; 1
        ; each dt is internaly a retlw so 2 cycles              ; 2
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    
    end
    
    
    
    //////////////////////////
    celui-ci je voulais le créer pour 2 fonctions
    mais il ne fonctionne pas
    
    
    LIST      p=16F876            ; Définition de processeur
    	#include <p16F876.inc>        ; fichier include
    
    	__CONFIG   _CP_OFF &  _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC 
    	
    
    
    BANK0	macro				; passer en banque0
    		bcf	STATUS,RP0
    		bcf	STATUS,RP1
    	endm
    
    BANK1	macro				; passer en banque1
    		bsf	STATUS,RP0
    		bcf	STATUS,RP1
    	endm
    
    ;Variables
    
    	cblock	0x20
    FREQ_H
    FREQ_M
    FREQ_L
    
    ACC_H
    ACC_M
    ACC_L
    
    	endc
    
        ; Fréquence de sortie : ici 20KHZ : 0x16872B * 0.01354651 = 19999.99 Hz
        #define STARTAT_H       0x16
        #define STARTAT_M       0x87
        #define STARTAT_L       0x2B
    
    ; J'ai fais un test à 20KHz en prenant un nombre de cycles à 22
    ; f out = freq_h/freq_m/freq_l * (f quartz/4 /nb cycles NCO / 2^nb bits accumulateur)
    ; nb cycles = 22
    ; f quartz = 20 Mhz
    ; nb bits accumulateur = 24 soit 2^24 = 16 777 216
    ; donc f out = freq_h/freq_m/freq_l * 0.01354651
    
    	org 0x0000
    start
    
    	BANK1
        
    	movlw			B'00000000'			; Mise en sortie du port B
    	movwf			TRISC
    	BANK0
    	
    ;Initialisation
    	clrf		ACC_H
    	clrf		ACC_M
    	clrf		ACC_L
    	clrf		PORTC
    
    	movlw           STARTAT_H
    	movwf           FREQ_H
    	movlw           STARTAT_M
    	movwf           FREQ_M
    	movlw           STARTAT_L
    	movwf           FREQ_L
    
    NCOLoop
    	; addition de la valeur de la fréquence désirée
            ; avec l'accumulateur de phase le tout sur 24 bits
    	movf            FREQ_L,w                ; 1
    	addwf           ACC_L,f                 ; 1
    	
    	movf            FREQ_M,w                ; 1
    	btfsc           STATUS,C                ; 1 / 2
    	incfsz          FREQ_M,w                ; 1 / 2
    	addwf           ACC_M,f                 ; 1
    
    	movf            FREQ_H,w                ; 1
    	btfsc           STATUS,C                ; 1 / 2
    	incfsz          FREQ_H,w                ; 1 / 2
    	addwf           ACC_H,f                 ; 1
                    
    LookupSine
    
    	movf            ACC_H,w                 ; 1
    	btfss           PORTA,00000001
    	btfss           PORTA,00000010
        goto            SINE_TABLE
    	goto            TRI_TABLE              ; 2 + 5 dans la sous routine
                                                
    Output
    	movwf           PORTC                   ; 1 sortie de la valeur lue sur le port C
       
    	goto 		NCOLoop			; 2
    
    
    
    SINE_TABLE:
        ; les deux lignes suivantes permettent de sélectionner un bloc 
        ; de 256 octects. Ici B1 et B0 de PCLATH à 11 donc on sélectionne
        ; le troisième bloc de mémoire toujours dans la bank 0
        ; si modif du bloc de mémoire modifier le param ORG ci-dessus
        ; _X_FD car les trois instructions suivantes rajoutent 3 au PC
    	bsf             PCLATH,1                                ; 1
    	bsf             PCLATH,0                                ; 1
    	addwf           PCL,f                                   ; 1
        ; each dt is internaly a retlw so 2 cycles              ; 2
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00   
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    dt         	0xff,0xff,0xff,0xff,0xff,0xff,0xff,0xff
    
    TRI_TABLE
     
    	bsf             PCLATH,1                                ; 1
    	bsf             PCLATH,0                                ; 1
    	addwf           PCL,f                                   ; 1
        ; each dt is internaly a retlw so 2 cycles              ; 2
    dt              0x80,0x83,0x86,0x89,0x8c,0x8f,0x92,0x95
    dt              0x98,0x9c,0x9f,0xa2,0xa5,0xa8,0xab,0xae
    dt              0xb0,0xb3,0xb6,0xb9,0xbc,0xbf,0xc1,0xc4
    dt              0xc7,0xc9,0xcc,0xce,0xd1,0xd3,0xd5,0xd8
    dt              0xda,0xdc,0xde,0xe0,0xe2,0xe4,0xe6,0xe8
    dt              0xea,0xec,0xed,0xef,0xf0,0xf2,0xf3,0xf5
    dt              0xf6,0xf7,0xf8,0xf9,0xfa,0xfb,0xfc,0xfc
    dt              0xfd,0xfe,0xfe,0xff,0xff,0xff,0xff,0xff
    dt              0xff,0xff,0xff,0xff,0xff,0xff,0xfe,0xfe
    dt              0xfd,0xfc,0xfc,0xfb,0xfa,0xf9,0xf8,0xf7
    dt              0xf6,0xf5,0xf3,0xf2,0xf0,0xef,0xed,0xec
    dt              0xea,0xe8,0xe6,0xe4,0xe2,0xe0,0xde,0xdc
    dt              0xda,0xd8,0xd5,0xd3,0xd1,0xce,0xcc,0xc9
    dt              0xc7,0xc4,0xc1,0xbf,0xbc,0xb9,0xb6,0xb3
    dt              0xb0,0xae,0xab,0xa8,0xa5,0xa2,0x9f,0x9c
    dt              0x98,0x95,0x92,0x8f,0x8c,0x89,0x86,0x83
    dt              0x80,0x7c,0x79,0x76,0x73,0x70,0x6d,0x6a
    dt              0x67,0x63,0x60,0x5d,0x5a,0x57,0x54,0x51
    dt              0x4f,0x4c,0x49,0x46,0x43,0x40,0x3e,0x3b
    dt              0x38,0x36,0x33,0x31,0x2e,0x2c,0x2a,0x27
    dt              0x25,0x23,0x21,0x1f,0x1d,0x1b,0x19,0x17
    dt              0x15,0x13,0x12,0x10,0x0f,0x0d,0x0c,0x0a
    dt              0x09,0x08,0x07,0x06,0x05,0x04,0x03,0x03
    dt              0x02,0x01,0x01,0x00,0x00,0x00,0x00,0x00
    dt              0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x01
    dt              0x02,0x03,0x03,0x04,0x05,0x06,0x07,0x08
    dt              0x09,0x0a,0x0c,0x0d,0x0f,0x10,0x12,0x13
    dt              0x15,0x17,0x19,0x1b,0x1d,0x1f,0x21,0x23
    dt              0x25,0x27,0x2a,0x2c,0x2e,0x31,0x33,0x36
    dt              0x38,0x3b,0x3e,0x40,0x43,0x46,0x49,0x4c
    dt              0x4f,0x51,0x54,0x57,0x5a,0x5d,0x60,0x63
    dt              0x67,0x6a,0x6d,0x70,0x73,0x76,0x79,0x7c
    
    end
    Dernière modification par gienas ; 12/06/2011 à 11h13. Motif: Ajouté les balises code obligatoires pour les programmes

  10. #9
    gedonet

    Re : commande des switches en assembleur

    Bonjour
    Fais la compilation avec Mplab, pour moi cela fonctionne, et ensuite tu utilises le HEX dans ISIS (bouton droit sur le pic, "Edit Properties" et tu donnes le chemin du HEX sur la ligne "Program File:").
    Gilles

  11. #10
    invite54f06dd2

    Re : commande des switches en assembleur

    ^^
    merci pouvotre reponse
    tu as essayé les 2 codes dans ISIS ?
    car le 2eme ne marche pas

  12. #11
    invite54f06dd2

    Re : commande des switches en assembleur

    je parle de ce programme

    Code:
    LIST p=16F876 ; Définition de processeur
    #include <p16F876.inc> ; fichier include
    
    __CONFIG _CP_OFF & _WRT_ENABLE_OFF & _CPD_OFF & _LVP_OFF & _BODEN_OFF & _PWRTE_ON & _WDT_OFF & _HS_OSC
    
    
    
    BANK0 macro ; passer en banque0
    bcf STATUS,RP0
    bcf STATUS,RP1
    endm
    
    BANK1 macro ; passer en banque1
    bsf STATUS,RP0
    bcf STATUS,RP1
    endm
    
    ;Variables
    
    cblock 0x20
    FREQ_H
    FREQ_M
    FREQ_L
    
    ACC_H
    ACC_M
    ACC_L
    
    endc
    
    ; Fréquence de sortie : ici 20KHZ : 0x16872B * 0.01354651 = 19999.99 Hz
    #define STARTAT_H 0x16
    #define STARTAT_M 0x87
    #define STARTAT_L 0x2B
    
    ; J'ai fais un test à 20KHz en prenant un nombre de cycles à 22
    ; f out = freq_h/freq_m/freq_l * (f quartz/4 /nb cycles NCO / 2^nb bits accumulateur)
    ; nb cycles = 22
    ; f quartz = 20 Mhz
    ; nb bits accumulateur = 24 soit 2^24 = 16 777 216
    ; donc f out = freq_h/freq_m/freq_l * 0.01354651
    
    org 0x0000
    start
    
    BANK1
    
    movlw B'00000000' ; Mise en sortie du port B
    movwf TRISC
    BANK0
    
    ;Initialisation
    clrf ACC_H
    clrf ACC_M
    clrf ACC_L
    clrf PORTC
    
    movlw STARTAT_H
    movwf FREQ_H
    movlw STARTAT_M
    movwf FREQ_M
    movlw STARTAT_L
    movwf FREQ_L
    
    NCOLoop
    ; addition de la valeur de la fréquence désirée
    ; avec l'accumulateur de phase le tout sur 24 bits
    movf FREQ_L,w ; 1
    addwf ACC_L,f ; 1
    
    movf FREQ_M,w ; 1
    btfsc STATUS,C ; 1 / 2
    incfsz FREQ_M,w ; 1 / 2
    addwf ACC_M,f ; 1
    
    movf FREQ_H,w ; 1
    btfsc STATUS,C ; 1 / 2
    incfsz FREQ_H,w ; 1 / 2
    addwf ACC_H,f ; 1
    
    LookupSine
    
    movf ACC_H,w ; 1
    btfss PORTA,00000001
    btfss PORTA,00000010
    goto SINE_TABLE
    goto TRI_TABLE ; 2 + 5 dans la sous routine
    
    Output
    movwf PORTC ; 1 sortie de la valeur lue sur le port C
    
    goto NCOLoop ; 2
    
    
    
    SINE_TABLE:
    ; les deux lignes suivantes permettent de sélectionner un bloc
    ; de 256 octects. Ici B1 et B0 de PCLATH à 11 donc on sélectionne
    ; le troisième bloc de mémoire toujours dans la bank 0
    ; si modif du bloc de mémoire modifier le param ORG ci-dessus
    ; _X_FD car les trois instructions suivantes rajoutent 3 au PC
    bsf PCLATH,1 ; 1
    bsf PCLATH,0 ; 1
    addwf PCL,f ; 1
    ; each dt is internaly a retlw so 2 cycles ; 2
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x00,0x00
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xff,0xff
    
    TRI_TABLE
    
    bsf PCLATH,1 ; 1
    bsf PCLATH,0 ; 1
    addwf PCL,f ; 1
    ; each dt is internaly a retlw so 2 cycles ; 2
    dt 0x80,0x83,0x86,0x89,0x8c,0x8f, 0x92,0x95
    dt 0x98,0x9c,0x9f,0xa2,0xa5,0xa8, 0xab,0xae
    dt 0xb0,0xb3,0xb6,0xb9,0xbc,0xbf, 0xc1,0xc4
    dt 0xc7,0xc9,0xcc,0xce,0xd1,0xd3, 0xd5,0xd8
    dt 0xda,0xdc,0xde,0xe0,0xe2,0xe4, 0xe6,0xe8
    dt 0xea,0xec,0xed,0xef,0xf0,0xf2, 0xf3,0xf5
    dt 0xf6,0xf7,0xf8,0xf9,0xfa,0xfb, 0xfc,0xfc
    dt 0xfd,0xfe,0xfe,0xff,0xff,0xff, 0xff,0xff
    dt 0xff,0xff,0xff,0xff,0xff,0xff, 0xfe,0xfe
    dt 0xfd,0xfc,0xfc,0xfb,0xfa,0xf9, 0xf8,0xf7
    dt 0xf6,0xf5,0xf3,0xf2,0xf0,0xef, 0xed,0xec
    dt 0xea,0xe8,0xe6,0xe4,0xe2,0xe0, 0xde,0xdc
    dt 0xda,0xd8,0xd5,0xd3,0xd1,0xce, 0xcc,0xc9
    dt 0xc7,0xc4,0xc1,0xbf,0xbc,0xb9, 0xb6,0xb3
    dt 0xb0,0xae,0xab,0xa8,0xa5,0xa2, 0x9f,0x9c
    dt 0x98,0x95,0x92,0x8f,0x8c,0x89, 0x86,0x83
    dt 0x80,0x7c,0x79,0x76,0x73,0x70, 0x6d,0x6a
    dt 0x67,0x63,0x60,0x5d,0x5a,0x57, 0x54,0x51
    dt 0x4f,0x4c,0x49,0x46,0x43,0x40, 0x3e,0x3b
    dt 0x38,0x36,0x33,0x31,0x2e,0x2c, 0x2a,0x27
    dt 0x25,0x23,0x21,0x1f,0x1d,0x1b, 0x19,0x17
    dt 0x15,0x13,0x12,0x10,0x0f,0x0d, 0x0c,0x0a
    dt 0x09,0x08,0x07,0x06,0x05,0x04, 0x03,0x03
    dt 0x02,0x01,0x01,0x00,0x00,0x00, 0x00,0x00
    dt 0x00,0x00,0x00,0x00,0x00,0x00, 0x01,0x01
    dt 0x02,0x03,0x03,0x04,0x05,0x06, 0x07,0x08
    dt 0x09,0x0a,0x0c,0x0d,0x0f,0x10, 0x12,0x13
    dt 0x15,0x17,0x19,0x1b,0x1d,0x1f, 0x21,0x23
    dt 0x25,0x27,0x2a,0x2c,0x2e,0x31, 0x33,0x36
    dt 0x38,0x3b,0x3e,0x40,0x43,0x46, 0x49,0x4c
    dt 0x4f,0x51,0x54,0x57,0x5a,0x5d, 0x60,0x63
    dt 0x67,0x6a,0x6d,0x70,0x73,0x76, 0x79,0x7c
    
    end
    Dernière modification par gienas ; 12/06/2011 à 11h14. Motif: Ajouté les balises code obligatoires pour les programmes

  13. #12
    gedonet

    Re : commande des switches en assembleur

    Bonjour
    Je viens de tester de mettre le HEX de ton dernier programme dans un 16F876 dans isis, selon ma methode, et de lancer la simulation, je n'ai pas de message d'erreur.
    Gilles

Discussions similaires

  1. Réponses: 5
    Dernier message: 14/05/2010, 17h47
  2. Branchement UGN3140 (hall effect switches)
    Par invite36de77db dans le forum Électronique
    Réponses: 1
    Dernier message: 22/02/2010, 08h16
  3. [PIC] Utiliser des routines assembleur dans le code C
    Par pseudoblogeus dans le forum Électronique
    Réponses: 4
    Dernier message: 30/12/2008, 00h29
  4. des switches commandable
    Par invitebedcf73a dans le forum Électronique
    Réponses: 3
    Dernier message: 05/05/2007, 04h40
Découvrez nos comparatifs produits sur l'informatique et les technologies.