Répondre à la discussion
Affichage des résultats 1 à 3 sur 3

bus I2C



  1. #1
    Maje

    bus I2C


    ------

    Bonjour,
    Je réalise un bus I2C en assembleur avec un microcntroôleur 80C552 vers une mémoire EEPROM 8582.
    J'ai déjà codé l'emission desdonnées, mais le programme n'entre en interruption et donc n'envoie les données qu'aléatoirement. Il met parfois plusieures minutes pour cela.
    Voila le programme pour plus d'infos.

    Merci de votre aide.



    Code:
    include reg552.inc
    
    
    	;Positionner des bits utiles a la routine
    
    FIN_TR equ 07fh 
    
    	;Donnees immediates a ecrire dans le registre S1CON
    	;(cas du 80C552 version 12Mhz, l'I2C fonctionnant a 100kbit/s)
    
    ENS1_NOTSTA_STO_NOTSI_AA_CR0 equ 0d5h ;genere un stop (CR0 equ 100khz)
    ENS1_NOTSTA_NOTSTO_NOTSI_AA_CR0 equ 0c5h ;relache le BUS et envoie acquittement
    ENS1_NOTSTA_STO_NOTSI_NOTAA_CR0 equ 0c1h ;relache le bus et n'envoie pas l'acquittement
    ENS1_STA_NOTSTO_NOTSI_AA_CR0 equ 0e5h ;relache le bus et le reprends avec un STA
    
    	;Donnees immediates generales
    	
    OWNSLA equ 031h ;adresse personnelle
    ENSIO1 equ 0a0h ; EA+ES1 autorise l'interrupion SIO1 doit etre ecrit dans ENI0
    OFFSET equ 050h ;adresse de base des routines de traitement d'interruption liees
    ADRESC_W equ 0a0h ;ex. adresse esclave + bit ecriture
    ADRESC_R equ 0a1h ;ex. adresse esclace + bit lecture
    FIN equ 080h ;indic de fin de message
    FIN1 equ 040h
    
    	;Emplacements de registres particuliers en RAM internes
    
    MTD equ 030h ;adresse de base MST/TRX/DATA
    MRD equ 038h ;adresse de base MST/REC/DATA
    SRD equ 040h ;adresse de base SLV/REC/DATA
    STD equ 048h ;adresse de base SLV/TRX/DATA
    BACKUP equ 053h ;retour de backup de NOMBOCT
    					 ;pour faire revenir de sauvegarde NUMBYTMST en cas de perte d'arbritage
    NOMBOCT equ 052h ;nombre d'octets a transmettre ou recevoir
    SLA equ 0a0h ;contient l'adresse de l'esclave et le sens de transfert (R/W) a transmettre
    HADD equ 050h ;octet d'adresse haute des differents traitements dont l'adresse basse
    				  ;est fournie par la valeur du registre de status S1STA 
    DAT equ 70h
    
    	;Routine d'utilisation
    Code at 4100h
    
    INIT:
    		mov p4,#00h ;!!! TEST !!!
    		mov S1ADR,#OWNSLA ;chargement adr perso + autorisation
    		mov sp,#0a0h ;positionnement du pointeur de pile
    		setb p1.6 ;p1.6 niveau haut (SCL)
    		setb p1.7 ;p1.7 niveau haut (SDA)
    		mov HADD,#OFFSET
    		orl IEN0,#ENSIO1 ;autorisation interruption SIO1
    		mov S1CON,#ENS1_NOTSTA_NOTSTO_NOTSI_AA_CR0 ;initialisation mode maitre
    		;caracteres a envoyer
    		mov r1,#DAT
    		mov @r1,#0000h
    		inc r1
    		mov @r1,#0041h
    		inc r1
    		mov @r1,#0042h
    		mov p4,#03h ;!!! TEST !!!
    
    
    ever :
    		mov SLA,#ADRESC_W  ;W=ecriture
    		mov NOMBOCT,#3
    		acall trans
    		acall boucle
    ici:
    		mov p4,#00h
    		lcall 1212h
    
    ;routine de départ de transmission "maitre"
    
    trans:
    		mov FIN_TR,#000h ;mise a zero indic fin de message
    		mov S1CON,#ENS1_STA_NOTSTO_NOTSI_AA_CR0 
    		ret 
    
    boucle:
    		mov a,FIN_TR
    		jbc acc.6,etia
    		jbc acc.7,fini
    		mov p4,S1STA
    		sjmp boucle
    
    etia:
    		acall trans
    		sjmp boucle
    		
    
    fini:
    		ret
    
    code at 402bh
    	push psw
    	push S1STA
    	push HADD
    	ret
    
    code at 5000h
    	acall fct_00
    	pop psw
    	reti
    
    code at 5008h
    	acall fct_08
    	pop psw
    	reti
    
    code at 5018h
    	acall fct_18
    	pop psw
    	reti
    
    code at 5020h
    	acall fct_20
    	pop psw
    	reti
    
    code at 5028h
    	acall fct_28
    	pop psw
    	reti
    
    fct_00:
    		mov S1CON,#ENS1_NOTSTA_STO_NOTSI_AA_CR0 ;raz SI mise a 1 de STO et AA
    		mov FIN_TR,#FIN1
    			mov p4,#0aah
    		ret
    
    fct_08: ;1ere
    			lcall 1212h
    		mov p4,#1Fh;!!! TEST !!!
    		mov S1DAT,SLA ;chargement de SLA+R/W ds tampon
    		mov S1CON,#ENS1_NOTSTA_NOTSTO_NOTSI_AA_CR0 ;raz SI
    		mov r1,#DAT ; adresse puis data 2 octets
    		mov BACKUP,NOMBOCT ;sauvegarde valeur initiale
    		ret
    
    fct_18: ;2eme
    		mov S1DAT,@r1
    		mov S1CON,#ENS1_NOTSTA_NOTSTO_NOTSI_AA_CR0 ;raz SI et AA
    		mov p4,#00110111b;!!! TEST !!!
    
    		ret
    
    fct_20: ;Si Ack=0
    		mov S1CON,#ENS1_NOTSTA_STO_NOTSI_AA_CR0 ;mise a 1 STO, raz SI
    		mov NOMBOCT, BACKUP
    				mov FIN_TR,#FIN1
    		mov p4,#01h;!!! TEST !!!
    		ret
    
    fct_28: ;3eme
    		djnz NOMBOCT,CONTINU
    		mov S1CON,#ENS1_NOTSTA_STO_NOTSI_AA_CR0 ;raz SI et mise a 1 de AA
    		mov FIN_TR,#FIN ;positionnement indicateur de fin de transmission
    		mov p4,#11101110b;!!! TEST !!!
    		sjmp fin_28
    CONTINU:
    
    		inc r1
    		mov S1DAT,@r1
    		mov S1CON,#ENS1_NOTSTA_NOTSTO_NOTSI_AA_CR0 ;raz SI et AA
    		mov p4,#11001100b;!!! TEST !!!
    fin_28:
    
    		ret
    		end

    -----
    Dernière modification par HULK28 ; 30/06/2008 à 09h16. Motif: Ajout des balises [CODE]...[/CODE]

  2. #2
    Maje

    Re : bus I2C

    Personne n'a de solution ??? MErci de m'aider

  3. #3
    houcemgo

    Re : bus I2C

    Salut,
    Je croi qu'il faut que tu minimise autrement dit tu resume ton probleme pour qu'on puisse t'aider

Discussions similaires

  1. I2C : bus collision
    Par nusnus dans le forum Électronique
    Réponses: 15
    Dernier message: 26/10/2007, 11h42
  2. Electronique : bus I2C
    Par Mr. Ledoux dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 10/10/2007, 11h37
  3. Bus I2C
    Par Eleomir dans le forum Électronique
    Réponses: 15
    Dernier message: 15/04/2007, 11h58
  4. Bus I2c
    Par chrichri51 dans le forum Électronique
    Réponses: 6
    Dernier message: 30/10/2005, 14h53
  5. création bus I2C?
    Par thuglife dans le forum Électronique
    Réponses: 1
    Dernier message: 05/10/2005, 16h51
Découvrez nos comparatifs produits sur l'informatique et les technologies.