Отговори на тема  [ 8 мнения ] 
C30 putsUART1() problem 
Автор Съобщение
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 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 или не го изпраща или го омазва, даже дължината се променя.

_________________
Хайде де!


Пет Ное 19, 2010 11:54 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Пет Май 01, 2009 4:01 pm
Мнения: 1438
Мнение 
Така става ли ?

Код:
main(){

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

func0(){

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

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

func1(){

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

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

func2(){

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

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


Съб Ное 20, 2010 12:37 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
Не знам дали ще стане така. По-късно ще пробвам.
Общо взето идеята е да мога да пращам различни съобщения на компютъра, в зависимост от това в коя част от програмата съм.
Мисля, че проблемът е някъде около работата с масиви и стрингове, резервирането на памет, работа с указатели или нещо такова.

_________________
Хайде де!


Съб Ное 20, 2010 10:41 am
Профил
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
@CarBeta:
И така не става. Получава се същия ефект.

_________________
Хайде де!


Съб Ное 20, 2010 11:58 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Чет Фев 24, 2005 11:41 pm
Мнения: 1049
Местоположение: Pz
Мнение 
Пробвай да им смениш местата:
Код:
       while(BusyUART1());
       putsUART1("proba1");


Нед Ное 21, 2010 8:24 pm
Профил ICQ
Ранг: Форумен бог
Ранг: Форумен бог

Регистриран на: Вто Май 29, 2007 2:23 pm
Мнения: 3714
Местоположение: Високо в планината
Мнение 
Gogo написа:
Пробвай да им смениш местата:
Код:
       while(BusyUART1());
       putsUART1("proba1");

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

_________________
Хайде де!


Пон Ное 22, 2010 8:20 pm
Профил
Ранг: Ориентиран
Ранг: Ориентиран

Регистриран на: Пет Авг 07, 2009 4:58 pm
Мнения: 273
Мнение 
Дани, тук съм взел от дейташййта на атмегите разписана подобна функция. Защо не си разпишеш такова нещо за PIC, ще си сигурен какво става в нея?


Прикачени файлове:
New Text Document.txt [299 Байта]
145 пъти
Вто Ное 23, 2010 9:30 pm
Профил
Ранг: Форумен бог
Ранг: Форумен бог
Аватар

Регистриран на: Сря Апр 27, 2005 12:48 pm
Мнения: 6094
Мнение 
Код:
#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");
}


_________________
main[-1u]={1};


Сря Ное 24, 2010 3:09 am
Профил ICQ
Покажи мненията от миналия:  Сортирай по  
Отговори на тема   [ 8 мнения ] 

Кой е на линия

Потребители разглеждащи този форум: 0 регистрирани и 3 госта


Вие не можете да пускате нови теми
Вие не можете да отговаряте на теми
Вие не можете да променяте собственото си мнение
Вие не можете да изтривате собствените си мнения
Вие не можете да прикачвате файл

Търсене:
Иди на:  
cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group.
Designed by ST Software for PTF.
Хостинг и Домейни