reaction pic 16f628 i2c
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

reaction pic 16f628 i2c



  1. #1
    invite446c87f8

    reaction pic 16f628 i2c


    ------

    Bonjour a tous,
    Voila j'ais realiser un programme pour pic16f628 sous MPLAB avec le compilateur HI-TECH. Ce programme permet de piloté 8 leds. Il sagit d'un chenillard dont les commandes sont choisi grâce a des caractères envoyé par le bus I2C. tous fonctionne correctement sauf que quand j'envois les commandes par le bus le pic met environ 2sec pour réagir. Ce code n'est pas du tous optimisé et j'aurais besoin d'aide. Merci

    #include<pic.h>

    __CONFIG(0x3f10);

    char rec;
    char canal1=103;
    char canal2=101;
    int def=0;
    bit inv=0;
    bit v=0;
    int val=0;
    int inc=0;
    bit bloquer;
    bit ouverture;
    int canal;


    static void interrupt inter()
    {
    if(RCIF==1)
    {
    CREN=0;
    rec=RCREG;
    CREN=1;
    }
    if(OERR==1)
    {
    CREN=0;
    CREN=1;
    }
    if(INTF==1)
    {

    v=1;
    def=val;
    INTF=0;


    }
    if(bloquer==0)
    {
    if(ouverture==1)
    {if(canal==2)
    {canal2=(rec-100); bloquer==1; canal=3;}
    if(canal==1)
    {canal1=(rec-100); canal=2;}
    }
    if(rec=='a'&&bloquer==0&&ouver ture==0)
    {ouverture=1; bloquer=0;}
    if(rec!='a'&&ouverture==0)
    {ouverture=0; bloquer=1;}}
    if(rec=='z')
    {ouverture=0; bloquer=0; canal=1;}
    }

    void tempo(int delai)
    {
    int t;
    int t1;
    for(t=0;t<59;t++)
    {for(t1=0;t1<delai;t1++){}}
    }

    void chen()
    {
    PORTA=0x00;PORTB=0x00;
    switch(def)
    {
    case 0:{RA0=1;break;}
    case 1:{RA1=1;break;}
    case 2:{RA2=1;break;}
    case 3:{RA3=1;break;}
    case 4:{RB4=1;break;}
    case 5:{RB5=1;break;}
    case 6:{RA6=1;break;}
    default:{RA7=1;}
    }
    v=0;
    }

    void chenfond()
    {
    int i;
    int j;

    for(i=0;i<80;i++)
    {
    for(j=0;j<80;j++)
    {if(j>i){
    switch(def)
    {
    case 0:{RA0=1;break;}
    case 1:{RA1=1;break;}
    case 2:{RA2=1;break;}
    case 3:{RA3=1;break;}
    case 4:{RB4=1;break;}
    case 5:{RB5=1;break;}
    case 6:{RA6=1;break;}
    default:{RA7=1;}
    }
    v=0;
    }
    if(j<=i){PORTA=0x00;PORTB=0x00 ;}}

    }

    }

    void defil()
    {
    switch(def)
    {
    case 0:{RA0=1;RA7=0;break;}
    case 1:{RA0=0;RA1=1;break;}
    case 2:{RA1=0;RA2=1;break;}
    case 3:{RA2=0;RA3=1;break;}
    case 4:{RA3=0;RB4=1;break;}
    case 5:{RB4=0;RB5=1;break;}
    case 6:{RB5=0;RA6=1;break;}
    default:{RA7=1;RA6=0;}
    }
    tempo(40);
    def++;
    if (def>7){def=0;}
    }

    void defilinv()
    {
    switch(def)
    {
    case 0:{RA0=1;RA7=0;RA1=0;break;}
    case 1:{RA0=0;RA1=1;RA2=0;break;}
    case 2:{RA1=0;RA2=1;RA3=0;break;}
    case 3:{RA2=0;RA3=1;RB4=0;break;}
    case 4:{RA3=0;RB4=1;RB5=0;break;}
    case 5:{RB4=0;RB5=1;RA6=0;break;}
    case 6:{RB5=0;RA6=1;RA7=0;break;}
    default:{RA7=1;RA6=0;RA0=0;}
    }
    tempo(20);
    if (inv==0){def++;}
    if (inv==1){def--;}
    if (def>7){inv=1;}
    if (def<=0){inv=0;}
    }

    void fondu()
    {
    int i;
    int j;

    for(i=0;i<150;i++)
    {
    for(j=0;j<150;j++)
    {if(j<=i){PORTA=0x00;PORTB=0x0 0;}
    if(j>i){PORTA=0xFF;PORTB=0xFF; }}

    }

    }

    void Serial_Init(void)
    {
    RCIE=1;
    RCSTA=0b10010000;
    TXSTA=0b00100110;
    SPBRG=25;

    }

    void Serial_Putchar(unsigned char cD)
    {
    while(!TXIF);
    TXREG=cD;
    while(!TRMT);
    }

    void main()
    {
    CMCON=7;
    TRISB=0xCf;
    TRISA=0x30;
    GIE=1;INTE=1; RCIE=1;
    Serial_Init();
    while(1)
    {
    switch(canal1)
    {
    case 0:{fondu(); break;}

    case 1:{defil();break;}

    case 2:{defilinv();break;}

    case 3:{
    while(v==0)
    {
    int b;
    for(b=0;b<8;b++)
    {val=b;}
    }
    chen();
    break;
    }

    case 4:{
    while(v==0)
    {
    int b;
    for(b=0;b<8;b++)
    {val=b;}
    }
    chenfond();
    break;
    }

    case 5:{PORTA=0xFF;PORTB=0xFF;break ;}

    default:{PORTA=0x00;PORTB=0x00 ;}
    }
    }
    }

    -----

  2. #2
    invitef86a6203

    Re : reaction pic 16f628 i2c

    Il n'ya pas d'I2C la dedans mais du RS232.

    Ton flag de sortie "v" est toujours à 0 !
    en plus tu ne l'initialise pas avant de faire le switch.

Discussions similaires

  1. PIC 16f628
    Par invitee1bdeaaa dans le forum Électronique
    Réponses: 9
    Dernier message: 31/08/2009, 16h53
  2. pic 16f628
    Par invite72e4aa92 dans le forum Électronique
    Réponses: 1
    Dernier message: 23/01/2009, 16h54
  3. Pic 16f628
    Par invite4164fd5c dans le forum Électronique
    Réponses: 9
    Dernier message: 16/12/2006, 17h15
  4. pic 16F628
    Par LTHOMAS dans le forum Électronique
    Réponses: 7
    Dernier message: 29/03/2006, 22h13
  5. pic 16F628
    Par invitea78e17c9 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/03/2004, 22h04
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...