■ 프로그램 : 직렬통신 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
2009년 12월 22일 화요일
2009년 12월 18일 금요일
[8051] 직렬통신 정리
8051의 직렬통신을 간략하게 정리하면 동기/비동기 및 4가지 모드중 하나를 선택하여 적절한 통신을 하면되는데 다른거 별로 관심없고 모드1, 그러니까 시리얼통신, UART, RS232C, 9600bps 등등 하면 떠오르는 직렬통신을 하기 위한 설정과 기타 관련 정보를 알아본다.
그런데 왜 비동기라 부르나? 시스템은 클럭을 기준으로 내부통신을 한다. 같은 주파수로 진동을 하니까 모든 얘들이 동기화 되어 통한다고 생각하자. 그러나 시리얼 통신은 시스템 클럭을 사용하지 않기 때문에 서로 진동하지 못하고, 알아듣지 못한다.
■ 4가지 모드 (다른거 관심없다 1번만 기억하자)
. 모드 0 : I/O확장용의 동기식 통신모드
. 모드 1 : 10비트 프레임의 비동기 통신모드, START(1)+DATA(8)+STOP(1)=10비트
. 모드 2 : 11비트 프레임의 비동기 통신모드
. 모드 3 : 11비트 프레임의 비동기 통신모드
■ 직렬통신과 관련있는 레지스터
* SBUF(Serial Port Buffer Register) : 버퍼의 역할을 이해해야 한다. 주거니 받거니...
* SCON(Serial Port Control Register) : 시리얼 포트의 각종 설정
* PCON(Power Control Register) : 가소롭게 2배속 모드가 있다.
■ 어셈코드 셈플
.
.
.
INIT_SERIAL: ; 직렬 통신 설정 (직렬 통신을 하기 위해 설정해 주어야 할 것들)
CLR ET1 ; 타이머1 interrupt Disable
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 ; PCON의 현재값만 읽어들이고
SETB ACC.7 ; 해당비트값만 수정
MOV PCON, A ; [SMOD|-|-|-|GF1|GF0|PD|IDL] SMOD=1, 가속모드 사용
MOV TH1, #0FDH ; 19200bps
SETB TR1 ; 타이머1 시작
RET ; 복귀
.
.
.
그런데 왜 비동기라 부르나? 시스템은 클럭을 기준으로 내부통신을 한다. 같은 주파수로 진동을 하니까 모든 얘들이 동기화 되어 통한다고 생각하자. 그러나 시리얼 통신은 시스템 클럭을 사용하지 않기 때문에 서로 진동하지 못하고, 알아듣지 못한다.
■ 4가지 모드 (다른거 관심없다 1번만 기억하자)
. 모드 0 : I/O확장용의 동기식 통신모드
. 모드 1 : 10비트 프레임의 비동기 통신모드, START(1)+DATA(8)+STOP(1)=10비트
. 모드 2 : 11비트 프레임의 비동기 통신모드
. 모드 3 : 11비트 프레임의 비동기 통신모드
■ 직렬통신과 관련있는 레지스터
* SBUF(Serial Port Buffer Register) : 버퍼의 역할을 이해해야 한다. 주거니 받거니...
* SCON(Serial Port Control Register) : 시리얼 포트의 각종 설정
* PCON(Power Control Register) : 가소롭게 2배속 모드가 있다.
■ 어셈코드 셈플
.
.
.
INIT_SERIAL: ; 직렬 통신 설정 (직렬 통신을 하기 위해 설정해 주어야 할 것들)
CLR ET1 ; 타이머1 interrupt Disable
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 ; PCON의 현재값만 읽어들이고
SETB ACC.7 ; 해당비트값만 수정
MOV PCON, A ; [SMOD|-|-|-|GF1|GF0|PD|IDL] SMOD=1, 가속모드 사용
MOV TH1, #0FDH ; 19200bps
SETB TR1 ; 타이머1 시작
RET ; 복귀
.
.
.
2009년 12월 16일 수요일
2009년 12월 15일 화요일
[8051]시뮬레이터 정리
■ EdSim51 (http://www.edsim51.com/)
다른 시뮬레이터에 비해 주변 장치들까지 같이 구현한 프로그램으로 완성도나 사용자 편의성이 높은 프로그램입니다.
자바로 개발되어 여러 플렛폼에서 테스트 할 수 있는 장점이 있고, 특히나 사이트를 살펴보면 프로그램에 구현된 회로도 및 이를 활용한 각종 교육자료가 있어서 공부하는데는 그만입니다.
■ J51 (http://www.viara.cn/en/j51/)
역시 자바로 개발된 프로그램으로 특징은 EdSim51처럼 몇가지 주변장치 및 UART를 구현하여 직렬통신과 관련된 테스트를 충분히 해볼 수 있습니다.
■ emu51 (http://sourceforge.net/projects/emu51/)
소스포지에 공개되어 있는 프로그램인데...머 그냥 이런게 있다 그정도...^^
■ TS Controls Emulator 8051 Version 1.00 (http://www.tscontrols.com/ 사이트 없어진거 같네요)
윈도우용 프로그램으로 위에 열거한 프로그램 처럼 실시간으로 테스트하는 것 보다는 명령어 하나하나 추적하는 식으로 테스트해 볼 수 있는 프로그램입니다. (사이트가 없는 관계로 해당 프로그램 링크합니다.)
■ JSIM-51 (http://top-themen.t-online.de/ 요기도 사이트 없어진거 같네요)
역시 윈도우용 프로그램으로 한스탭씩 진행해 가면서 테스트해 볼 수 있는 프로그램 입니다. (사이트가 없는 관계로 해당 프로그램 링크합니다.)
다른 시뮬레이터에 비해 주변 장치들까지 같이 구현한 프로그램으로 완성도나 사용자 편의성이 높은 프로그램입니다.
자바로 개발되어 여러 플렛폼에서 테스트 할 수 있는 장점이 있고, 특히나 사이트를 살펴보면 프로그램에 구현된 회로도 및 이를 활용한 각종 교육자료가 있어서 공부하는데는 그만입니다.
■ J51 (http://www.viara.cn/en/j51/)
역시 자바로 개발된 프로그램으로 특징은 EdSim51처럼 몇가지 주변장치 및 UART를 구현하여 직렬통신과 관련된 테스트를 충분히 해볼 수 있습니다.
■ emu51 (http://sourceforge.net/projects/emu51/)
소스포지에 공개되어 있는 프로그램인데...머 그냥 이런게 있다 그정도...^^
■ TS Controls Emulator 8051 Version 1.00 (http://www.tscontrols.com/ 사이트 없어진거 같네요)
윈도우용 프로그램으로 위에 열거한 프로그램 처럼 실시간으로 테스트하는 것 보다는 명령어 하나하나 추적하는 식으로 테스트해 볼 수 있는 프로그램입니다. (사이트가 없는 관계로 해당 프로그램 링크합니다.)
■ JSIM-51 (http://top-themen.t-online.de/ 요기도 사이트 없어진거 같네요)
역시 윈도우용 프로그램으로 한스탭씩 진행해 가면서 테스트해 볼 수 있는 프로그램 입니다. (사이트가 없는 관계로 해당 프로그램 링크합니다.)
AVR Studio 다운로드 주소
등록하는거 구찬타...
http://www.atmel.com/dyn/resources/prod_documents/AvrStudio4Setup.exe
http://www.atmel.com/dyn/resources/prod_documents/AvrStudio417Setup.exe
http://www.atmel.com/dyn/resources/prod_documents/AvrStudio4Setup.exe
http://www.atmel.com/dyn/resources/prod_documents/AvrStudio417Setup.exe
2009년 12월 11일 금요일
VC++ 6.0 with WTL
WTL이 오픈되면서 8.0버전을 끝으로 MS의 버전업은 끝나고 SF쪽에서 계속 버전업을 하고 있습니다.
아직까지 VC++ 6.0을 많이 쓰고 있고 아직까지 쓰는데 하등 불편한거 없고...쩝~
PC재설치하면서 정리하는김에 VC++6.0지원하는 최종 WTL파일입니다.
아직까지 VC++ 6.0을 많이 쓰고 있고 아직까지 쓰는데 하등 불편한거 없고...쩝~
PC재설치하면서 정리하는김에 VC++6.0지원하는 최종 WTL파일입니다.
피드 구독하기:
글 (Atom)