COM1 또는 COM2, While 포트 매개 변수를 변경 하는 방법이 열려

만료된 KB 콘텐츠 고지 사항

이 문서는 Microsoft에서 더 이상 지원하지 않는 제품에 대해 작성되었습니다. 따라서 이 문서는 “있는 그대로" 제공되며 더 이상 업데이트되지 않습니다.

요약

Basic에서 통신 포트 (문으로 열기 "COM1::..." 또는 열려 "COM2::...") 열린 COM 포트를 사용할 경우 포트의 구성은 일반적으로 변경할 수 없습니다 기본적인 문으로 닫은 후 COM 포트 없이. 그러나 아웃 Basic 및 INP 문을 사용 하 여 UART 직접 통신 하 여 COM 포트 (전송 속도, 패리티, 정지 비트, 데이터 비트, 등) 매개 변수를 변경할 수 있습니다. IBM PC에 (범용 비동기 수신기 전송기) UART 8250 비동기 통신 요소, 전용된 된 마이크로프로세서 칩입니다.


이 문서는 고급 프로그래머가 정보가 들어 있고 통신 포트 작업을 매우 잘 알고 있는 고급 프로그래머가 해야만 하는 것. Microsoft QuickBasic 버전 4.00, 4.00b, 및 4.50;에이 정보가 적용 됩니다. Microsoft 기본 컴파일러 버전 6.00 및 ms-dos; 6.00b 고로 Microsoft 기본 전문 개발 시스템 (PDS) 버전 7.00 및 7.10 MS-DOS에 대 한.

자세한 내용

COM 포트에 대 한 통신 매개 변수를 변경 하려면 먼저 통신 인터럽트를 해제 해야 합니다. 이렇게 하려면 설정 비트 4 (예: COM1) 또는 3 (COM2) 인터럽트 마스크 레지스터의 비트 수 (IMR, I/O 포트 및 H21) (비트 비트; 0부터 번호가 매겨집니다 위치 즉, 0, 1, 2, 등.). Note는 이렇게 하는 경우이 레지스터의 나머지 비트 해야 변경 되지 않도록 해야 합니다 "또는" 레지스터에 지정 된 비트 값을 필요에 따라, 장소에 새 값 다시. 예를 들어, 있는 다음 비활성화 COM1:

   OUT &H21, INP(&H21) OR 16
다음 비활성화 COM2.

   OUT &H21, INP(&H21) OR 8
COM 인터럽트 비활성화 되어 일단 통신 매개 변수를 변경할 수 있습니다. 변경할 수 있는 매개 변수 중 첫 번째 전송 속도입니다. 이렇게 하려면 먼저 설정 해야 전송 하 여 전송 속도 변경 허용 줄 제어 레지스터는 포트를 com1, 선 컨트롤 등록 H80 포트 & H3FB, 및 및 H2FB, com2 선 컨트롤 등록 한다. 그런 다음 포트 & H3F8 적절 한 최소 유효 바이트 (LSB) 및 원하는 전송 속도의 가장 중요 한 바이트 (MSB)를 보냅니다 및 & H3F9, COM1, 또는 H2F8 및 포트에 각각 및 & H2F9, c o m 2에 각각. 빠른 전송 속도 LSB 및 MSB 바이트 다음 표에 나와 있습니다.

   Baud Rate    MSB    LSB
--------- --- ---

300 01H 80H
600 00H C0H
1200 00H 60H
2400 00H 30H
3600 00H 20H
4800 00H 18H
9600 00H 0CH

전송 속도 변경 했으므로 다른 매개 변수 (예, 패리티 형식, 정지 비트, 데이터 비트 등)에 대해 설정 되어야 합니다. 선 제어 레지스터 (포트 & COM1, 또는 포트 H3FB 및 H2FB com2)를 적절 한 바이트를 전송 하 여 이러한 매개 변수가 설정 됩니다. 다음 그림에 따라 적절 한 비트를 설정 하 여 보낼 바이트 설정 됩니다.
                          THE LINE-CONTROL REGISTER

|-----|-----|-----|-----|-----|-----|-----|-----|
| 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
|-----|-----|-----|-----|-----|-----|-----|-----|
| \ | | | | | | Character
| \ | | | | | | length
I/O Addressing < \ | | | | 0 + 0 = 5 bits
0 = Normal value \__| | | | 0 + 1 = 6 bits
1 = To address baud | | | | 1 + 0 = 7 bits
rate divisor | | | | 1 + 1 = 8 bits
registers | | | |
| | | > Stop bits
Set these bits to 0 < | | 0 = 1 stop bit
| | 1 = 1.5 stop bits if 5-bit
| | character length
| | 1 = 2 if 6-, 7-, or 8-bit
| | character length
Parity type < > Parity
0 = even 0 = No parity bit generated
1 = odd 1 = Parity bit generated

(이 테이블은의 180 페이지에서 가져온 것 "8088 어셈블러 언어 프로그래밍: IBM PC, 제 2 호" 여 Willen Krantz [Howard W. Sam & 회사, Inc., 1988]. 읽으십시오 7 장, "직렬 통신" 자세한 내용은.)


이러한 매개 변수를 설정한 후 COM 인터럽트 COM 포트에 대 한 비트의 IMR에는 0으로 다시 설정 하 여 다시 활성화할 수 있습니다. 이전에 특정 논리적으로 0으로 비트 마스크를 못하도록 해당이 레지스터의 다른 비트의 방해 하지 않도록 주의 이어야 합니다 처럼 "AND" 비트 값 뺀 255와 레지스터의 현재 값입니다. 예를 들어:
   OUT &H21, INP(&H21) AND 239    'enables COM1 (255 - 16 = 239)   OUT &H21, INP(&H21) AND 247    'enables COM2 (255 - 8 = 247)

이 단계가 끝나면 통신에 새로운 통신 설정을 다시 시작할 수 있습니다. 아래는 코드 예제는 해당 변경 내용 전송 속도 COM1-9600, N, 8, 1의 매개 변수입니다.


다음 책 하드웨어 주소에 대 한 자세한 정보가 들어 있습니다.
"프로그래머의 PC Sourcebook," 여 심 Hogan (Microsoft Press, 1988)
다음은 코드 예제입니다.
     x% = INP(&H21)                    'disable COM1...      x% = x% OR 16
OUT &H21, x%
OUT &H3FB, &H80 'set for BAUD change
REM OUT &H3F8, &H60 'BAUD-rate-divisor register; &H60 sets 1200 baud
OUT &H3F8, &H0C 'BAUD-rate-divisor register; &H0C sets 9600 baud
OUT &H3F9, &H0 'High byte of BAUD-rate-divisor register
OUT &H3FB, &H3 'N,8,1
x% = INP(&H21) 'reenable COM1...
x% = x% AND 239
OUT &H21, x% 'all done!

속성

문서 ID: 39255 - 마지막 검토: 2017. 2. 7. - 수정: 1

피드백