달력

42011  이전 다음

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30

'2011/04'에 해당되는 글 2건

  1. 2011.04.06 아놔~오피 망하네~~
  2. 2011.04.06 비트통신법 알려주세요~

아놔~오피 망하네~~

일상 2011. 4. 6. 10:48


www.ohpy.com  

정말 정말 요긴하게 사용하고 있던 개인 저장공간(홈피)인데...

나우콤이 손 놓는거 같습니다.  (아님 나우콤이 망하나?) 

어떤 경유인지는 모르지만..
근4년간 착실히 모아왔던 제 저장소를 급하게 백업 받으려니...그것도 일일이 클릭해서 ㅜㅜ

아...뒷통수 재대로 맞았습니다.
역시 세상에 공짜는 존재하지 않나 봅니다.

아무튼 오피..그동안 고마웠다...

그나저나 쓰는 사람들 꽤 많을텐데...
다 알라나 몰라~ 알림 이멜이 스팸으로 들어왔다는 글도 보이고.....흠.



게시글 주소 : http://www.ohpy.com/4/366#home
 


 
Posted by theF
|

re] 비트통신법을 알려주세요...ㅡ..ㅡ 
 

안녕하셔요...

음..통신이 시리얼(rs232) 이죠..

그렇다면 비트 또는 니블 통신이라는 것도 결국 바이트 통신과 같습니다.

다만 바이트는 상대편이 한 바이트를 가지고 하나의 정보를 가지는것이고

비트는 한바이트를 가지고 8개의 각각 다른 정보를 가지는것이고

니블은 한바이트를 가지고 2개의 각각 다른 정보를 가지는 것이랍니다.

그럼..예를 들어 볼까요...

1. 비트 통신

비트는 주로 DI,DO등의 접점에 많이 쓰이죠..

한바이트 가지고 8개의 DI,DO를 제어할수 있어닌깐 통신량이 그만큼 줄어들겠죠..

예를 들어 8개의 램프가 있고 이걸 켜고 싶다면(비트로 매핑되어 있을 경우)

실제 데이터는 한바이트만 쓰여지죠..

const 
  BitFieldOn : array[1..8] of Byte = ($01,$02,$04,$08,$10,$20,$40,$80); 
  BitFieldOff : array[1..8] of Byte = ($FE,$FD,$FB,$F7,$EF,$DF,$BF,$7F);

var 
  senddata : Byte;

  senddata := 0; //데이터 초기화

  //1번,7번을 켜고 싶을 경우 
  senddata = senddata or BitFieldOn[1]; 
  senddata = senddata or BitFieldOn[7];

  //전송 
  comport.writechar(senddata);

  //7번을 끄고 싶을 경우 
  senddata = senddata and BitFieldOff[7]; 
  //전송 
  comport.writechar(senddata);

또는 귀찮어시면 다음 함수를 사용하셔도 됩니당.

// 주어진 바이트에서 원하는 비트를 끄잡어 내기.. 
function GetBitFromByte(B : Byte; Count: Integer) : Boolean; 
begin 
  Case Count of 
    0: Result := Boolean((B and $80) shr 7); 
    1: Result := Boolean((B and $40) shr 6); 
    2: Result := Boolean((B and $20) shr 5); 
    3: Result := Boolean((B and $10) shr 4); 
    4: Result := Boolean((B and $08) shr 3); 
    5: Result := Boolean((B and $04) shr 2); 
    6: Result := Boolean((B and $02) shr 1); 
    7: Result := Boolean(B and $01); 
  else 
    Result := True; 
  end; 
end;

// 주어진 바이트에 원하는 비트를 셋팅하기.. 
procedure SetBitToByte(var B : Byte; Count: Integer; Value: Boolean); 
begin 
  Case Count of 
    0: if Value then B := B or $80 else B := B and $7F; 
    1: if Value then B := B or $40 else B := B and $BF; 
    2: if Value then B := B or $20 else B := B and $DF; 
    3: if Value then B := B or $10 else B := B and $EF; 
    4: if Value then B := B or $08 else B := B and $F7; 
    5: if Value then B := B or $04 else B := B and $FB; 
    6: if Value then B := B or $02 else B := B and $FD; 
    7: if Value then B := B or $01 else B := B and $FE; 
  end; 
end;

2. 니블 통신

니블은 주로 카운터를 표시할때 많이 쓰이죠..

예를 들어 자동차 키로수처럼 카운터 메터를 표시할경우 한바이트로 두개의 영역을

표시할수 있어닌깐 이또한 통신 데이터를 줄일수 있겠죠..

예를 들어 9999를 표시한다면 두바이트면 되겠죠..

var 
  aa,bb : Byte; 
begin 
  aa := 0; 
  bb := 0;

  //1234를 전송할 경우 
  aa := ($01 shl 4) or $02; 
  bb := ($03 shl 4) or $04;

  comport.writechar(aa); 
  comport.writechar(bb); 
end;

휴~ 이상 입니당.

그럼..즐거운 주말 되시구요..항상 건강하셔요..

>장비가 10년전거라그러는데요, 지금도 사용잘하고 있답니다. 
>그당시 플을 업그레이드 하면서 제가 델로 하니까 델로 업을 하려는데요 
>비트통신이 되야되거든요... 
>이중에서도 두가지 입니다. 한종류는 비트통신 또하나는 4bit를 한 값으로 
>이용하는 니블통신이요. 
>이자 겨우 바이트 통신을 알게 된지 얼마 안되었는데 
>비트 통신을 하게 되었답니다.. 
>단, 4비트의(니블값) 최고값이 9를 넘지는 않더군요...즉 0 에서 9까지만여 

>지금 고민중이긴 한데 될듯될듯 안되네요...ㅜ..ㅜ 

>예제나 샘플이나 know-where등등 많이 많이 알려주시와요... 
>언릉 끝내야 하거든요.... 

>감사합니다.... 

Posted by theF
|