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

Programme C RS232=>16f628=>LCD



  1. #1
    effet_kisscool

    Programme C RS232=>16f628=>LCD


    ------

    Quelqu'un peut m'expliquer ce qu'il ne va pas ???

    j'ai construit un boitier permettant par le biais d'une prise DB9, d'enregistrer chaque donnée qui arrive dans une case mémoire . lorsque je le désire j'appui sur BP2 qui doit afficher a l'écran les données de la premiere trame, puis la 2eme ...etc... , et la il se pose DEUX problèmes... si je laisse comme suit, rien ne s'affiche à l'écran, l'interruption bloque tout, je sais que c'est l'interuption car quand je l'enleve les deux boutons fonctionne... mais si je détache le "#int_RDA()" et le reste de l'interruption (je veux dire qu'il y a quelque chose entre les deux ! ) elle ne bloque plus rien ... ! Donc est ce que je peux les laisser détachées ?
    Deuxième problème en admettant que l'interruption ne bloque rien... j'envoi par le biais de l'ordi un "d" , je devrait voir à l'écran son code en décimal (voir mon printf) , mais au lieu de ca il m'afiche un "0", si je rappui un "-5" etc etc.. du caca quoi !!
    Qu'est ce que j'ai fai de mal ?
    Toutes les suggestions sont les bienvenues !!

    Programme :
    Code:
    #include "C:\Documents and Settings\pc\Bureau\GOUDET PROJET 2008\lcd test\test.h"
    #include <LCD628.C>
    #use rs232(baud=2400,parity=N,xmit=PIN_B2,rcv=PIN_B1,bits=8)
    
    //================================================== ================================
    #define BP1 input(pin_B0)
    #define BP2 input(pin_B5)
    //=======================
    int x=0,y=0;
    int d[50];
    //=======================
    
    #int_rda //reception de la liaison serie en interruption
    void RDA_isr()
     {
    if(RCIF)
    	{
    	d[x]=getc(); // enregistrer la donnée dans d[x]
    	y=x; // égalité
    	x++; // incrémentation
    	}
     }
    
    /* definition des fonctions ================================================== ====*/
    
    void affi_bienvenue(); //affichage mode manuel
    
    /* definitions des fonctions ================================================== ===*/
    
    
    void affi_bienvenue()
    {
    printf(displays,"\f Banc Test 2008 ");
    printf(displays,"\n Goudet--Lourds \n");
    delay_ms(2000);
    printf(displays,"\f Entreprise ");
    printf(displays,"\n Flash Elek \n");
    delay_ms(2000);
    printf(displays,"\f Responsable ");
    printf(displays,"\n Jean Gougeron \n");
    delay_ms(2000);
    printf(displays,"\f");
    }
    
    
     
    //================================================== ===============================
    void main()
    {
    
    setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1); // Quartz 4MHz
    setup_timer_1(T1_DISABLED); // pas de timer T1
    setup_timer_2(T2_DISABLED,0,1);// pas de timer T2
    setup_comparator(NC_NC_NC_NC); // comparateur pas utilisés
    setup_vref(FALSE); // pas de tension de référence (automatique avec CCS C)
    lcd_init(); // initialisation LCD
    enable_interrupts(GLOBAL);
    enable_interrupts(INT_RDA);
    
    
    
    
    while(true)
    	{
    	if (BP1==0) // si appui sur le bouton BP1
    		{
    		affi_bienvenue();
    		}
    
    	if (BP2==0) // si appui sur le bouton BP2
    
    		{
    		delay_ms(1500); // plus de 1.5 secondes
    		if (!BP2)
    
    			{
    			x=0; // on réinitialise y,x en faisant clignoter
    			y=0; // " réinisialisation " à l'écran 3 fois
    			printf(displays,"\freinisialisation");
    			printf(displays,"\n en cours... ");
    			delay_ms(500);
    			printf(displays,"\f");
    			delay_ms(500);
    			printf(displays,"\freinisialisation");
    			printf(displays,"\n en cours... ");
    			delay_ms(500);
    			printf(displays,"\f");
    			delay_ms(500);
    			printf(displays,"\freinisialisation");
    			printf(displays,"\n en cours... ");
    			delay_ms(500);
    			printf(displays,"\f");
    			}
    	
    		else // sinon
    			{
    			printf(displays,"\f"); // on efface l'écran
    			printf(displays,"%d",d[y]); // on affiche le caractère dans buffer[y]
    			y++; // puis on incrémente y
    			}
    	
    		}
    	
    	}
    }

    -----
    Dernière modification par HULK28 ; 31/05/2008 à 12h31. Motif: Merci d'utiliser les balises CODE ([CODE]...[/CODE]

Sur le même thème :

Discussions similaires

  1. Programme sur un 16F628 (UART)
    Par satora dans le forum Électronique
    Réponses: 0
    Dernier message: 07/04/2008, 22h47
  2. problème de chargement de programme 16f628
    Par silvo dans le forum Électronique
    Réponses: 1
    Dernier message: 19/09/2007, 01h38
  3. LCD HD44780 ---> programme C
    Par Bullrap dans le forum Électronique
    Réponses: 3
    Dernier message: 16/02/2005, 15h24
  4. Programme LCD ATMEL
    Par JP dans le forum Électronique
    Réponses: 8
    Dernier message: 30/10/2003, 18h44
  5. A l'aide pour mon programme du 16F628
    Par bison dans le forum Électronique
    Réponses: 5
    Dernier message: 18/06/2003, 23h47
Découvrez nos comparatifs produits sur l'informatique et les technologies.