2016-11-17 2 views
0

USART를 통해 데이터를 터미널로 보내야하는 프로젝트를 진행 중입니다. 난 ( 내 문제) 퍼티 또는 흰개미하여 난 단말 같이 숯을 보내도록 처리했다마이크로 칩 C18은 데이터를 숫자로 터미널에 전송합니다.

EEPROM 수집 숯의 숫자 값 (255) (같은 데이터를 표시해야 숯불의 값이 인쇄 할 수 있습니다 시작 난 숫자

예에 문자의 값을 변환해야합니다 이유

다음 EEPROM에서 얻은 데이터를 보낼 것입니다 나의 일상을 0x31로 회신 할 때 (1) '하지만 터미널에'049 '또는'49 '를 보내야합니다.

void SendToSer(void) { 

unsigned char Looper; 

for (Looper=EEPROM_START;Looper<EEPROM_END;Looper++){ 
    ReadEEPROM(Looper); //returns ReadResult 
    Write1USART((char) ReadResult); //Sends the ASCII 
    ClrWdt(); 
} 

}

감사합니다,

+0

당신은'sprintf'를 시도? – jolati

+0

아니요, 구문을 제안 해 주시겠습니까?, 포함합니까? – RobinHud

+0

[C18 Libraries] (http://ww1.microchip.com/downloads/en/DeviceDoc/MPLAB_C18_Libraries_51297f.pdf) 설명서에 모두 나와 있습니다. – jolati

답변

0

는 C18의 버전에 사용할 현재 snprintf 경우 더 나은 좋은 일 일부 상황에서 말이나 될 수 있습니다 제안 jolati, 같은 sprintf와. 두 루틴 모두 표준 printf 형식을 따릅니다 (예 : https://en.wikipedia.org/wiki/Printf_format_string).

#include "stdio.h" 

void main() { 
    char buffer[80]; 
    unsigned char len, number = 152; 

    // Write at most 80 bytes to our buffer 
    len = snprintf(buffer, 80, "sprintf string, heres a number: %d", number); 
    // buffer now contains our string, len is the number of bytes written 

    // or 
    len = printf(buffer, "... %d",number); 
} 
0

감사합니다, 나는 여기

내가 한 일입니다 ...... 그것에게 먼 길을하기로 결정했습니다 수 있습니다 :

숯불의 int 값을 조작 된에 3 새로운 문자 (즉) 243 세 문자가되었다 - 50,52,51 (숫자의 ASCII)

(어쩌면 그 길이 절름발이 그러나 그것은 마법처럼 작동)

을 heres 스크립트를 ... .

void ConvertToNumeric(unsigned char IsValue, unsigned int LineNumber){ 
unsigned int SourceInt; 

ClrWdt(); 
if (IsValue == 1){ 
    SourceInt = (int) ReadResult; 
}else{ 
    SourceInt = (int) LineNumber; 
    LineNumber++; 
} 

ClrWdt(); 
switch (SourceInt/100){   
    case 2 : FirstChar = 50; SourceInt = SourceInt - 200; break; 
    case 1 : FirstChar = 49; SourceInt = SourceInt - 100; break; 
    case 0:  FirstChar = 48;    break; 
} 

switch (SourceInt/10){ 
    case 9 :SecondChar = 57; SourceInt = SourceInt - 90;   break; 
    case 8 :SecondChar = 56; SourceInt = SourceInt - 80;   break; 
    case 7 :SecondChar = 55; SourceInt = SourceInt - 70;   break; 
    case 6 :SecondChar = 54; SourceInt = SourceInt - 60;   break; 
    case 5 :SecondChar = 53; SourceInt = SourceInt - 50;   break; 
    case 4 :SecondChar = 52; SourceInt = SourceInt - 40;   break; 
    case 3 :SecondChar = 51; SourceInt = SourceInt - 30;   break; 
    case 2 :SecondChar = 50; SourceInt = SourceInt - 20;   break; 
    case 1 :SecondChar = 49; SourceInt = SourceInt - 10;   break; 
    case 0 :SecondChar = 48;            break; 
} 

switch (SourceInt){ 
    case 9:   ThirdChar= 57;   break; 
    case 8:   ThirdChar= 56;   break; 
    case 7:   ThirdChar= 55;   break; 
    case 6:   ThirdChar= 54;   break; 
    case 5:   ThirdChar= 53;   break; 
    case 4:   ThirdChar= 52;   break; 
    case 3:   ThirdChar= 51;   break; 
    case 2:   ThirdChar= 50;   break; 
    case 1:   ThirdChar= 49;   break; 
    case 0:   ThirdChar= 48;   break; 
} 

ResultInChars[0] = FirstChar; 
ResultInChars[1] = SecondChar; 
ResultInChars[2] = ThirdChar; 
ResultInChars[3] = ' '; 
ResultInChars[4] = NULL; 
ResultInChars[5] = NULL; 
ResultInChars[6] = NULL; 

}가

이상 나는 puts1USART를 사용한 문자 (FirstChar, SecondChar & ThirdChar)

위 (3)를 포함하는 배열 나도 매 4 개 값 전에 "LINENUMBER"을 추가 한 결과 ..... CRLF 앞뒤로 값 후이를 출력 그렇게 보이는 결과있다

output to terminal in Putty over Serial port

과 작업 ...... 당신의 도움에 대한

덕분에

나는 당신의 제안을 apriciate 것, 가이

관련 문제