|
오늘 아침에 와서 소스를 봤는데 역시나 안돼더군요.
Edit가 char로 밖에 연산을 못하나?? 아닌 것 같기도 한데...^^
도무지 해답이 나오지 않고 시간은 없어서 이렇게 또 질문올립니다.소스 보여드릴게요..
아래 소스가 있지만, 간단히 설명 드리면...
UpDown을 눌러서 1씩 증가를 시킵니다.그리고 그 UpDown값은 Edit5->Text로 들어가죠.
(참고로 UpDown Max속성은 1024로 했음. 더 많게 잡았어도 안됨..)
만약 UpDown값이 255값(헥사로 ff)이하이면
즉, 다시 말해 Edit5->Text값이 255값(헥사로 ff)이하이면...
TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
로 일단 버퍼 7에 저장하고 그리고....
버퍼11에...저장...
TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
TotalDataClampsend[11]=TotalDataClampsend[11] | 0x01<<0;
됩니다.
그러니간 이 소스의 결과는 간단히 말하면
10비트짜리 파라미터(데이터)를 표현하기 위해서 나머지 상위 2비트는 다른 버퍼를 이용해
저장한다는 거죠...
말이 좀 어렵나?^^
이런식으로 하는데, 문제는
0~255(ff)와 255~512(1ff) 그리고 512~768(2ff)까지는 잘 되는데,
768(2ff)~ 1024(3ff)까지의 범위안에서는 잘 안되더군요.
그냥 255~512상태로 돌아가더군요.
Edit5는 1024까지 표현이 잘 되는데....
왜 768이상에서는 안 되는지.....
답변 주시면 감사하겠씁니다.
즐거운 하루되세요.
if(Table1->FieldByName("Name")->AsString=="CLIPS1B")
{
TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
//ff-1
if(256-1< Edit5->Text && Edit5->Text<512)
{
TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
TotalDataClampsend[11]=TotalDataClampsend[11] | 0x01<<0;
} //1ff-1
else if(512-1< Edit5->Text && Edit5->Text<768)
{
TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
TotalDataClampsend[11]=TotalDataClampsend[11] | 0x02<<0;
} //2ff-1 //3ff
else if(768-1 < Edit5->Text && Edit5->Text<1024)
{
TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
TotalDataClampsend[11]=TotalDataClampsend[11] | 0x03<<0;
}
else
{
TotalDataClampsend[11]=TotalDataClampsend[11] & 0xfc; //1111 1100
}
TotalDataClampsend[7]=TotalDataClampsend[7] & (char)0x00; //0000 0000
TotalDataClampsend[7]=TotalDataClampsend[7] | (char)(StrToInt(Edit5->Text)<<0);
}
heartsim 님이 쓰신 글 :
: 안녕하세요...
: 낮에 회사에서 프로그램을 짜다 안되서 이렇게 집에 와서^^ 간단하게 나마 질문 올립니다.
: 자세한 질문내용은 내일 다시 부탁드리죠.....
:
: 다름아니라...
: Edit->Text에 f4나 1f7 그리고 2f3등등의 헥사값은 잘 프로세싱 되는데,
: 3f4와 같은 그 이상의 비트값에서는 if문에서 인식을 못하고 초기값으로 돌아가더군요.
: (시리얼 통신에서...)
:
: 더 자세한 소스구문은 낼 올리고자 하니..혹 아시는 분은 간단한 답변 부탁드립니다.
: 급한 마음에 이렇게 질문 올립니다.
:
: 즐거운 하루 되세요.............
:
: from heartsim
|