■ 프로그램 : 직렬통신 command mode 흉내내기 (Ver. 0.1)
■ 컴파일러 : KEIL uVision3
■ 실행환경 : Proteus 7, AT89C52, UART 19200bps
$NOMOD51
$INCLUDE(AT89S52.INC)
CSEG AT 0000H
START:
MOV SP, #7FH
CALL INIT_SERIAL
CALL PROMPT
REP:
CALL RXDATA
JMP REP
INIT_SERIAL:
MOV TMOD, #20H ; [GATE|C/T_|M1|M0|GATE|C/T_|M1|M0] #00100000B
; 1번 타이머 모드2(8비트 재저장 모드), 보레이트 발생용
MOV SCON, #52H ; [SM0|SM1|SM2|REN|TB8|RB8|TI|RI] #01010010B
; 모드1을 사용
MOV A, PCON
SETB ACC.7
MOV PCON, A ; [SMOD|-|-|-|GF1|GF0|PD|IDL] SMOD=1
; 가속모드 사용
MOV TH1, #0FDH ; 19200bps
SETB TR1 ; 타이머1 시작
RET
TXDATA:
JNB TI, $
CLR TI ; TI비트를 0으로 초기화
MOV SBUF, A ; A레지스터에 저장된 데이터를 시리얼 버퍼로 이동
RET
RXDATA:
JNB RI, $
MOV A, SBUF
CLR RI ; RI비트를 0으로 초기화
CJNE A, #0DH, TXDATA ; [Enter]키 검사
CALL PROMPT
RET
PROMPT:
JNB TI, $
MOV SBUF, #0AH ; line feed
CLR TI
JNB TI, $
MOV SBUF, #0DH ; carriage return
CLR TI
JNB TI, $
MOV SBUF, #3EH ; '>' 표시
CLR TI
RET
END
댓글 없음:
댓글 쓰기