11.0592MHz 외부 크리스탈을 연결하여야 합니다. Timer1 의 오버 플로우, UART Mode 1 을 사용한 것입니다. 크로스바 설정과 외부 오실레이터 설정을 한것 외에는 표준 8051과 동일합니다. DOS 용 시리얼 포트(Com1:) 덤프 프로그램을 사용하면 간단히 확인됩니다.
DOS 모드에서
C:>mode com1:96,n,8,1
C:> R1.exe
;-----------------------------------------------------------------------------
; SAMPLE Electronics co. http://www.SAMPLE.co.kr
; TEL: (02) 707-3882 FAX: (02) 707-3884
;-----------------------------------------------------------------------------
; UART Test
; 이 프로그램은 C8051Fxxx 프로세서의 UART 데이터 출력을 실험합니다.
; 칩외부에 11.0592MHz 크리스탈을 부착하였으며 폴링 모드로 어큐뮬레이터
; A 를 1 씩 증가하여 9600 BPS 속도로 시리얼 출력합니다.
;
;-----------------------------------------------------------------------------
; EQUATES
;-----------------------------------------------------------------------------
$MOD8F000
;-----------------------------------------------------------------------------
; VARIABLES
;-----------------------------------------------------------------------------
; Indirect address space variables
ISEG at 80h
org 0e8h ; temporary forced STACK location
STACK_TOP: DS 1 ; beginning of hardware stack
;-----------------------------------------------------------------------------
; RESET AND INTERRUPT VECTOR TABLE
;-----------------------------------------------------------------------------
CSEG
org 0000h
ljmp Main
;-----------------------------------------------------------------------------
; MAIN PROGRAM CODE
;-----------------------------------------------------------------------------
org 0B3h
Main:
mov WDTCN, #0deh ; 워치독 타이머 동작 금지
mov WDTCN, #0adh
;
mov SP, #STACK_TOP ; 스택포인터 설정
mov XBR2, #40h ; Enable crossbar and weak pull-ups
;
mov OSCXCN, #01100101b ; 외부 오실레이터, 크리스탈을 동작한다.
; XFCN = '101' for 11.0592 MHz crystal
mov OSCICN, #00001000b ; 외부 오실레이터 클럭을 시스템 클럭으로
; 사용한다. 내부 오실레이터를 금지한다.
;
mov XBR0, #00000100b ; UART 의 Tx, Rx를
; P0.0 과 P0.1 에 연결한다.
mov XBR2, #01000000b ; 크로스바를 활성화 한다.
;-----------------------------------------------------------------------------
; SERIAL PORT INITIALIZE
; BAUD RATE TABLE
;
; 11.0592 MHz (SMOD = 0)
; 9600 -> 0FDH
; 4800 -> 0FAH
; 2400 -> 0F4H
; 1200 -> 0E8H
;
INITSERI: CLR A
MOV PCON, A ; PCON.SMOD <- 0
MOV TMOD, #00100000B ; 8-BIT AUTO RELOAD
MOV TH1, #0FDH ; 9600 BPS (11.0592 MHz External )
MOV SCON, #01000000B ; UART MODE 1
SETB REN ; RECEIVE ENABLE
SETB PS ; SERIAL PORT PRIORITY BIT
SETB TR1 ; TIMER 1 RUN
;;;;;; SETB ES ; SERIAL PORT INTERRUPT ENABLE
SETB TR0
SETB ET0
;
;-----------------------------------------------------------------------------
loop:
inc A ; 레지스터 A 를 1 증가한다.
MOV SBUF, A ; 시리얼 버퍼로 보낸다.
JNB TI,$
CLR TI
sjmp loop
;-----------------------------------------------------------------------------
; End of file.
END
회원에게만 댓글 작성 권한이 있습니다.