Микроконтролери и електроника
http://mcu-bg.com/mcu_site/

C30 putsUART1() problem
http://mcu-bg.com/mcu_site/viewtopic.php?f=3&t=8311
Страница 1 от 1

Автор:  dan [ Пет Ное 19, 2010 11:54 pm ]
Заглавие:  C30 putsUART1() problem

Здравейте!
Следния проблем:
Ако няколко пъти последователно изполвам следния сегмент :
Код:
      putsUART1("proba");
      while(BusyUART1());

няма проблем. Дори и да се смени текста, на компютъра си излизат коретни данни.
Ако обаче извикам същото нещо от друга функция, оплесква нещата- или не ги изпраща или изпраща някакви щуротии. Т.е. ако направя така:
Код:
main(){


      putsUART1("proba");
      while(BusyUART1());

func1();
func2();
}

func1(){

//.............

      putsUART1("proba1");
      while(BusyUART1());
}

func2(){

//.............

      putsUART1("proba2");
      while(BusyUART1());
}
proba и proba2 ми ги изпраща коректно, а proba1 или не го изпраща или го омазва, даже дължината се променя.

Автор:  CarBeta [ Съб Ное 20, 2010 12:37 am ]
Заглавие: 

Така става ли ?

Код:
main(){

      func0();
      func1();
      func2();
}

func0(){

//.............

      putsUART1("proba0");
      while(BusyUART1());
}

func1(){

//.............

      putsUART1("proba1");
      while(BusyUART1());
}

func2(){

//.............

      putsUART1("proba2");
      while(BusyUART1());
}

Автор:  dan [ Съб Ное 20, 2010 10:41 am ]
Заглавие: 

Не знам дали ще стане така. По-късно ще пробвам.
Общо взето идеята е да мога да пращам различни съобщения на компютъра, в зависимост от това в коя част от програмата съм.
Мисля, че проблемът е някъде около работата с масиви и стрингове, резервирането на памет, работа с указатели или нещо такова.

Автор:  dan [ Съб Ное 20, 2010 11:58 pm ]
Заглавие: 

@CarBeta:
И така не става. Получава се същия ефект.

Автор:  Gogo [ Нед Ное 21, 2010 8:24 pm ]
Заглавие: 

Пробвай да им смениш местата:
Код:
       while(BusyUART1());
       putsUART1("proba1");

Автор:  dan [ Пон Ное 22, 2010 8:20 pm ]
Заглавие: 

Gogo написа:
Пробвай да им смениш местата:
Код:
       while(BusyUART1());
       putsUART1("proba1");

Това пък защо да го правя?

Автор:  marcuka68 [ Вто Ное 23, 2010 9:30 pm ]
Заглавие: 

Дани, тук съм взел от дейташййта на атмегите разписана подобна функция. Защо не си разпишеш такова нещо за PIC, ще си сигурен какво става в нея?

Прикачени файлове:
New Text Document.txt [299 Байта]
145 пъти

Автор:  TheWizard [ Сря Ное 24, 2010 3:09 am ]
Заглавие: 

Код:
#define UART_TX_WAIT         while(U1STAbits.UTXBF)
#define UART_SEND_CHAR(data)    U1TXREG = (int)data

void UART_WriteString(const char *buffer){
    while(*buffer){
       UART_TX_WAIT;
      UART_SEND_CHAR(*buffer++);   
   }
   //while(U1STAbits.TRMT);
}

void UART_Init(){
   
//   RPINR18bits.U1RXR    = 0;      // RX PIN Select 1
//   RPOR0bits.RP1R     = 3;      // TX PIN Select 2

    U1MODE          = 0;        // operation settings
    U1STA              = 0;         // TX & RX interrupt modes       
    U1BRG           = 8;       // 115200@16 = 8, 56k@16 = 17   38k@16 = 25   
   
   _U1RXIP          = 1;      // Interrupt Priority level, LOW
   _U1TXIF            = 0;      // Clear the Transmit Interrupt Flag
   _U1TXIE            = 0;      // Enable Transmit Interrupts
   _U1RXIF            = 0;      // Clear the Recieve Interrupt Flag
   _U1RXIE            = 1;      // Enable Recieve Interrupts
//   U1MODEbits.WAKE   = 1;      // Enable Wake-up
   U1MODEbits.UARTEN    = 1;      // And turn the peripheral on
   U1STAbits.UTXEN      = 1;
   UART_WriteString("\n\r\n\r\n\rCOM_INIT\n\r");
}


Страница 1 от 1 Часовете са според зоната UTC + 2 часа [ DST ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/