Mikroc

Fermé
mido - 24 févr. 2011 à 09:58
 azeraqw - 21 juin 2011 à 21:14
slt a tous ,je suis un débutant pour ce la je veux que vous m'aidez sur mikroc mon programme est un afficheur LCD qui affiche un lettre 'A' a base b'un UART ma question est ce qu'il manque mon programme ci dessous ? merci de me répondre


sbit LCD_RS at RC2_bit;
sbit LCD_EN at RC1_bit;
sbit LCD_D7 at RC7_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D4 at RC4_bit;

// Pin direction
sbit LCD_RS_Direction at TRISC2_bit;
sbit LCD_EN_Direction at TRISC1_bit;
sbit LCD_D7_Direction at TRISC7_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D4_Direction at TRISC4_bit;
void interupt();
char RFID;
void main ()
{
INTCON.GIE = 1;
INTCON.PEIE = 1;
PIE1.RCIE = 1;
TXSTA|=0x2E;
RCSTA|=0x90;
PORTD=0x00;
TRISD=0x00;
Lcd_Init();
lcd_Cmd(_LCD_CURSOR_OFF);
while(1)
{
uart1_init(9600);
uart1_write_text('A');
lcd_out(1,3,RFID);
}
}
void interupt()
{
if (PIR1.RCIF==1)
{
RFID=RCREG;
PIR1.RCIF=0;
}


}

4 réponses

somehow Messages postés 84 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 2 mars 2011 11
24 févr. 2011 à 10:48
Je ne suis absolument pas sûr (vu que je n'ai jamais touché à Mikroc), mais pour moi

while(1)
{
uart1_init(9600);
uart1_write_text('A');
lcd_out(1,3,RFID);
}

C'est une boucle infinie... Et ça, c'est jamais bon.
0
mais c ne fonctionne jamais !!!pourquoi
0
somehow Messages postés 84 Date d'inscription mercredi 19 janvier 2011 Statut Membre Dernière intervention 2 mars 2011 11
24 févr. 2011 à 16:03
En français ? J'ai du mal à te comprendre. Peut être tu voulais dire "ça" ? Comme je t'ai dis, je ne connais pas Mikroc, donc j'ai repéré l'erreur la plus basique que tu aies faite, à savoir la boucle infinie.

Ta fonction interrupt, tu ne l'utilises jamais. C'est peut être aussi pour ça que ça bug ?

void interupt()
{
if (PIR1.RCIF==1)
{
RFID=RCREG;
PIR1.RCIF=0;
}

}

Tu dois avoir un cours qui t'explique en détail, non ?
0
oui c vrais mais comment uart va envoiyer le cara ctere a l'afficheur
0
loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
25 févr. 2011 à 00:58
Il faut savoir que 'microC' est un compilateur C dédié aux microcontroleurs; il existe donc certaines spécificités.
* Par exemple la fonction 'interrupt' (avec 2 'r' !!!) sera automatiquement appellée lors d'une interruption déclenchée par un signal arrivant sur le microcontrôleur (à condition que cette interruption ait bien sûr été préalablement autorisée). Toutes les interruptions appellent la même fonction -> il faudra donc éventuellement faire un tri à l'entrée de la fonction.
* Il est normal de trouver une boucle infinie dans le 'main'. En effet, dans un microcontrôleur, le programme sert en même temps d'OS; c'est donc au 'main' d'assurer longue vie au programme 'sinon le programme s'arrête avant que l'on ait vu quoique ce soit !
Par contre ce qui est beaucoup moins normal, c'est d'y trouver l'initialisation d'un port série à chaque tour de boucle.
* Les fonctions de la librairie LCD commence par 'Lcd' (1ère lettre en majuscule). D'autre part, on doit monter l'afficheur d'une certaine manière et le déclarer à la fonction 'Lcd_Init' (voir la doc).Un exemple y est donné:
void main()
{
  TRISB = 0;               // PORTB is output
  Lcd_Init(&PORTB);        // Initialize LCD connected to PORTB
  Lcd_Cmd(Lcd_CLEAR);      // Clear display
  Lcd_Cmd(Lcd_CURSOR_OFF); // Turn cursor off
  Lcd_Out(1, 1, text);     // Print text to LCD, 2nd row, 1st column
}
Il est toujours possible d'utiliser une connexion particulière en faisant appel aux fonctions 'Lcd_Custom_...'.
Bonne continuation.
0
merci de me répondre (^_^),je corrige mon programme de cette façon mais maintenant pour afficher une chaîne de caractère sur LCD:
sbit LCD_RS at RC4_bit;
sbit LCD_EN at RC5_bit;
sbit LCD_D7 at RC3_bit;
sbit LCD_D6 at RC2_bit;
sbit LCD_D5 at RC1_bit;
sbit LCD_D4 at RC0_bit;

// Pin direction
sbit LCD_RS_Direction at TRISC4_bit;
sbit LCD_EN_Direction at TRISC5_bit;
sbit LCD_D7_Direction at TRISC3_bit;
sbit LCD_D6_Direction at TRISC2_bit;
sbit LCD_D5_Direction at TRISC1_bit;
sbit LCD_D4_Direction at TRISC0_bit;
void interrupt();
char RFID[5];
int cmp=0;
int i=0;


void main ()
{

INTCON = 0xC0;
TXSTA|=0x2E;
RCSTA|=0x90;
TRISC=0x00;
PORTC=0x00;

Lcd_Init();
lcd_cmd(_lcd_clear);
lcd_Cmd(_LCD_CURSOR_OFF);

while(1)
{
uart1_init(9600);
Delay_ms(100);
uart1_write_text("hello");
for(i=0;i<5;i++)
{
lcd_chr(1,i+1,RFID[cmp-1]);

}

}

}

void interrupt()
{
if (PIR1.RCIF==1)
{

RFID[cmp]=RCREG;
cmp++;
PIR1.RCIF=0;

}
}
il est compiler mais la simulation sur l'isis ne fonctionne jamais malgré le schéma correcte
0
je ne vois pas pourquoi vous rendez les choses difficile alors que c'est simple
voila comment
//commentaire : a chaque fois que tu utilise un afficheur tu doit faire la declaration suivante ;pour le branchement du lcd//

sbit LCD_RS at RB4_bit;
sbit LCD_EN at RB5_bit;
sbit LCD_D4 at RB0_bit;
sbit LCD_D5 at RB1_bit;
sbit LCD_D6 at RB2_bit;
sbit LCD_D7 at RB3_bit;

sbit LCD_RS_Direction at TRISB4_bit;
sbit LCD_EN_Direction at TRISB5_bit;
sbit LCD_D4_Direction at TRISB0_bit;
sbit LCD_D5_Direction at TRISB1_bit;
sbit LCD_D6_Direction at TRISB2_bit;
sbit LCD_D7_Direction at TRISB3_bit;
//commentair: fin de la declaration//

void main() {
lcd_init();
lcd_out(1,1,"votre texte ici");

}
0