redefinition interruption 18F en C
Répondre à la discussion
Affichage des résultats 1 à 30 sur 30

redefinition interruption 18F en C



  1. #1
    jum0034

    redefinition interruption 18F en C


    ------

    salut a tous ,
    j ai un bootloader pour pic 18F6520 par rs232 mais quan je le test avec un programme qui fait clignoter une led , tout est ok , mais quan d je mes mon prog avec interruption il ne demarre pas,
    voici le linker de mon prog ou il y a les interruption:

    // File: 18f6520.lkr
    // Sample linker script for the PIC18F6520 processor

    LIBPATH .

    FILES c018i.o
    FILES clib.lib
    FILES p18f6520.lib

    CODEPAGE NAME=bootloader START=0x0 END=0xFFF PROTECTED
    CODEPAGE NAME=vectors START=0x1000 END=0x1029 PROTECTED
    CODEPAGE NAME=page START=0x102A END=0x7FFF
    CODEPAGE NAME=idlocs START=0x200000 END=0x200007 PROTECTED
    CODEPAGE NAME=config START=0x300000 END=0x30000D PROTECTED
    CODEPAGE NAME=devid START=0x3FFFFE END=0x3FFFFF PROTECTED
    CODEPAGE NAME=eedata START=0xF00000 END=0xF003FF PROTECTED

    ACCESSBANK NAME=accessram START=0x0 END=0x5F
    DATABANK NAME=gpr0 START=0x60 END=0xFF
    DATABANK NAME=gpr1 START=0x100 END=0x1FF
    DATABANK NAME=gpr2 START=0x200 END=0x2FF
    DATABANK NAME=gpr3 START=0x300 END=0x3FF
    DATABANK NAME=gpr4 START=0x400 END=0x4FF
    DATABANK NAME=gpr5 START=0x500 END=0x5FF
    DATABANK NAME=gpr6 START=0x600 END=0x6FF
    DATABANK NAME=gpr7 START=0x700 END=0x7FF
    ACCESSBANK NAME=accesssfr START=0xF60 END=0xFFF PROTECTED

    SECTION NAME=CONFIG ROM=config

    STACK SIZE=0x100 RAM=gpr7

    et dans mon prog ,je suis obliger de redeclarer mes vecteur ,d' interruptions :

    #define cAdd_High_Vector_Int 0x1008 // Adress vector interrupt High
    #define cAdd_Low_Vector_Int 0x1018 // Adress vector interrupt Low

    voila , sa fait plusieurs post que je crée, mais personne ne semble pouvoir, ou vouloir m'aider ,

    merci

    -----

  2. #2
    Seb.26

    Re : redefinition interruption 18F en C

    Citation Envoyé par jum0034 Voir le message
    voila , sa fait plusieurs post que je crée, mais personne ne semble pouvoir, ou vouloir m'aider ,
    Mets ton code dans des balise CODE ... applique toi sur les fautes et la rédaction de tes posts ... donne nous les sources de tes programmes ... détaille tes questions et tes besoins ...ect...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  3. #3
    jum0034

    Re : redefinition interruption 18F en C

    ok, donc ma question est : comment on redéfinit les adresses des vecteurs d'interruptions?

    sachant que mon bootloader est en assembleur , et mon programme principal en C.

    voici la source de mon bootloader.asm ci-joint , je n'est pas pu le mettre directement car il y a trop de caractere.
    Fichiers attachés Fichiers attachés

  4. #4
    jum0034

    Re : redefinition interruption 18F en C

    re,
    toujours rien ,
    merci

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

    Re : redefinition interruption 18F en C

    est ce que quelqu'un aurai un exemple de redéfinition des interruption pour un bootloader en assembleur , et un programme principal en C?

    merci

  7. #6
    jum0034

    Re : redefinition interruption 18F en C

    ou juste une info?

  8. #7
    Seb.26

    Re : redefinition interruption 18F en C

    Pour l'adresse du vecteur d'interruption, on ne peut pas la changer, c'est un registre à adresse fixe dans la RAM.

    Ce que toi tu change, c'est l'adresse pointée par ce registre ... c'est là que tu indique l'adr de ta routine d'IT ... pour la déclaration, voir dans la doc de ton compilo/assembleur ...

    Dans mon compilo pour un 16F88 par exemple, ça se fait comme ceci :
    Code:
    void Intr(void) __interrupt 0
    {
    ...
    }
    Mais comme on ne sait pas ce que TOI tu utilise, on peut pas t'aider ... à lire le mode d'emploi ...

    RTFM !!!
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  9. #8
    jum0034

    Re : redefinition interruption 18F en C

    j'utilise mplab C18

  10. #9
    jum0034

    Re : redefinition interruption 18F en C

    salut
    en fait , lorsque je fait un programme avec interruption , et que je met toutes mes fonction dans le main , mon bootloader lance bien le prog,

    mais des que je mes une fonction dans par exemple : Timer.c et que je le declare dans mon main avec #include "Timer.c" ,mon prog ne se lance pas avec le bootloader ,mais si je le programme sans bootloader , il fonctionne .

    svp ,aidez moi

  11. #10
    jum0034

    Re : redefinition interruption 18F en C

    toujours rien ,personne n'a crée de bootloader asm avec un programme en C?

  12. #11
    jum0034

    Re : redefinition interruption 18F en C

    allez les gars , une petite aide

  13. #12
    Seb.26

    Re : redefinition interruption 18F en C

    Pour la seconde fois : on comprend rien à tes post ! ... en plus, y'a 2 fautes par mots, ça donne pas du tout envie de lire ...

    Aide toi, le ciel t'aidera ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  14. #13
    jum0034

    Re : redefinition interruption 18F en C

    excuse moi alors ,de faire des fautes , on n'a pas tous un tres bon francais , ce n est pas a cause des fautes que tu ne comprend pas , mais plutot que tu ne veux pas m'aider , sinon tu ferai des efforts , et me demanderai ce que tu ne comprend pas dans mes expliquation , s est vrai que je m'exprime mal , mais dans un domaine ou je suis debutant , c est normal que je n'arrive pas bien a m'expliquer, enfin voila merci quand meme grand chef de l'electronique et du francais .
    Dernière modification par jum0034 ; 12/05/2009 à 11h03.

  15. #14
    Seb.26

    Re : redefinition interruption 18F en C

    Citation Envoyé par jum0034 Voir le message
    en fait , lorsque je fait un programme avec interruption , et que je met toutes mes fonction dans le main , mon bootloader lance bien le prog,
    mais des que je mes une fonction dans par exemple : Timer.c et que je le declare dans mon main avec #include "Timer.c" ,mon prog ne se lance pas avec le bootloader ,mais si je le programme sans bootloader , il fonctionne .
    tu ne dois pas #include un fichier .c ... fais un .h avec les prototypes à exporter dans ton main.c

    mon prog ne se lance pas avec le bootloader ,mais si je le programme sans bootloader , il fonctionne
    rien compris ...
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  16. #15
    jum0034

    Re : redefinition interruption 18F en C

    mon programme ne se lance pas avec le bootloader ,mais si je le programme sans bootloader , il fonctionne

    En fait cela veut dire que quand je charge mon programme en
    C par le bootloader , le bootloader fait le reset a l'adresse de début de mon programme en C et il plante,
    et que quand je programme directement mon pic avec le programme en C avec mplab ICD2 , mon programme en C tourne bien avec mes #include xxxx .c , donc je pense que mon prog en C fonctionne.

    Veut tu que je te mette le fichier .map généré par mplab , car en le regardant de plus prés, je crois que mes librairies ne sont pas a la bonne adresse.

    merci

  17. #16
    jum0034

    Re : redefinition interruption 18F en C

    voici mon bootloader :

    Code:
     *****************************************************************************
    	#include P18F6520.inc			; Bibliothèque adequat
    ; *****************************************************************************
    
    ; *****************************************************************************
    #define	MINOR_VERSION	0x0B		; Version
    #define	MAJOR_VERSION	0x00
    
    #define	RC_DLE		0x01
    #define	RC_STX		0x02
    
    #define	STX		0x0F
    #define	ETX		0x04
    #define	DLE		0x05
    
    #define	TBLWT_BUG			; Timing bug found in some PIC18Fxx20s
    
    #define RX_BUF_LEN 32
    
    ; *****************************************************************************
    
    
    
    ; *****************************************************************************
    CHKSUM			equ	0x10		; Checksum accumulator
    COUNTER			equ	0x11		; General counter
    ABTIME_H		equ	0x12
    ABTIME_L		equ	0x13
    RXDATA			equ	0x14
    TXDATA			equ	0x15
    SAVE_NB_START	equ	0x16		; octet de sauvegarde dans le prog de la valeur a l'adresse $3ff de l'EEPROM
    
    Index       res 1
    Temp        res 1
    
    ; Frame Format
    ;
    ;  <STX><STX>[<COMMAND><DATALEN><ADDRL><ADDRH><ADDRU><...DATA...>]<CHKSUM><ETX>
    
    DATA_BUFF	equ	0x18		; Start of receive buffer
    COMMAND		equ	0x18		; Data mapped in receive buffer
    DATA_COUNT	equ	0x19	
    ADDRESS_L	equ	0x1A
    ADDRESS_H	equ	0x1B
    ADDRESS_U	equ	0x1C
    PACKET_DATA	equ	0x1D
    
    
    
    ; *****************************************************************************
    pmwtpi macro				; tblwt*+ macro for PIC18Fxx20 bug
     IFDEF TBLWT_BUG
    	tblwt	*
    	tblrd	*+
     ELSE
    	tblwt	*+
     ENDIF
    	endm
    ; *****************************************************************************
    
    
     
    ; *****************************************************************************
        ORG	0x000			; Re-map Reset vector
    	
    	bra	Setup	
    	bra	StartWrite
    	
    
    	ORG	0x008
    VIntH
    	goto	RVIntH			; Re-map Interrupt vector
    
    	ORG	0x018
    VIntL
    	goto	RVIntL			; Re-map Interrupt vector
    
    
    ; *****************************************************************************
    
    
    ; *****************************************************************************
    
     ; = Pas besoin dans mon utilisation
     ;;; = Modifié dans mon prog
    
    ; *****************************************************************************
    ; Setup the appropriate registers.
    
    Setup
    
    	;	bcf		TRISC,2			; pour la carte Nport config de la récéption port série 1
    	;	bsf		PORTC,2
    
    	;	bcf		TRISD,6			; valide l'utilisation du 4053 pour la réception des ordres sur le port série
    	;	bcf		PORTD,6			; pour cela portd.6 = 0
    	    
    		movlw	b'00000111'	    ; desactive comparateur , pour lire switch
    		movwf	CMCON
    		movlw	b'00000000'     ; desactive ADCON pour port en digital
    		movwf	ADCON0 
    		movlw	b'00001111'
    		movwf	ADCON1
    	
    	 
    		bcf		TRISD,7      ;sortie pour ON_ALIM_CM
    		bsf		PORTD,7
    		bcf		TRISE,3       ;sortie pour EN_UART
    		bsf		PORTE,3
    
    	 
    		bcf		TRISF,3			; init le bit de port servant à tester si 
    		bcf		PORTF,3			; l'utilisateur veut repasser en boot mode
    		bsf		TRISF,3			; remet le bit en entrée
    		btfss	PORTF,3			; si le bit est à 1 alors passe au test du dernier octet EEPROM
    		rcall 	test_chgt		; appel la routine de test chargement
    		
    
    	
    		clrf	EECON1			; ici débute le test du dernier octet EEPROM
    		setf	EEADR			; pointe l'adresse $3FF
    		setf	EEADRH			
    		bsf		EECON1, RD		; lit l'octet à cette adresse 
    		incfsz	EEDATA, W
    		goto	RVReset			; Si pas $ff alors reset au programme chargé
    
    			
    		movlw	b'11111100' 	; déclare les leds en tant que sortie
    		movwf	TRISD			
    		bcf		PORTD,0			; mets à 1 toutes les leds de façon 
    		bcf		PORTD,1			; a montrer qu'on est en 'boot mode'
    			
    		
    		bsf	TRISC, 3			; Setup SCL pin
    		bsf	TRISC, 4			; Setup SDA pin
    
    	
    		bcf	TRISC, 6			; Setup tx pin
    		bsf	TRISC, 7			; Setup rx pin
    			
    		movlw	b'10010000'		; Setup rx and tx
    		movwf	RCSTA1
    		movlw	b'00100110'		
    		movwf	TXSTA1
    
    	
    		movlw	b'10000000'		; // slew rate on/off
    		movwf	SSPSTAT
    		movlw	b'00110110'		;// select serial mod
    		movwf	SSPCON1
    		movlw	b'00000001'		;// power on state
    		movwf	SSPCON2
    		movlw	b'00100000'		;// address I2C = 0x20
    		movwf	SSPADD
    		bcf     PIR1,SSPIF      ; clear flag
    		bsf     SSPCON1,CKP      ; relache clock
    ; *****************************************************************************
    
    
    
    
    ; *****************************************************************************
    Autobaud
    ;
    ; ___	 __________        ________
    ;    \__/	   \__________/       |                     |
    ;       |-------- p ----------|
    ;
    ;	p = The number of instructions between the first and last
    ;           rising edge of the RS232 control sequence 0x0F. Other 
    ;	    possible control sequences are 0x01, 0x03, 0x07, 0x1F, 
    ; 	    0x3F, 0x7F.
    ;
    ;	SPBRG = (p / 32) - 1  	BRGH = 1
    
    			bcf	RCSTA1, CREN		; Stop receiving  ;bit clear
    		
    			movlw	b'00000011'		; x16 Prescale   charge b'00000011' dans W
    			movwf	T0CON           ; charge b'00000011' dans T0CON
    			clrf	TMR0H			; Reset timer
    			clrf	TMR0L
    			
    			rcall	WaitForRise
    		 
    			bsf	T0CON, TMR0ON		; Start counting  ;bit set
    		
    			rcall	WaitForRise
    		
    			bcf	T0CON, TMR0ON		; Stop counting
    		
    			movff	TMR0L, ABTIME_L		; Read the timer
    		
    DivB32		rrcf	TMR0H, F		; divide by 2
    			rrcf	ABTIME_L, F
    			btfss	STATUS, C		; Rounding
    			decf	ABTIME_L, F
    		
    			movff	ABTIME_L, SPBRG1	; Sync
    		
    			bsf	RCSTA1, CREN		; Start receiving
    		
    			movf	RCREG1, W		; Empty the buffer
    			movf	RCREG1, W
    		
    		
    ; *****************************************************************************
    
    ; *****************************************************************************
    ; Read and parse the data.
    StartOfLine
    	
    		rcall	RdRS232			; Get second <STX>
    		xorlw	STX             ;Check for a STX (ou exclusif W , STX)
    		bnz	Autobaud			; Otherwise go back for another character
    	
    		lfsr	0, DATA_BUFF	; Point to the buffer (charge adresse DATA_BUFF dans buffer FSR0)
    	
    		clrf	CHKSUM			; Reset checksum		
    		clrf	COUNTER			; Reset buffer count
    		
    GetNextDat				
    		rcall	RdRS232			; Get the data
    		xorlw	STX				; Check for a STX (ou exclusif W , STX)
    		bz	StartOfLine			; Yes, start over (branche StartOfLine si résultat nul)
    
    NoSTX	movf	RXDATA, W		;Copie RXDATA dans W
    		xorlw	ETX				; Check for a ETX (ou exclusif W , ETX)
    		bz	CheckSum			; Yes, examine checksum	(branche CheckSum si résultat nul)	
    
    NoETX	movf	RXDATA, W		;Copie RXDATA dans W
    		xorlw	DLE				; Check for a DLE (ou exclusif W , DLE)
    		bnz	NoDLE               ;NoDLE si résultat non nul
    
    		rcall	RdRS232			; Yes, Get the next byte
    		
    NoDLE	movf	RXDATA, W		;Copie RXDATA dans W
    
    		addwf	CHKSUM, F		; Get sum (Ajoute RXDATA dans CHKSUM)
    		movwf	POSTINC0		; Store the data (copier le contenu de W dans POSTINC0)
    	
    		dcfsnz	COUNTER, F		; Limit buffer to 256 bytes(décrémente COUNTER, saute si le résultat n’est pas nul)
    		bra	Autobaud			
    	
    		bra	GetNextDat          
    
    CheckSum	
    		movf	CHKSUM			;Checksum test 
    		bnz	Autobaud            ;Autobaud  si résultat non nul
    ; ***********************************************
    
    ; ***********************************************
    ; Pre-setup, common to all commands.
    		movf	ADDRESS_L, W		;Set all possible pointers ;Copie ADDRESS_L dans W
    		movwf	TBLPTRL             ;Copie le contenu de W dans registre TBLPTRL
    		movwf	EEADR               ;Copie le contenu de W dans registre EEADR  
    		movf	ADDRESS_H, W        ;Copie ADDRESS_H dans W
    		movwf	TBLPTRH             ;Copie le contenu de W dans registre TBLPTRH
    		movwf	EEADRH              ;Copie le contenu de W dans registre EEADRH
    		movff	ADDRESS_U, TBLPTRU  ;Copie ADDRESS_U dans le registre TBLPTRU
    	
    		lfsr	FSR0, PACKET_DATA	;Charge adresse PACKET_DATA dans buffer FSR0)
    	
    		movf	DATA_COUNT, W 		;Copie DATA_COUNT dans W
    		movwf	COUNTER				;Copie le contenu de W dans registre COUNTER	
    		btfsc	STATUS, Z           ;Teste le bit Z du registre STATUS, passer s’il vaut 0)
    		reset				; Non valid count (Special Command)
    
    ; ***********************************************
    
    
    
    ; ***********************************************
    ; Test the command field and sub-command.
    CheckCommand
    		movf	COMMAND, W		; Test for a valid command	;Copie COMMAND dans W		
    		sublw	d'7'            ;Soustraire W de d'7'
    		bnc	Autobaud			;Brancher Autobaud si carry pas positionné
    	
    		clrf	PCLATH			; mise à 0 des registres permettant un saut paramétré
    		clrf	PCLATU
    			
    		rlncf	COMMAND, W		; en faisant une rotation à gauche du nbre trouvé dans command
    		addwf	PCL, F			; cela permet de sauter les instructions et de faire un branchement au SP correspondant à la commande.
    		
    		bra	ReadVersion
    		bra	ReadProgMem
    		bra	WriteProgMem
    		bra	EraseProgMem
    		bra	ReadEE
    		bra	WriteEE
    		bra	ReadProgMem			;ReadConfig
    		bra	WriteConfig
    ; ***********************************************
    la suite message suivant:

  18. #17
    jum0034

    Re : redefinition interruption 18F en C

    Code:
    ; ***********************************************
    ; Commands
    ; 
    ; In:	<STX><STX>[<0x00><0x02>]<0xFF><ETX>
    ; OUT:	<STX><STX>[<0x00><VERL><VERH>]<CHKSUM><ETX>
    ReadVersion
    	movlw	MINOR_VERSION 		;Charge MINOR_VERSION dans W
    	movwf	DATA_BUFF + 2		;Copie le contenu de W dans registre DATA_BUFF + 2
    	movlw	MAJOR_VERSION		;Charge MAJOR_VERSION dans W
    	movwf	DATA_BUFF + 3		;Copie le contenu de W dans registre DATA_BUFF + 3
    
    	movlw	0x04				;Charge 0x04 dans W
    	bra	WritePacket
    
    
    ; In:	<STX><STX>[<0x01><DLEN><ADDRL><ADDRH><ADDRU>]<CHKSUM><ETX>
    ; OUT:	<STX><STX>[<0x01><DLEN><ADDRL><ADDRH><ADDRU><DATA>...]<CHKSUM><ETX>
    ReadProgMem
    	tblrd	*+					; Fill buffer  octet pointé par TBLPTR -> (TABLAT), (TBLPTR)+1 -> (TBLPTR)
    	movff	TABLAT, POSTINC0    ;Copie le contenu de TABLAT dans registre POSTINC0  
    
    	decfsz	COUNTER, F			;Décrémente COUNTER, sauter si le résultat est nul
    	bra	ReadProgMem				; Not finished then repeat
    
    	movf	DATA_COUNT, W		; Setup packet length ;Copie DATA_COUNT dans W
    	addlw	0x05				;ajouter 0x05 au registre W
    				
    	bra	WritePacket
    
    
    ; In:	<STX><STX>[<0x02><DLENBLOCK><ADDRL><ADDRH><ADDRU><DATA>...]<CHKSUM><ETX>
    ; OUT:	<STX><STX>[<0x02>]<CHKSUM><ETX>
    WriteProgMem
    	movlw	b'11111000'			;Force a boundry 	;Charge b'11111000' dans W
    	andwf	TBLPTRL, F			;ET logique du registre W avec le registre TBLPTRL
     
    	movlw	0x08				;Charge 0x08 dans W
    
    Lp1	movff	POSTINC0, TABLAT	;Load the holding registers ;Copie le contenu de POSTINC0 dans registre TABLAT
    
    	pmwtpi						;Same as tblwt *+
    
    	decfsz	WREG, F    		    ;Décrémente WREG, sauter si le résultat est nul
    	bra	Lp1
     
    	tblrd	*-					;Point back into the block ; octet pointé par TBLPTR -> (TABLAT), (TBLPTR)-1 -> (TBLPTR)
    
    	movlw	b'10000100'		    ;Setup writes 	;Charge b'10000100' dans W
    	movwf	EECON1			    ;Copie le contenu de W dans registre EECON1
    	rcall	StartWrite		    ; Write the data
    
    	tblrd	*+					;Point to the beginning of the next block ; octet pointé par TBLPTR -> (TABLAT), (TBLPTR)+1 -> (TBLPTR)
    
    	decfsz	COUNTER, F			;Décrémente COUNTER, sauter si le résultat est nul
    	bra	WriteProgMem			; Not finished then repeat
    
    	bra	SendAcknowledge			; Send acknowledge
    
    
    ; In:	<STX><STX>[<0x03><DLENROW><ADDRL><ADDRH><ADDRL>]<CHKSUM><ETX>
    ; OUT:	<STX><STX>[<0x03>]<CHKSUM><ETX>
    EraseProgMem
    	movlw	b'10010100'			;Setup writes ;Charge b'10010100' dans W
    	movwf	EECON1				;Copie le contenu de W dans registre EECON1
    
    	rcall	StartWrite			;Erase the row
    
    	movlw	0x40				;Point to next row ;Charge 0x40 dans W
    	addwf	TBLPTRL, F			;Ajouter le registre W à TBLPTRL
    	clrf	WREG
    	addwfc	TBLPTRH, F			;Ajout de W au registre TBLPTRH avec carry
    	addwfc	TBLPTRU, F			;Ajout de W au registre TBLPTRU avec carry
    
    	decfsz	COUNTER, F			;Décrémente COUNTER, sauter si le résultat est nul
    	bra	EraseProgMem	
    
    	bra	SendAcknowledge			; Send acknowledge
    
    
    ; In:	<STX><STX>[<0x04><DLEN><ADDRL><ADDRH><0x00>]<CHKSUM><ETX>
    ; OUT:	<STX><STX>[<0x04><DLEN><ADDRL><ADDRH><0x00><DATA>...]<CHKSUM><ETX>
    ReadEE
    	clrf	EECON1 
    
    	bsf		EECON1, RD			; Read the data ;Place le bit à 1 dans le registre EECON1, RD
    	movff	EEDATA, POSTINC0    ;Copie le contenu de EEDATA dans registre POSTINCO
    	
    	infsnz	EEADR, F			;Adjust EEDATA pointer ;Incrémente le registre EEADR, sauter si le résultat n’est pas nul
    	incf	EEADRH, F           ;Incrémente le registre EEADRH
    
    	decfsz	COUNTER, F          ;Décrémente COUNTER, sauter si le résultat est nul
    	bra	ReadEE					; Not finished then repeat
    
    	movf	DATA_COUNT, W		; Setup packet length ;Copie DATA_COUNT dans W	
    	addlw	0x05				;ajouter 0x05 au registre W
    				
    	bra	WritePacket
    
    
    ; In:	<STX><STX>[<0x05><DLEN><ADDRL><ADDRH><0x00><DATA>...]<CHKSUM><ETX>
    ; OUT:	<STX><STX>[<0x05>]<CHKSUM><ETX>
    WriteEE	
    
    	movff	POSTINC0, EEDATA	;Copie le contenu de POSTINC0 dans registre EEDATA
    	movlw	b'00000100'			;Setup for EEData ;Charge b'00000100' dans W
    	movwf	EECON1				;Copie le contenu de W dans registre EECON1
    	rcall	StartWrite		
    	btfsc	EECON1, WR			;Write and wait ;Teste le bit WR du registre EECON1, passer s’il vaut 0
    	bra	$ - 2
    
    	infsnz	EEADR, F			;Adjust EEDATA pointer ;Incrémente le registre EEADR, sauter si le résultat n’est pas nul
    	incf	EEADRH, F			;Incrémente le registre EEADRH
    
    	decfsz	COUNTER, F			;Décrémente COUNTER, sauter si le résultat est nul
    	bra	WriteEE					;Not finished then repeat
    
    	bra	SendAcknowledge			;Send acknowledge
     
    
    ; In:	<STX><STX>[<0x06><DLEN><ADDRL><ADDRH><ADDRU>]<CHKSUM><ETX>
    ; OUT:	<STX><STX>[<0x06><DLEN><ADDRL><ADDRH><ADDRU><DATA>...]<CHKSUM><ETX>
    ;ReadConfig
    ;	movlw	b'11000000'
    ;	movwf	EECON1
    ;
    ;Lp5	tblrd	*+
    ;	movff	TABLAT, POSTINC0
    ;
    ;	decfsz	COUNTER, F
    ;	bra	Lp5			; Not finished then repeat
    ;
    ;	movf	DATA_COUNT, W		; Setup packet length
    ;	addlw	0x05
    ;
    ;	bra	WritePacket
    
    
    ; In:	<STX><STX>[<0x07><DLEN><ADDRL><ADDRH><ADDRU><DATA>...]<CHKSUM><ETX>
    ; OUT:	<STX><STX>[<0x07>]<CHKSUM><ETX>
    WriteConfig
    	movlw	b'11000100'			;Charge b'11000100' dans W
    	movwf	EECON1				;Copie le contenu de W dans registre EECON1
    
    	movff	POSTINC0, TABLAT	;Write to config area ;Copie le contenu de POSTINC0 dans registre TABLAT
    	tblwt	*				    ;Octet pointé par TBLPTR -> (TABLAT)
    
    	rcall	StartWrite
    
    	tblrd	*+					;Octet pointé par TBLPTR -> (TABLAT), (TBLPTR)+1-> (TBLPTR)
    
    	decfsz	COUNTER, F			;Décrémente COUNTER, sauter si le résultat est nul
    	bra	WriteConfig				;Not finished then repeat
    		
    	bra	SendAcknowledge			;Send acknowledge
    ; ***********************************************
    
    
    
    ; ***********************************************
    ; Send the data buffer back.
    ;
    ; <STX><STX>[<DATA>...]<CHKSUM><ETX>
    
    SendAcknowledge
    	movlw	0x01				;Send acknowledge ;Charge 0x01 dans W
    
    WritePacket
    	movwf	COUNTER        	 	;Copie le contenu de W dans registre COUNTER
    
    	movlw	STX					;Send start condition ;Charge STX dans W
    	rcall	WrRS232		
    	rcall	WrRS232
    
    	clrf	CHKSUM				;Reset checksum
    
    	lfsr	FSR0, DATA_BUFF		;Setup pointer to buffer area ;Charge adresse DATA_BUFF dans buffer FSR0	
    	
    SendNext						;Send DATA
    	movf	POSTINC0, W			;Copie POSTINC0 dans W
    	addwf	CHKSUM  			;Ajouter le registre W à CHKSUM 
    	rcall	WrData
    	decfsz	COUNTER, F			;Décrémente COUNTER, sauter si le résultat est nul
    	bra	SendNext
    
    	negf	CHKSUM				;Send checksum ;Inverser le signe du registre CHKSUM
    	movf	CHKSUM, W			;Copie CHKSUM dans W
    	rcall	WrData
    
    	movlw	ETX					;Send stop condition ;Charge ETX dans W
    	rcall	WrRS232
    
    	bra	Autobaud
    ; ***************************************************
    
    
    
    ; *****************************************************************************
    ; Write a byte to the serial port.
    
    WrData
    	movwf	TXDATA			;Save the data ;Copie le contenu de W dans registre TXDATA
     
    	xorlw	STX				;Check for a STX ;OU exclusif W ,STX
    	bz	WrDLE				;No, continue WrNext (branche WrDLE si résultat nul)	
    
    	movf	TXDATA, W		;Copie TXDATA dans W	
    	xorlw	ETX				;Check for a ETX ;OU exclusif W ,ETX
    	bz	WrDLE				;No, continue WrNext (branche WrDLE si résultat nul)
    
    	movf	TXDATA, W		;Copie TXDATA dans W
    	xorlw	DLE				; Check for a DLE ;OU exclusif W ,DLE	
    	bnz	WrNext				; No, continue WrNext ;WrNext si résultat non nul
    
    WrDLE
    	movlw	DLE				; Yes, send DLE first ;Charge DLE dans W
    	rcall	WrRS232
    
    WrNext
    	movf	TXDATA, W		; Then send STX ;Copie TXDATA dans W
    
    WrRS232
    	clrwdt
    	btfss	PIR1, TXIF		; Write only if TXREG is ready ;Teste le bit TXIF du registre PIR1, passer s’il vaut 1
    	bra	$ - 2
    	
    	movwf	TXREG1			; Start sending ;Copie le contenu de W dans registre TXREG1
    
    	return
    ; *****************************************************************************
    suite message suvant

  19. #18
    jum0034

    Re : redefinition interruption 18F en C

    Code:
    ; *****************************************************************************
    RdI2C
    	clrwdt
    	bsf     SSPCON1,CKP      ; relache clock
    	btfss	PIR1,SSPIF		
    	bra	$ - 2
    	bcf     SSPCON1,CKP      ; maintient clock
        
    ;----------------------------------------------------------------
    ; State 1: I2C write operation, last byte was an address byte
    ; SSPSTAT bits: S = 1, D_A = 0, R_W = 0, BF = 1
    ;
    ; State 2: I2C write operation, last byte was a data byte
    ; SSPSTAT bits: S = 1, D_A = 1, R_W = 0, BF = 1
    ;----------------------------------------------------------------
    
    SSP_Handler
        movf    SSPSTAT,W       ; Get the value of SSPSTAT
        andlw   b'10101101'     ; Mask out unimportant bits in SSPSTAT.
        movwf   Temp            ; for comparision checking.
    State1:                     ; Write operation, last byte was an
        movlw   b'10001001'     ; address, buffer is full.
        xorwf   Temp,W          ;
        btfss   STATUS,Z        ; Are we in State1? si "0" saut sspbuf
        goto    State2          ; No, check for next state.....
        movf    SSPBUF,W        ; Do a dummy read of the SSPBUF.
    	bcf     PIR1,SSPIF
        goto    RdI2C
    State2:                     ; Write operation, last byte was data,
        movlw   b'10101001'     ; buffer is full.
        xorwf   Temp,W
        btfss   STATUS,Z        ; Are we in State2?
        goto    State1          ; No, check for next state.....
       
        movf    SSPBUF,W        ; Get the byte from the SSP.
        movwf   RXDATA           ; Put it in the buffer.
        	
     	bcf     PIR1,SSPIF
    	return
    
    ; Unlock and start the write or erase sequence.
    
    ; *****************************************************************************
    RdRS232
    	clrwdt
    
    	btfsc	RCSTA1, OERR		; Reset on overun
    	reset
    
    	btfss	PIR1, RCIF		; Wait for data from RS232
    	bra	$ - 2	
    
    	movf	RCREG1, W		; Save the data
    	movwf	RXDATA
     
    	return
    ; *****************************************************************************
    
    
    StartWrite
    	clrwdt
    
    	movlw	0x55			; Unlock
    	movwf	EECON2
    	movlw	0xAA
    	movwf	EECON2
    	bsf	EECON1, WR		; Start the write
    	nop
    
    	return
    ; *****************************************************************************
    
    
    
    
    ; *****************************************************************************
    ; ORG 0x00A
    
    
    WaitForRise
    	btfsc	PORTC, 7		; Wait for a falling edge
    	bra	WaitForRise
    	clrwdt
    WtSR	btfss	PORTC, 7		; Wait for starting edge
    	bra	WtSR
    	return
    ; *****************************************************************************
    
    
    
    
    ; *****************************************************************************
    
     ; ORG 0x0250
    test_chgt
    	clrwdt
    	clrf	EECON1			; 
    	movlw	0xFE			; cale les bits de poids faible de l'adresse en $FE
    	movwf	EEADR			;
    	setf	EEADRH			; mets à 1 les bits de poids forts de manière à être pointé sur l'avant dernière case de l'EEPROM
    	bsf		EECON1, RD		; lit la valeur présente en $3fe
    	movf	EEDATA, W		; rapatrie la valeur en question 				
    	movwf	SAVE_NB_START	; sauve dans la case mémoire correspondante
    	movlw	0xfd
    	subwf	SAVE_NB_START,W	; soustrait $fc à la valeur pour savoir si on a dépassé le nb de démarrage au bootloader
    	btfsc	STATUS,N		; si oui
    	bra		PrepReset		; saute à la mise en place des données pour le prog principal
    
    	clrwdt
    	movlw	0xFE			; ecrit à l'adresse $3FE la valeur trouvée - 1
    	movwf	EEADR			; 
    	setf	EEADRH			; 
    	decf	SAVE_NB_START,W	; décrémente le nb de démarrage puis mets le resultat dans W
    	movwf	EEDATA			; charge le registre de mise en EEPROM
    	movlw	b'00000100'		; prépare la valeur pour le chargement de EECON1
    	movwf	EECON1			; tout à 0 sauf WR à 1
    	clrwdt
    	movlw	0x55			; Unlock
    	movwf	EECON2
    	movlw	0xAA
    	movwf	EECON2
    	bsf		EECON1, WR		; Start the write
    	nop
    	btfsc	EECON1, WR		; ecrit la valeur
    	bra	$ - 2 				; si pas terminé d'écrire attends
    
    	
    	setf	EEADR			;
    	setf	EEADRH			; reinit la dernière case EEPROM pour le redémarrage en bootloader 
    	movlw	0xff			; charge la valeur de défaut pour démarrer en bootloader
    	movwf	EEDATA			; 
    	movlw	b'00000100'		; 
    	movwf	EECON1			; 
    	clrwdt
    	movlw	0x55			; Unlock
    	movwf	EECON2
    	movlw	0xAA
    	movwf	EECON2
    	bsf		EECON1, WR		; Start the write
    	nop
    	btfsc	EECON1, WR		; ecrit la valeur
    	bra	$ - 2 				; si pas terminé d'écrire attends
    	nop
    	return
    
    ;******************************************************************************
    
    
    
    ;******************************************************************************
    	
    PrepReset
     
    	setf	EEADR			;
    	setf	EEADRH			; reinit la dernière case EEPROM pour le redémarrage en bootloader
    	movlw	0xaa			; charge une valeur autre que $ff pour ne plus rentrer dans le bootloader 
    	movwf	EEDATA			; 
    	movlw	b'00000100'		; 
    	movwf	EECON1			; 
    	clrwdt
    	movlw	0x55			; Unlock
    	movwf	EECON2
    	movlw	0xAA
    	movwf	EECON2
    	bsf		EECON1, WR		; Start the write
    	nop
    	btfsc	EECON1, WR		; ecrit la valeur
    	bra	$ - 2 				; si pas terminé d'écrire attends
    	nop	
    	goto		RVReset
    
    
    
    
    ; *****************************************************************************
       ORG 0x82A				; remap de façon a laisser la place pour le compilo
    RVReset					
       ORG 0x808				; remap de façon a laisser la place pour le compilo
    RVIntH
    
       ORG 0x818				; remap de façon a laisser la place pour le compilo
    RVIntL
    ; *****************************************************************************
    
    	END

  20. #19
    jum0034

    Re : redefinition interruption 18F en C

    B]ainsi que mon linker de mon prog en C et mon prog en C[/B]

    Code:
    // File: 18f6520.lkr
    // Sample linker script for the PIC18F6520 processor
    
    LIBPATH .
    
    FILES c018i.O
    FILES clib.lib
    FILES p18f6520.lib
    
    
    CODEPAGE   NAME=bootcode   START=0x000             END=0x7FF         PROTECTED
    CODEPAGE   NAME=vectors    START=0x800             END=0x820          PROTECTED
    CODEPAGE   NAME=code       START=0x82A            END=0x7FFF       
    CODEPAGE   NAME=idlocs     START=0x200000          END=0x200007       PROTECTED
    CODEPAGE   NAME=config     START=0x300000          END=0x30000D       PROTECTED
    CODEPAGE   NAME=devid      START=0x3FFFFE          END=0x3FFFFF       PROTECTED
    CODEPAGE   NAME=eedata     START=0xF00000          END=0xF003FF       PROTECTED
    
    ACCESSBANK NAME=accessram  START=0x0            END=0x5F
    DATABANK   NAME=gpr0       START=0x60           END=0xFF
    DATABANK   NAME=gpr1       START=0x100          END=0x1FF
    DATABANK   NAME=gpr2       START=0x200          END=0x2FF
    DATABANK   NAME=gpr3       START=0x300          END=0x3FF
    DATABANK   NAME=gpr4       START=0x400          END=0x4FF
    DATABANK   NAME=gpr5       START=0x500          END=0x5FF
    DATABANK   NAME=gpr6       START=0x600          END=0x6FF
    DATABANK   NAME=gpr7       START=0x700          END=0x7FF
    ACCESSBANK NAME=accesssfr  START=0xF60          END=0xFFF          PROTECTED
    
    SECTION    NAME=CONFIG     ROM=config                              
    
    STACK SIZE=0x100 RAM=gpr7

  21. #20
    jum0034

    Re : redefinition interruption 18F en C

    PROG EN C:

    MAIN

    Code:
    /***************************** LIBRAIRIES*****************************************************************************************/
    
    #include "p18f6520.h"
    #include "define.h"
    #include "fonctions.h"
    #include "delays.h"        // Routine Delays
    #include "timer.c" 
    
    
    
    #pragma code		// return to default code section
    
    /**********************************************************************************************************************************/
    
    /********************* Configuration des bits *************************************************************************************/
    
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    /********************************* Programme principal *****************************************************************************/
    
    void main (void)
    {
    
    
    
    	Init_port();                    //Initialisation port du pic
    //	Init_ADC();                     //Initialisation ADC
    	Init_IT();					    //Initialisation des interruptions
    //	Init_Timer0();					//Initialisation Timer0 pour ADC
    //	Init_timer1_();					//Initialisation Timer1 
    //	Init_Timer2_PWM();				//Initialisation Timer2 PWM
    	Init_Timer4_PWM_SEUIL_PIR(); 	//Initialisation Timer4 PWM seuil PIR
    		   
    //	Init_timer3_();			
    	Init_variable_();               //Initialisation variables
    //	Init_variables_I2C();			//Initialisation variables I2C
    //	Init_variable_RC5();			//Initialisation variables RC5
    
    //	Tempo_6ms();
    	
     	
    	while(1)													//boucle principale
    	{
    		
    	
    	Led_Rouge_= 0;
    	
    	Led_Verte_= 1;
    			
    																									
    	}	
    		
    
    }
    
    
    
    
    
    /******************************************************************************************************************************************************
    
    nom			: Init_port
    paramètres	: void
    return		: void
    Description	: Initialisation des différents ports d'entrees/sorties et commande prioritaire apres un reset
    
    ******************************************************************************************************************************************************/
    
    void Init_port(void)
    {
    	TRISA=0b11111111; 			//Configuration du port A          
    	TRISB=0b00010101;			//Configuration du port B
    	TRISC=0b11111011;			//Configuration du port C
    	TRISD=0b00100000; 			//Configuration du port D
    	TRISE=0b11110111;			//Configuration du port E
    	TRISF=0b10011111;			//Configuration du port F
    	TRISG=0b11101010;			//Configuration du port G
    }
    
    /******************************************************************************************************************************************************
    
    nom			: Init_VARIABLES
    paramètres	: void
    return		: void
    Description	: Initialisation des différents ports d'entrees/sorties et commande prioritaire apres un reset
    
    ******************************************************************************************************************************************************/
    
    void Init_variable_(void)
    {	
    	
    
    	EN_5V_PIC_= off_;
    	ON_ALIM_CM_= off_;
    	BUZZER_= off_ ;
    	GAIN_CH_BATT_= off_;
    	MAINTIENT_BATT_= off_;
    	Led_Verte_= _on_;
    	Led_Rouge_= _on_;
    	EN_UART_= _off_;
    	Port_in_2_  = 1;
    	reveil_hard_STIM_ = 1;
    	compteur_timer0 = 0;
    	ALIM_HCS301_PROG_= off_;
    	MCLR_HCS= off_;
    	CLK_HCS  = 0;
    
    	
    }
    
    
    
    
    
    /*****************************************************************************************************************************************************
    
    nom			: Init_IT
    paramètres	: void
    return		: void
    Description	: Initialisations des différentes interrutions (validation, Flag et priorité)
    
    ******************************************************************************************************************************************************/
    
    void Init_IT(void)
    
    {			
    	PIR2 = 0;			//Reset Flag IT
    	PIR1 = 0;			//Reset Flag IT
    
    	IPR1 = 0;			
    	IPR2 = 0;
    
    	PIE1 = 0;			//On devalide toute les interruptions sur PIE1
    	PIE2 = 0; 			//desactivation des autres ITs*/
    
    //	INTCON 	= 0b00000000;
    //	INTCON2 = 0b00000000;
    //	INTCON3 = 0b00000000;
    
    	LVDCON = 0x01;				
    	RCON = 0x80; //bits.IPEN = 1;	//Validation du mode prioritaire des ITs
    	T3CON = 0b01000000;             //timer 1 et 2 pour CCP1 ,CCP2  et timer 3 et 4 pour CCP3 a CCP5
    	CMCON = 0b00000111;             //disable compareuteur pour pouvoir lire les 4 switch
    
    	/////////////*****************Priorité Haute****************////////////////
    
    	IPR1bits.SSPIP = 0;	//I2C en haute priorite
    	PIE1bits.SSPIE = 0;	//validation de l'I2C pas maintenant
    	PIR1bits.SSPIF = 0; //Flag I2C
    
    	INTCON2bits.INTEDG2 = 0; //==> front descendant
    	INTCON3bits.INT2IP  = 0; //==> INT2 en priorite haute
    	INTCON3bits.INT2IE 	= 2; //==> validation INT2
    	INTCON3bits.INT2IF 	= 0; //==> flag INT2	
    
    //	/*INTCON2bits.RBIP  = 1; //==> priorité IT port B 0 = low  1 = high
    //	INTCON2bits.RBPU  = 1; //==> pas de pull up sur le portB
    //	INTCONbits.RBIE   = 1; //==> validation IT sur le portB
    //	INTCONbits.RBIF   = 0; //==> flag portB*/
    
    	INTCON2bits.INTEDG0 = 0; //==> front descendant
    	INTCONbits.INT0IE   = 1; //==> activation IT INT0
    	INTCONbits.INT0IF   = 0; //==> flag INT0
    
    	INTCONbits.GIEH   = 1; //==> validation des ITs priorite haute*/
    
    
    	/////////////*****************Priorité basse****************////////////////
    
    	INTCON2bits.TMR0IP  = 0; //==> timer0 en priorite basse//haute
    	INTCONbits.TMR0IE   = 1; //==> validation de l'IT du timer0
    	INTCONbits.TMR0IF   = 0; //==> flag TMR0
    
    	IPR1bits.ADIP = 0;	//ADC en basse prioritre
    	PIE1bits.ADIE = 1; 	//Validation de l'IT ADC
    	PIR1bits.ADIF = 0;	//flag ADC
    	
    	IPR2bits.TMR3IP = 0; //Timer 3 en priorite Basse
    	PIE2bits.TMR3IE = 0; //Validation de l'IT timer3 pas maintenant
    	PIR2bits.TMR3IF = 0; //Flag TMR3
    
    	INTCONbits.GIEL   = 1; //==> validation des ITs priorite haute
    }
    
    
    
    
    
    
    
    
    
    
    /***********************************************************************************************************************************
    Gestion IT.c
    auteur : JM
    Produit : CAPTIMAGE
    Sous ensemble : Carte d'entrées/sorties
    Dernière mise à jour :
    **********************************************************************************************************************************/
    
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 	                                                                  Sous Program d'interrupt High
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    #pragma code High_Vector = cAdd_High_Vector_Int		// Code sur address Interrupt High
    
    void Interrupt_High(void)
    {
    	check_Interrupt_High();		// Call SP interuption High
    }
    
    #pragma code					// return to default code section
    
    
    //////////////////////////////////////////
    // SP Interrupt High In C18
    //////////////////////////////////////////
    
    #pragma interrupt	check_Interrupt_High	save= PROD,section("My_Var1")	
    
    void check_Interrupt_High(void)
    {
    
    	if ( INTCONbits.INT0IF == 1 )   ///////////////////////////////////////////////////////IT PIR/////////////////////////////////////////////////////////////
    	{
    	    Led_Verte_= 0;
    		Delay10KTCYx(80);
    		Led_Verte_= 1;
    		
    		INTCONbits.INT0IF = 0 ;           //Reset Flag PIR
    	}
    
    }
    
    #pragma code				// return to default code section
    
    
    
    
    
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // 	                                                                         Sous Program d'interrupt Low
    /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    
    #pragma code Low_Vector = cAdd_Low_Vector_Int		// Code sur address Interrupt Low
    
    void Interrupt_Low(void)
    {
    	check_Interrupt_Low();	// Call SP interuption Low
    }
    
    #pragma code				// return to default code section
    
    
    //////////////////////////////////////////
    // SP Interrupt Low In C18
    //////////////////////////////////////////
    
    #pragma interruptlow	check_Interrupt_Low		save= PROD,section("My_Var1")	
    
    void check_Interrupt_Low(void)
    {
    	
    
    }
    
    
    #pragma code				// return to default code section*/

  22. #21
    jum0034

    Re : redefinition interruption 18F en C


    DEFINE


    Code:
    /**********************************************************************************************************************************
    Constantes divers
    **********************************************************************************************************************************/
    
    #define		cAdd_High_Vector_Int	0x808			// Adress vector interrupt High
    #define		cAdd_Low_Vector_Int		0x818			// Adress vector interrupt Low
    
    
    #define			on_			1
    #define			off_		0	//logique normale
    
    #define			_on_		0
    #define 		_off_		1	//logique inverse
    
    #define			oui_		1
    #define 		non_		0
    
    #define			positive_	1
    #define			negative_ 	0
    
    #define			ouvert_		0
    #define			ferme_		1
    
    #define			_ok_		0
    #define			_echec_		1
    
    #define			_active_ 	0
    #define			_desactive_	1
    
    #define			recu_		1
    #define 		non_recu_	0
    
    
    /**********************************************************************************************************************************
    Constantes pour les ports d'entrees sorties
    **********************************************************************************************************************************/
    
    #define			PIR_INT_SONIA_		PORTBbits.RB0   ////////////INT0(detection mouvement)/////////////////////////
    #define 		Port_in_2_      	PORTBbits.RB1   ////////////INT1(communiction avec carte mere)////////////////
    //#define 		IRDA_IN_        	PORTBbits.RB2	////////////INT2(trame RC5 recu)//////////////////////////////
    #define 		CLK_HCS         	PORTBbits.RB3   ////////////INT3(CLK serie RF)////////////////////////////////
    #define 		DATA_HCS         	PORTBbits.RB2   ////////////INT4(data serie RF) //////////////////////////////
    
    #define			Led_Rouge_			PORTDbits.RD0
    #define			Led_Verte_			PORTDbits.RD1
    #define			BUZZER_		    	PORTDbits.RD2
    #define			MAINTIENT_BATT_		PORTDbits.RD3   ////////////maintient charge batterie/////////////////////////
    #define			GAIN_CH_BATT_		PORTDbits.RD4   ////////////gain charge batterie 250mA/9mA////////////////////
    #define			EN_5V_PIC_			PORTDbits.RD6   ////////////activer 5V////////////////////////////////////////
    #define			ON_ALIM_CM_			PORTDbits.RD7   ////////////alimenter carte mere//////////////////////////////
    
    #define			EN_UART_		    PORTEbits.RE3   ////////////activer UART//////////////////////////////////////
    #define			BAD_LVL_UART_		PORTEbits.RE4   ////////////mauvais niveau sur UART///////////////////////////
    #define			RDY_UART_			PORTEbits.RE5
    #define			CTS_UART_PIC_		PORTEbits.RE6
    #define			RTS_UART_PIC		PORTEbits.RE7
    
    #define			ALIM_HCS301_PROG_ 	PORTFbits.RF5   ////////////alimenter HCS301 lors de la prog//////////////////
    #define 		MCLR_HCS	     	PORTFbits.RF6   ////////////faire reset HCS pour prog/////////////////////////
    
    
    #define 		_12V_OK_			PORTGbits.RG1   ////////////presence 12V en entrée////////////////////////////
    #define 		reveil_hard_STIM_	PORTGbits.RG2
    
    #define          test_rg4_          PORTGbits.RG4
    
    #define			SW4					PORTFbits.RF0
    #define			SW3					PORTFbits.RF1
    #define			SW2					PORTFbits.RF2
    #define			SW1					PORTFbits.RF3
    
    
    /**********************************************************************************************************************************
    Constantes pour la conversion
    **********************************************************************************************************************************/
    
    #define 		IRP_		0b00000000
    #define			POE_		0b00000100
    #define			IBAT_		0b00000010
    #define			UBAT_		0b00001100
    
    
    #define 		IRP_1V3_	403
    #define 		min_detection_IRP_  60
    #define         delta_IRP_min_detection  125
    /*********************************************************************************************************************************
    Constantes pour le test d'alimentation
    ***********************************************************************************************************************************/
    
    #define treize_volt_six_		   663 //725
    #define dix_volt_				   495 //577 //535
    #define Onze_volt			       548 // 634  //535
    #define neuf_volt_				   436  //520  //480
    #define nb_echantillon_alim_ ((unsigned int) 0x0A)
    
    
    
    
    /*********************************************************************************************************************************
    Constantes pour l'I2C
    ***********************************************************************************************************************************/
    
    #define adresse_SORHEA_		((unsigned char) 0x20)
    #define adresse_STIM_ 		((unsigned char) 0xD0)
    #define mode_STIM_ 			((unsigned char) 0x01)
    #define etat_STIM_ 			((unsigned char) 0x02)
    #define statut_STIM_		((unsigned char) 0x04)
    #define alarme_				((unsigned char) 0x05)
    #define parametre_          ((unsigned char) 0x03)
    
    #define OFF_ 				((unsigned char) 0x00)
    #define veille_ 			((unsigned char) 0x01)
    #define passage_J_N_		((unsigned char) 0x02)
    #define passage_N_J_		((unsigned char) 0x03)
    #define alarme_IRP_ 		((unsigned char) 0x01)
    #define	demande_statut_		((unsigned char) 0x05)
    #define reveil_STIM_ 		((unsigned char) 0x02)
    
    #define _repos_			((unsigned char) 0x00)
    #define _reglage_ 		((unsigned char) 0x01)
    #define _parametrage_ 	((unsigned char) 0x02)
    #define _test_ 			((unsigned char) 0x03)
    #define _surveillance_	((unsigned char) 0x04)
    #define _connexion_		((unsigned char) 0x05)
    #define _reset_			((unsigned char) 0x06)
    #define _arret_ 		((unsigned char) 0x07)
    
    #define BAUD_RATE_ 			26	//pour une clock a 75khz
    #define emission_            1
    #define reception_			 2
    
    /*********************************************************************************************************************************
    Constantes pour le mode repos
    ***********************************************************************************************************************************/
    #define repos_			0
    #define cinq_minutes_ 	6000
    #define dix_minutes_ 	12000
    
    /*********************************************************************************************************************************
    Constantes pour le mode arret
    ***********************************************************************************************************************************/
    #define arret_			7
    
    /*********************************************************************************************************************************
    Constantes pour le mode reglage
    ***********************************************************************************************************************************/
    #define reglage_		1
    
    /*********************************************************************************************************************************
    Adresse de sauvegarde de parametres en eeprom
    ***********************************************************************************************************************************/
    #define adresse_delta_decl_IRP_L_		((unsigned int) 0x000)
    #define adresse_delta_decl_IRP_H_		((unsigned int) 0x001)
    #define adresse_seuil_crepus_haut_L_	((unsigned int) 0x002)
    #define adresse_seuil_crepus_haut_H_	((unsigned int) 0x003)
    #define adresse_seuil_crepus_bas_L_		((unsigned int) 0x004)
    #define adresse_seuil_crepus_bas_H_		((unsigned int) 0x005)
    #define adresse_intensite_PJIR_			((unsigned int) 0x006)
    #define adresse_etat_IRP_				((unsigned int) 0x007)
    #define adresse_etat_PJIR_				((unsigned int) 0x008)
    #define adresse_etat_buzzer_			((unsigned int) 0x009)
    
    unsigned char Read_I2C_delta_decl_IRP_H_;
    unsigned char Read_I2C_delta_decl_IRP_L_;
    unsigned char Read_I2C_seuil_crepus_haut_H_;
    unsigned char Read_I2C_seuil_crepus_haut_L_;
    unsigned char Read_I2C_seuil_crepus_bas_H_;
    unsigned char Read_I2C_seuil_crepus_bas_L_;
    unsigned char Read_I2C_intensite_PJIR;
    unsigned char Read_I2C_etat_IRP;
    unsigned char Read_I2C_etat_PJIR;
    unsigned char Read_I2C_etat_buzzer;
    
    volatile unsigned char Lecture_parametre_OK;
    volatile unsigned char mode_Reset_OK; 
    volatile unsigned char autorisation_demande_statut_OK;
    
    #define parametrage_	2
    #define test_			3
    #define reset_			6
    #define surveillance_  	4
    
    #define une_min_		100 //200    //1200
    #define normal_			2
    #define semi_muet_		1
    #define muet_			0
    
    
    /************* Variables pour la conversion de la tension d'alim ***************************************************************************************/
    
    unsigned char Flag_tension_alim_correcte;
    unsigned char Flag_tension_presence_secteur;
    unsigned char Flag_tension_batterie_faible;
    unsigned char Flag_tension_batterie_HS;
    unsigned char Flag_tension_presence_alim_ext;
    
    volatile unsigned int tab_valeur_IRP [2];
    volatile unsigned int tab_valeur_poe [10] = {700,700,700,700,700,700,700,700,700,700};
    volatile unsigned int tab_valeur_batt [10] = {900,900,900,900,900,900,900,900,900,900};
    volatile unsigned int tab_valeur_crepus [10];
    volatile unsigned int resultat_conversion;
    //unsigned char i;
    //unsigned char j;
    unsigned int compteur_timer0;
    unsigned char compteur_ADC_crepus;
    unsigned char compteur_ADC_alim;
    ////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    #pragma udata My_Var1	// Variable Save on IT
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    
    #pragma code

  23. #22
    jum0034

    Re : redefinition interruption 18F en C


    FONCTION.h

    Code:
    void Initialisation_Variables_BP_actif(void);
    
    void Init_parametres (void);
    
    /**********************************************************************************************************************************
    Lecture des switchs 
    **********************************************************************************************************************************/
    void Lecture_Input (void);
    
    /**********************************************************************************************************************************
    Test alimentation 
    **********************************************************************************************************************************/
    void Test_alimentation (void);
    
    /**********************************************************************************************************************************
    Initialisation des priorités, des flags et des modules d'interrutions
    **********************************************************************************************************************************/
    void Init_IT (void);
    
    /**********************************************************************************************************************************
    Gestion d'interruption
    **********************************************************************************************************************************/
    void Interrupt_High(void);
    void check_Interrupt_High(void);
    void Interrupt_Low(void);
    void check_Interrupt_Low(void);
    
    void Init_Timer0 (void);
    void Init_timer1_(void);
    void Init_Timer2_PWM(void);
    void Init_timer3_(void);
    void Init_Timer4_PWM_SEUIL_PIR(void);
    TIMER.C
    Code:
    /****************************************************************************************************************************************************
    
    nom			: Init_Timer4_PWM  (seuil PIR)
    paramètres	: void
    return		: void
    Description	: Initialisation periode et rapport cyclique PWM
    
    ****************************************************************************************************************************************************/
    void Init_Timer4_PWM_SEUIL_PIR(void)
    {
    	//CCP2CON.7:CCP2CON.6=0b00 non implemente
    	//DC2B1:DC2B0=0b00 LSB du rapport cyclique
    	//CCP2M3:CCP2M0=0b1111 Mode PWM
    	CCP3CON = 0b00101111;
    
    	//T2CON.7=0 , non implemente
    	//T2OUTPS3:T2OUTPS0=0b0000, postcaler=0
    	//TMR2ON=0, timer2 en veille
    	//T2CKPS1:TCKPS0=0b11, prescaler = 16
    	T4CON =0b00000000; //0b00011001;     //T2CON = 0b00000011;
    	 
    	//on veut T(pwm)=1ms => F(pwm)=32Khz
    	//T(pwm)=[PR2+1]*4*Tosc*(Timer2 prescale value)=31*4*1/(4Mhz)=31µs
    	PR4 = 30;
    
    	//on veut un rapport cyclique de 0.8 
    	//T(duty cycle)= 0.8ms , CCPR2L:DC2B0=T(duty cycle)/(Tosc*(Timer 2 prescale value))= 0.250ms/(1/(4Mhz)*16)=
        //=80%
    	CCPR3L = 0b00010010;//65% =2.186    //0b00010100;65% =2.186V    //0b00010001; //75% //0b00000100 ; //0b01110000; //     
    	T4CONbits.TMR4ON = 1;
    	                                   
    }
    voila si sa peut t'aider a voir mes erreur

  24. #23
    jum0034

    Re : redefinition interruption 18F en C

    En fait quand j'enleve les 2 premier ligne de mon hex , ya tout qui fonctionne (interruption,mes fonction en .C.....) , voici mon hex:
    Code:
    :020000040000FA
    :0600000083EF05F0120081
    :04080800A7EF04F062
    :04081800DAEF04F01F
    :06082A000100220B00009A
    :0808300060000000540000000C
    :0C08440007D82FD87AD8768411D883907A
    :10085000FED712009268150E936EFB0E946E200E5A
    :10086000956EF70E966E9F0E976EEA0E986E1200BA
    :100870000101200E246F030E256F006B016B026BCC
    :10088000036B839C839E8394839883968392839047
    :100890008486869881828684266B276B859A859CC0
    :1008A0008196046B1200010ED26E800ED06E400E47
    :1008B000B16E070EB46ED00EF26EF16AF06AA16AE4
    :1008C0009E6A9F6AA26A9D6AA06A9F9C9D969D9C53
    :1008D0009D929D90A092A396120083843C0EE66E9A
    :1008E00073EC05F0E55283943C0EE66E73EC05F074
    :1008F000E55283843C0EE66E73EC05F0E55283947A
    :100900003C0EE66E73EC05F0E5521200CA843C0E14
    :10091000E66E73EC05F0E552CA943C0EE66E73EC9D
    :1009200005F0E552CA843C0EE66E73EC05F0E55224
    :10093000CA943C0EE66E73EC05F0E55212002F0EE1
    :10094000B76E766A1E0E776E120EB86E1200DACF90
    :10095000E4FFE2CFDAFFE9CFE4FFEACFE4FFF3CF31
    :10096000E4FFF4CFE4FF01EEDFF0000EE80403E360
    :10097000EECFE4FFFBD7E652F2A208D08392500EEE
    :10098000E66E5CEC05F0E5528382F292E55201EEF0
    :10099000DEF0000EE80403E3E5CFEDFFFBD7E5CF83
    :1009A000F4FFE5CFF3FFE5CFEAFFE5CFE9FFE5CFC1
    :1009B000DAFF1100D8CFE4FFE0CFE4FFE46EDACF36
    :1009C000E4FFE2CFDAFFE9CFE4FFEACFE4FFF3CFC1
    :1009D000E4FFF4CFE4FF01EEDFF0000EE80403E3F0
    :1009E000EECFE4FFFBD7E652E55201EEDEF0000E5B
    :1009F000E80403E3E5CFEDFFFBD7E5CFF4FFE5CF58
    :100A0000F3FFE5CFEAFFE5CFE9FFE5CFDAFFE550F9
    :0A0A1000E5CFE0FFE5CFD8FF1000AE
    :060A1A002A0EF66E080E24
    :100A2000F76E000EF86E01010900F550DA6F09004B
    :100A3000F550DB6F03E1DA6701D03DD00900F550D6
    :100A4000D56F0900F550D66F0900F550D76F090032
    :100A50000900F550E96E0900F550EA6E0900090039
    :100A60000900F550D86F0900F550D96F0900090049
    :100A7000F6CFDCF1F7CFDDF1F8CFDEF1D5C1F6FF2F
    :100A8000D6C1F7FFD7C1F8FF0101D85302E1D9530E
    :100A900007E00900F550EE6ED807F8E2D907F9D75C
    :100AA000DCC1F6FFDDC1F7FFDEC1F8FF0101DA07A7
    :080AB000000EDB5BBFD7120052
    :080AB800FF0EE350036EEF0E88
    :100AC00001D0F30EE76EE72E63EF05F00C0E026E19
    :100AD000E76AE72E69EF05F0022E68EF05F0032EB6
    :060AE00061EF05F01200B9
    :0A0AE600FF0EE350036E480E01D02E
    :100AF0004C0EE76EE72EFED7E76AE72EFED7032EF1
    :060B0000F7D7000012000F
    :0A0B060017EE00F027EE00F0F86A89
    :100B1000019CA68EA69C0DEC05F022EC04F0FDD7FE
    :020B20001200C1
    :0E0B2200BC02BC02BC02BC02BC02BC02BC0293
    :100B3000BC02BC02BC02BC02BC02A601A601A6010A
    :100B4000A601A601A601A601A601A601A601A6016D
    :100B5000A601A601A601A601A601A601A601A6015D
    :100B6000A60100B603BC0200000000000000000067
    :060B70000000000000007F
    :00000001FF
    l

  25. #24
    jum0034

    Re : redefinition interruption 18F en C

    le programme en C écrit a l'adresse 0x0000 ,alors qu'il ne devrai pas ,voici le map généré par mplab:
    Code:
    MPLINK 3.40, Linker
    Linker Map File - Created Tue May 12 17:41:55 2009
    
                                     Section Info
                      Section       Type    Address   Location Size(Bytes)
                    ---------  ---------  ---------  ---------  ---------
                   _entry_scn       code   0x000000    program   0x000006
                  High_Vector       code   0x000808    program   0x000004
                   Low_Vector       code   0x000818    program   0x000004
                       .cinit    romdata   0x00082a    program   0x00000e
                 .code_main.o       code   0x000844    program   0x0001d6
                   _cinit_scn       code   0x000a1a    program   0x00009e
                 D10KTCYXCODE       code   0x000ab8    program   0x00002e
                  D1KTCYXCODE       code   0x000ae6    program   0x000020
                 _startup_scn       code   0x000b06    program   0x00001c
             .romdata_c018i.o    romdata   0x000b22    program   0x000000
              .idata_main.o_i    romdata   0x000b22    program   0x000054
              .romdata_main.o    romdata   0x000b22    program   0x000000
             .idata_c018i.o_i    romdata   0x000b76    program   0x000000
                .code_c018i.o       code   0x000b76    program   0x000000
                    MATH_DATA      udata   0x000000       data   0x000002
                    DELAYDAT2      udata   0x000002       data   0x000001
                    DELAYDAT1      udata   0x000003       data   0x000001
                .idata_main.o      idata   0x000060       data   0x000054
                .udata_main.o      udata   0x000100       data   0x0000d5
               .udata_c018i.o      udata   0x0001d5       data   0x00000a
               .idata_c018i.o      idata   0x0001df       data   0x000000
                      My_Var1      udata   0x0001df       data   0x000000
                       .stack      udata   0x000700       data   0x000100
                SFR_UNBANKED0      udata   0x000f6b       data   0x000095
    
    
    
                                  Program Memory Usage 
                                   Start         End      
                               ---------   ---------      
                                0x000000    0x000005      
                                0x000808    0x00080b      
                                0x000818    0x00081b      
                                0x00082a    0x000837      
                                0x000844    0x000b75      
                846 out of 32457 program addresses used, program memory utilization is 2%
    
    
    
                                  Symbols - Sorted by Name
                         Name    Address   Location    Storage File                     
                    ---------  ---------  ---------  --------- ---------                
                 BUZZER_2_BIP   0x0008da    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
                       D10K_1   0x000ac4    program     static C:\MCC18\SRC\DELAYS\18CXX\d10ktcyx.asm
                        D10Kl   0x000ad0    program     static C:\MCC18\SRC\DELAYS\18CXX\d10ktcyx.asm
                        D10Kx   0x000ac2    program     static C:\MCC18\SRC\DELAYS\18CXX\d10ktcyx.asm
                        D1K_1   0x000af2    program     static C:\MCC18\SRC\DELAYS\18CXX\d1ktcyx.asm
                         D1Kx   0x000af0    program     static C:\MCC18\SRC\DELAYS\18CXX\d1ktcyx.asm
                 Delay10KTCYx   0x000ab8    program     extern C:\MCC18\SRC\DELAYS\18CXX\d10ktcyx.asm
                  Delay1KTCYx   0x000ae6    program     extern C:\MCC18\SRC\DELAYS\18CXX\d1ktcyx.asm
                      Init_IT   0x0008a6    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
    Init_Timer4_PWM_SEUIL_PIR   0x00093e    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
                    Init_port   0x000854    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
               Init_variable_   0x000870    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
               Interrupt_High   0x000808    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
                Interrupt_Low   0x000818    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
               VALIDATION_LED   0x00090c    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
           _D10KTCYXCODE_0010   0x000ac8    program     static C:\MCC18\SRC\DELAYS\18CXX\d10ktcyx.asm
           _D10KTCYXCODE_001C   0x000ad4    program     static C:\MCC18\SRC\DELAYS\18CXX\d10ktcyx.asm
            _D1KTCYXCODE_0010   0x000af6    program     static C:\MCC18\SRC\DELAYS\18CXX\d1ktcyx.asm
            _D1KTCYXCODE_0016   0x000afc    program     static C:\MCC18\SRC\DELAYS\18CXX\d1ktcyx.asm
           ___return_lbl00000   0x000004    program     static                          
           ___return_lbl00001   0x000b20    program     static                          
           ___return_lbl00002   0x000ab6    program     static                          
                    _do_cinit   0x000a1a    program     extern C:\mcc18\src\startup\c018i.c
                       _entry   0x000000    program     extern C:\mcc18\src\startup\c018i.c
                     _startup   0x000b06    program     extern C:\mcc18\src\startup\c018i.c
         check_Interrupt_High   0x00094e    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
          check_Interrupt_Low   0x0009b4    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
                    copy_loop   0x000a8c    program     static                          
                copy_one_byte   0x000a92    program     static                          
                         done   0x000ab6    program     static                          
                 done_copying   0x000aa0    program     static                          
                         loop   0x000b1a    program     static                          
                         main   0x000844    program     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\main.c
                         test   0x000a34    program     static                          
                       ADCON0   0x000fc2       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                   ADCON0bits   0x000fc2       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                       ADCON1   0x000fc1       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                   ADCON1bits   0x000fc1       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                       ADCON2   0x000fc0       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                   ADCON2bits   0x000fc0       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                        ADRES   0x000fc3       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                       ADRESH   0x000fc4       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                       ADRESL   0x000fc3       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                        BIT_0   0x0001c8       data     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\define.h
                      BIT_A_1   0x0001cc       data     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\define.h
          BLOCK_NUMBER_MEMORY   0x0001ce       data     extern C:\Test prog BOOTLOADER LED CLIGNOTANTE\define.h
                          BSR   0x000fe0       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                      CCP1CON   0x000fbd       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                  CCP1CONbits   0x000fbd       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                      CCP2CON   0x000fba       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                  CCP2CONbits   0x000fba       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                      CCP3CON   0x000fb7       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                  CCP3CONbits   0x000fb7       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                      CCP4CON   0x000f73       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                  CCP4CONbits   0x000f73       data     extern C:\MCC18\SRC\PROC\p18f6520.asm
                      CCP5CON   0x000f70       data     extern C:\MCC18\SRC\PROC\p18f6520.asm......................................................
    même en changeant l'adresse _entry_scn dans le C018i.c et C018.c , sa ne change rien , ou doit-je modifier l'adresse de depart?

  26. #25
    jum0034

    Re : redefinition interruption 18F en C

    comment redéfinir en C l'adresse de départ du prog ,car mon prog réécrit sur le boot?

  27. #26
    jum0034

    Re : redefinition interruption 18F en C

    seb.26 qu'es t'en pense ? , je t'ai mis toute mes sources

  28. #27
    Seb.26

    Re : redefinition interruption 18F en C

    Citation Envoyé par jum0034 Voir le message
    même en changeant l'adresse _entry_scn dans le C018i.c et C018.c , sa ne change rien , ou doit-je modifier l'adresse de depart?
    Effectivement, il faut que ton boot loader ait son propre secteur en Flash, et le reste du code doit être placé ailleur.

    pour cela, il faut que tu vois dans la doc de ton compilo, cherche comment forcer l'adr de génération du code (voir le linker).

    Ensuite, tu regarde dans la doc de ton uCPU la répartition des secteurs en flash pour faire ton choix.
    << L'histoire nous apprend que l'on apprend rien de l'histoire. >>

  29. #28
    jum0034

    Re : redefinition interruption 18F en C

    je viens de faire un test :

    j ai enlevé la ligne FILES c018i.O
    dans mon linker

    et la a l'adresse 0x0000 de mon prog en C il n'y a plus de données ,donc pas de réécriture sur le boot.

    est ce que le fait d'enlever cette ligne, mon prog ne risque pas d'être perturbé , car il sans cette ligne il tourne bien.

  30. #29
    jum0034

    Re : redefinition interruption 18F en C

    qu'es t'en pense sb.26?

  31. #30
    jum0034

    Re : redefinition interruption 18F en C

    s est bon , j'ai trouvé.
    en fait pour modifier l'adresse de démarrage de mon soft en C , il faut modifier le CO18i.C :

    Code:
    #pragma code _entry_scn=0x00082A
    puis une fois le C018i.C modifier ,il faut aller dans C:MCC18/src/startup/ ,et lancer le build.bat qui va creer le nouveau C018i.o

    et voila est mon soft démarre bien a l'adresse 0x82A

    merci quand meme seb.26

Discussions similaires

  1. interruption I2C pic 18F
    Par jum0034 dans le forum Électronique
    Réponses: 11
    Dernier message: 05/04/2012, 14h46
  2. icprog + 18F + Config
    Par invite85f50251 dans le forum Électronique
    Réponses: 6
    Dernier message: 26/06/2009, 15h37
  3. pic 18F et L298
    Par invite35c29b80 dans le forum Électronique
    Réponses: 5
    Dernier message: 23/03/2009, 08h11
  4. Programmation 18F
    Par UNTOUCHABLE dans le forum Électronique
    Réponses: 9
    Dernier message: 10/12/2008, 17h04
  5. Mode capture sur 18F
    Par invited6358b87 dans le forum Électronique
    Réponses: 0
    Dernier message: 24/02/2007, 15h54
Découvrez nos comparatifs produits sur l'informatique et les technologies.