-5

PIC16F688 を使用してアナログ チャネル 2 から読み取り、圧力センサーの値を平均してから、ASCII 文字方式を使用して 4 バイトをデジタルに変換しています。コードはとてもシンプルです。私のUART1_Write(temp[i]); 問題は、UART 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

             }

           }
4

1 に答える 1

0

temp[4] が 0x0D (CR) に評価されると予想されるため、「while」ループの反復ごとに 4 桁が書き込まれ、その後に改行なしで 2 つの CR が続きます。'for' ループの後、13 ではなく 0x0A を UART に書き込んでみてください。

CR と LF の違いがよくわからない場合は、この回答でうまく説明できます: https://stackoverflow.com/a/3098328/5544939

于 2015-11-10T18:30:05.197 に答える