help for reading data using serial port

Post your requests and ideas for the mikroElektronika website & forums.
Post Reply
Author
Message
majdi_slimi
Posts: 3
Joined: 13 Feb 2014 12:22

help for reading data using serial port

#1 Post by majdi_slimi » 12 Apr 2014 18:35

hi everybody i am an engenier student and i am a beginner in mikro c
i have a projet that sends data using com port and it will be displayed using 7 segment displays.
when i send data for the first time i will be displayed perfectly but when i send data again 7 segment displays still display the old data :(
this is my isis project
and my mikro c program
hope that yo help me
************************************************************

Code: Select all

unsigned short count1;
char count;
char message[20]={0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; //initialisation du message
/*******************************************************************************/
unsigned short mask(char num) {  //fonction affichaage de chaque entier
  switch (num) {
  case '0' : return 0xFC;
  case '1' : return 0x60;
  case '2' : return 0xDA;
  case '3' : return 0xF2;
  case '4' : return 0x66;
  case '5' : return 0xB6;
  case '6' : return 0xBE;
  case '7' : return 0xE0;
  case '8' : return 0xFE;
  case '9' : return 0xF6; } //case end
}
/*******************************************************************************/
void decodeur(int B){  //decodage pour l'affichage de chaque digit
  switch (B) {
  case 0 : PORTD.F4=1;PORTD.F5=0;break;
  case 1 : PORTD.F4=0;PORTD.F5=1;break;
  case 2 : PORTD.F4=1;PORTD.F5=1;break;
  case 3 : PORTD.F6=1;PORTD.F7=0;break;
  case 4 : PORTD.F6=0;PORTD.F7=1;break;
  case 5 : PORTD.F6=1;PORTD.F7=1;break;
  case 6 : PORTE.F1=1;PORTA.F1=0;break;
  case 7 : PORTE.F1=0;PORTA.F1=1;break;
  case 8 : PORTE.F1=1;PORTA.F1=1;break;
  case 9 : PORTE.F2=1;PORTA.F5=0;break;
  case 10 : PORTE.F2=0;PORTA.F5=1;break;
  case 11 : PORTE.F2=1;PORTA.F5=1;break;
  }
}
/*******************************************************************************/
void Send_Data( unsigned short A){
  unsigned short Mask=0b00000001 ,t,F;
  for (t=0;t<8;t++){
    F = A & Mask;
    if(F==0) PORTB.F0 = 0;
    else PORTB.F0 = 1;
    PORTB.F1 = 1;
    PORTB.F1 = 0;
    Mask = Mask << 1;
  }
  PORTB.F2 = 1;
  PORTB.F2 = 0;
}
/*******************************************************************************/
void Send_Data1( unsigned short A){   //envoie des données
  unsigned short Mask=0b00000001 ,t,F;
  for (t=0;t<8;t++){
    F = A & Mask;
    if(F==0) PORTB.F3 = 0;
    else PORTB.F3 = 1;
    PORTB.F4 = 1;
    PORTB.F4 = 0;
    Mask = Mask << 1;
  }
  PORTB.F5 = 1;
  PORTB.F5 = 0;
}
/*******************************************************************************/
void Send_Data2( unsigned short A){     //envoie des données
  unsigned short Mask=0b00000001 ,t,F;
  for (t=0;t<8;t++){
    F = A & Mask;
    if(F==0) PORTB.F6 = 0;
    else PORTB.F6 = 1;
    PORTB.F7 = 1;
    PORTB.F7 = 0;
    Mask = Mask << 1;
  }
  PORTC.F0 = 1;
  PORTC.F0 = 0;
}
/*******************************************************************************/
void Send_Data3( unsigned short A){  //envoie des données
  unsigned short Mask=0b00000001 ,t,F;
  for (t=0;t<8;t++){
    F = A & Mask;
    if(F==0) PORTC.F1 = 0;
    else PORTC.F1 = 1;
    PORTC.F2 = 1;
    PORTC.F2= 0;
    Mask = Mask << 1;
  }
  PORTC.F3 = 1;
  PORTC.F3 = 0;
}
/*******************************************************************************/
void Send_Data4( unsigned short A){    //envoie des données
  unsigned short Mask=0b00000001 ,t,F;
  for (t=0;t<8;t++){
    F = A & Mask;
    if(F==0) PORTC.F4 = 0;
    else PORTC.F4 = 1;
    PORTC.F5 = 1;
    PORTC.F5= 0;
    Mask = Mask << 1;
  }
  PORTA.F0 = 1;
  PORTA.F0 = 0;
}
/******************************************************************************/
void DECOD1( unsigned short A){     //envoie des données
  unsigned short Mask=0b00000001 ,t,F;
  for (t=0;t<8;t++){
    F = A & Mask;
    if(F==0) PORTD.F1 = 0;
    else PORTD.F1 = 1;
    PORTD.F2 = 1;
    PORTD.F2= 0;
    Mask = Mask << 1;
  }
  PORTD.F3 = 1;
  PORTD.F3 = 0;
}
/******************************************************************************/
void newline(){
  UART1_Write(13); // Carriage Return 
  UART1_Write(10); // Line Feed 
}
/*******************************************************************************/
void main() {
  ADCON1 = 0x07;
  TRISA=0x00;
  TRISB=0x00;
  TRISC=0x80;
  TRISD=0x00;
  TRISE=0b000;
  PORTA=0x00;
  PORTA=0;
  PORTB=0;
  PORTC=0;
  PORTD=1;
  PORTE=0;
  UART1_Init(9600);    //initialisation du taux d'envoie des données
  Delay_ms(100);    // stabilisation
  UART1_Write_Text("START AFFICHEUR");
  newline();

  while(!UART1_Data_Ready());
  UART1_Read_Text(message,"a",21);
  UART1_write_Text(message);
  newline();
  do {
    /*******************************************************************************/
    DECOD1(0b10111111);
    count1= mask(message[0]);
    Send_Data(count1);
    delay_ms(2);
    DECOD1(0b11011111);
    count1= mask(message[1]);
    Send_Data(count1);
    delay_ms(2);
    DECOD1(0b11101111);
    count1= mask(message[2]);
    Send_Data(count1);
    delay_ms(2);
    DECOD1(0b11110111);
    count1= mask(message[3]);
    Send_Data(count1);
    delay_ms(2);
    DECOD1(0b11111011);
    count1= mask(message[4]);
    Send_Data(count1);
    delay_ms(2);
    DECOD1(0b11111101);
    count1= mask(message[5]);
    Send_Data(count1);
    delay_ms(2);
    DECOD1(0b11111110);
    count1= mask(message[6]);
    Send_Data(count1);
    delay_ms(2);
    decodeur(0);
    count1= mask(message[7]);
    Send_Data1(count1);
    delay_ms(2);
    decodeur(1);
    count1= mask(message[8]);
    Send_Data1(count1);
    delay_ms(2);
    decodeur(2);
    count1= mask(message[9]);
    Send_Data1(count1);
    delay_ms(2);
    decodeur(3);
    count1= mask(message[10]);
    Send_Data2(count1);
    delay_ms(2);
    decodeur(4);
    count1= mask(message[11]);
    Send_Data2(count1);
    delay_ms(2);
    decodeur(5);
    count1= mask(message[12]);
    Send_Data2(count1);
    delay_ms(2);
    decodeur(6);
    count1= mask(message[13]);
    Send_Data3(count1);
    delay_ms(2);
    decodeur(7);
    count1= mask(message[14]);
    Send_Data3(count1);
    delay_ms(2);
    decodeur(8);
    count1= mask(message[15]);
    Send_Data3(count1);
    delay_ms(2);
    decodeur(9);
    count1= mask(message[16]);
    Send_Data4(count1);
    delay_ms(2);
    decodeur(10);
    count1= mask(message[17]);
    Send_Data4(count1);
    delay_ms(2);
    decodeur(11);
    count1= mask(message[18]);
    Send_Data4(count1);
    delay_ms(2);
    /*******************************************************************************/
  }       while(1);
}
/*******************************************************************************/
Attachments
Capture1.JPG
Capture1.JPG (134.16 KiB) Viewed 6799 times

User avatar
dejan.odabasic
mikroElektronika team
Posts: 2649
Joined: 30 Apr 2012 14:20

Re: help for reading data using serial port

#2 Post by dejan.odabasic » 17 Apr 2014 14:51

Hello,

Have you tried to add the code which reads data from serial port:

Code: Select all

  while(!UART1_Data_Ready());
  UART1_Read_Text(message,"a",21);
  UART1_write_Text(message);
  newline();
Inside of your main do{...}while(1) loop?

Best regards.

majdi_slimi
Posts: 3
Joined: 13 Feb 2014 12:22

Re: help for reading data using serial port

#3 Post by majdi_slimi » 18 Apr 2014 17:00

yes i tried it but it still not working :(
the same message is still displayed

User avatar
dejan.odabasic
mikroElektronika team
Posts: 2649
Joined: 30 Apr 2012 14:20

Re: help for reading data using serial port

#4 Post by dejan.odabasic » 23 Apr 2014 15:13

Hello,

Then probably delay in main while loop is causing a UART data loss.
Try separating UART reading and display update in two separate functions.

Then you can test them separately how program behaves without the other function.

Best regards.

Post Reply

Return to “Website & Forums Wishlist”