2015-11-10 4 views
-5

Я использую PIC16F688 для чтения с аналогового канала 2 и усредняю ​​значения датчика давления, а затем преобразую 4 байта в цифровой, используя метод символов ASCII. Код довольно прост. Мне не нужна никакая задержка после отправки результатов UART1_Write(temp[i]); Моя проблема в том, что UART 13 не работает должным образом в качестве возврата каретки. Выходной сигнал из терминала выглядит следующим образом:UART1_Write (13) работает некорректно

000000000 
0000 
0000 
000000000 

Он должен посылать 0000 каждый раз, и зависит от моего давления на датчике, значение от 0000 к 1023.

char temp[5]; 
unsigned int adc_value; 
char uart_rd; 
int i; 
unsigned int d[10]={0}; 
int average = 0; 
int counter =0; 
void main() { 
    temp[0]='0'; 
    temp[1]='0'; 
    temp[2]='0'; 
    temp[3]='0'; 
    temp[4]='\r'; 


    OSCCON  = 0x77;  //8MHz 

    ANSEL = 0b00000100;  
    CMCON0 = 0X07; // 
    TRISA = 0b00001100; 

    UART1_Init(9600);    // Initialize UART module at 9600 bps 
    Delay_ms(100);     // Wait for UART module to stabilize 


    while (1) { 
      average=0; 
      for(i=0;i<10;i++){ 
       average+= ADC_Read(2); 
      } 
      average/=10; 
      temp[0] = average/1000+48; 
      temp[1] = (average/100)%10+48; 
      temp[2] = (average/10)%10+48; 
       temp[3] = average%10+48; 
       for (i=0;i<5; i++) 
       { 
       UART1_Write(temp[i]); 


       } 
       UART1_Write(13); // back slash 

      } 

      } 
+0

Что вы просите у нас? У нас нет оборудования, нет кода, нет компилятора, нет компоновщика, нет среды, нет отладчика, нет регистратора и нет понятия, есть ли у вас проблема с программным обеспечением, проблема с оборудованием или и то, и другое. –

+0

Это мой код, у которого есть проблема, может кто-нибудь помочь найти причину, по которой UART1_write не отбросил лишние четыре байта, я имею в виду как обратную косую черту \ n. –

ответ

0

Я бы ожидать темп [4], чтобы оценить, 0x0D (CR), поэтому каждая итерация «а» цикл записывает четыре цифры, за которыми следуют две CRS, без какого-либо Linefeed. Попробуйте записать 0x0A к UART после того, как «для» петли, вместо 13.

Если вы не ясно, о разнице между CR и LF, этот ответ делает хорошую работу, объясняя это: https://stackoverflow.com/a/3098328/5544939

+0

Спасибо, что это полезно. –