|
시리얼 포트에 데이타가 언제 들어 올지 알수가 없기에 사용합니다.
무작정 읽어 들일수는 없으니(그 부분을 빼보세요) 버퍼에 값이 들어 오면 관련 상태 비트가 셋(1)됩니다.
그때 값을 읽는거죠.
초보탈출기 님이 쓰신 글 :
: 감사합니다 많은 도움이 되었습니다.
: 근데 왜status & DATA_READY는 연산을 해야하는지요/
: 그리고 같은 류의 예제를 많이 보았는데 꼬옥 0x7F가 있더라구요.
: 무슨 의미가 있는 건 아닌지요?
: 초자가 함 해볼려니 힘겹네요.
:
: 김진호.불사새 님이 쓰신 글 :
: : -> if (status & DATA_READY)//이 부분 해석좀 부탁드립니다.
: : 상태를 읽어와서 데이타가 준비 되었는지(READY인지)에 해당하는 비트가 1이면
: :
: : -> if ((out = bioscom(2, 0, COM2) & 0x7F) != 0)//이부분두요 ox7F는 무엇이고 또 "0"의 의미는 무엇이고?등등 상세하게 부탁드립니다.
: :
: : 통신 포트에서 한 바이트를 읽어와서 0x7f(이진수로 B0111111)로 AND연산 합니다. 그 읽은 값을 out에 넣고
: : out값이 0이 아니면(문자가 들어 왔으면) 그 아래 코드 실행입니다.
: :
: : 0x7f는 안하셔도 될듯합니다.(헬프 예제에 그리 나와 있더라두요)
: :
: : 초자탈출기 님이 쓰신 글 :
: : : 안녕하십니까
: : :
: : : 코드해석 좀 부탁드립니다.
: : : 달랑 물어보는 건 아니구요 .보다보다 지쳐서 도움 청합니다.
: : : 하기의 코드중 분석 부탁드립니다.
: : : #define COM2 1
: : : #define DATA_READY 0x0100
: : : #define TRUE 1
: : : #define FALSE 0
: : :
: : : #define SETTINGS ( 0xe3 | 0x00 | 0x00 | 0x00)
: : :
: : : int main(void)
: : : {
: : : int in, out, status, DONE = FALSE;
: : :
: : : bioscom(0, SETTINGS, COM2);
: : : cprintf("... BIOSCOM [ESC] to exit ...\n");
: : : while (!DONE)
: : : {
: : : status = bioscom(3, 0, COM2);
: : : if (status & DATA_READY)//이 부분 해석좀 부탁드립니다.
: : : if ((out = bioscom(2, 0, COM2) & 0x7F) != 0)//이부분두요 ox7F는 무엇이고 또 "0"의 의미는 무엇이고?등등 상세하게 부탁드립니다.
: : :
: : : putch(out);
: : : if (kbhit())
: : : {
: : : if ((in = getch()) == '\x1B')
: : : DONE = TRUE;
: : : bioscom(1, in, COM2);
: : : }
: : : }
: : : return 0;
: : : }
|