|
책에 bioscom()함수 대신에 BIOS를 직접 제어하는 함수가 있어서 올립니다.
void port_init(int port, unsigned char code)
{
union REGS r;
r.x.dx = port;
r.h.ah = 0;
r.h.al = code;
int86(0x14, &r, &r);
}
AL 레지스터에 들어가는 한 바이트 코드(code)
비트 번호 : 7 6 5 4 3 2 1 0
보우(7,6,5번 비트사용)
패리티 비트(4,3번 비트사용)
스톱 비트(2번 비트사용)
데이터 비트(1,0번 비트사용)
보우(비트패턴)
9600(111), 4800(110), 2400(101), 1200(100),
600(011), 300(010), 150(001), 110(000)
패리티(비트패턴)
패리티 없음(00 or 10), 홀수(01), 짝수(11)
스톱(비트패턴)
2개(1), 1개(0)
데이터 비트(비트패턴)
7개(10), 8개(11)
이것도 안되면 그냥 어셈블리로 하면 어떨런지요...
검증된건 아니구요 그냥 원초적으로 접근하면 되지 않을까해서요.
void port_init(int port, unsigned char code)
{
_asm {
mov dx, port
mov ah, 0h
mov al, code
int 14h
}
}
박주식 님이 쓰신 글 :
: 전번에 질문했는데 답장이 없어서요
: 음. 그러니깐
: 도스형으로 BC로 232 통신프로그램을 만들었는데요
: 이것을 그대로 window환경에서 실행하니까 정보가 받아지지를 않네요
:
: 다시말해 도스로 부팅해서 하면 되고 윈도우에서 실행화일을 하면 안되고
: 왜그러는지 솟 시원히 알려주시면 감사하겠습니다. 꾸벅
: BC에서 bioscom()으로 하였구요. 도스로 구성한 통신부분입니다.
:
: #define COM1 1
: #define B9600 0xE0
: #define DATA8 0x03
: #define STOP1 0x00
: #define NOP 0x00
: #define LSR 0x2fd
: #define RBR 0x2f8
: #define THR 0x2f8
:
: main() {
: unsigned char y;
: int i,op,yy,pp,jj1;
:
: bioscom(0,B9600 | DATA8 | STOP1 | NOP, COM1 );
: while(kbhit()==0) {
: if (comIsDataReady()) { y=comDataIn(); yy=y; ............. }
: }
: }
:
: int comIsDataReady()
: { return(inportb(LSR) & 0x01); }
:
: char comDataIn()
: { return(inportb(RBR)); }
:
|