|
|
 |
FM8P 프로젝트
|
| EPROM
/ MaskROM 형 8비트 마이크로 컨트롤러
|
|
|
| FM8P53 MCU 기초 프로그램 소스 코드 |
이 프로그램은 (주)이지플로우에서 FM8P53 MCU로 제품을 개발할 때 사용하는 기초 프로그램 소스 코드입니다. 따라서, (주)이지플로우의 기술지원이 필요할 경우, 이 코드의 내용을 기초로 모든 내용을 전달 하시기 바랍니다.
|
|
[ 보기 : FM8P53 기초 프로그램 소스 코드 ]
;---------------------------------------------------------------------------------------------------------------- ; ; FM8P53 베이스 프로그램 소스 코드 V.1.1 ; |
| ; |
|
(주)이지플로우 기술지원팀 |
;----------------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------------- ; FM8P5X ICE에서 사용한 선택사양(Option) 및 구성(Configuration)을 정의합니다. ; 이 구성은 참조용으로만 사용합니다. ; 이 구성을 실제로 적용할 려면 ICE 소프트웨어에서 직접 설정해야 합니다. ; 또한, 프로젝트에서 사용한 구성요소는 *.cfg 파일로 저장할 수 있습니다.
| ; |
구성(Configuration) |
|
| ; |
WDTEN |
: |
사용(Enable), |
WDT 사용하지 않음(Disable) |
| ; |
OSCD |
: |
기본속도 4 OSC, |
2배 속도 2 OSC |
| ; |
SUT |
: |
72MS, |
288MS, |
4.5MS, |
18MS |
| ; |
OSCIN |
: |
OSCI, |
IOB5 |
|
|
| ; |
OSCOUT |
: |
OSCO, |
IOB4 |
|
|
| ; |
RSTBIN |
: |
RSTB, |
IOB3 |
|
|
| ; |
선택사양(Option) |
|
| ; |
Chip Type |
: |
FM8P53 |
|
| ; |
Set Voltage |
: |
EXTV, |
5V, |
3.3V, |
|
| ; |
Set Freq. |
: |
20MHz~32.3KHz, |
Ext. CLK |
|
| ; |
Fosc<2:0> |
: |
ERC, |
HF, |
XT, |
LF |
| ; |
Ext. Clock Unit |
: |
MHz, |
KHz |
|
|
| ; |
Ext. Clock Freq. |
: |
사용자 지정 |
|
|
|
;---------------------------------------------------------------------------------------------------------------- ; 전 지역에서 사용할 공용 심벌을 정의합니다.
; 데이터 전송 방향을 지정합니다. |
| W |
|
EQU |
|
00 |
;데이터 전송 방향을 ACC로 지정합니다. |
| R |
|
EQU |
|
01 |
;데이터 전송 방향을 파일 레지스터(RAM)로 지정합니다. |
; 비트 데이터 처리시 비트를 정의합니다. |
| b0 |
|
EQU |
|
00 |
;비트0 지정. |
| b1 |
|
EQU |
|
01 |
;비트1 지정. |
| b2 |
|
EQU |
|
02 |
;비트2 지정. |
| b3 |
|
EQU |
|
03 |
;비트3 지정. |
| b4 |
|
EQU |
|
04 |
;비트4 지정. |
| b5 |
|
EQU |
|
05 |
;비트5 지정. |
| b6 |
|
EQU |
|
06 |
;비트6 지정. |
| b7 |
|
EQU |
|
07 |
;비트7 지정. |
;---------------------------------------------------------------------------------------------------------------- ; Option 레지스터를 정의합니다.
|
| bPS0 |
|
EQU |
|
00 |
|
| bPS1 |
|
EQU |
|
01 |
|
| bPS2 |
|
EQU |
|
02 |
|
| bPSA |
|
EQU |
|
03 |
|
| bT0SE |
|
EQU |
|
04 |
|
| bT0CS |
|
EQU |
|
05 |
|
| bINTEDG |
|
EQU |
|
06 |
|
| ; |
|
|
|
|
|
| bvT0SE |
|
EQU |
|
010H |
|
| bvT0CS |
|
EQU |
|
020H |
|
| bvINTEDG |
|
EQU |
|
040H |
|
| ; |
|
|
|
|
|
| bvTimerRate2 |
|
EQU |
|
00 |
|
| bvTimerRate4 |
|
EQU |
|
01 |
|
| bvTimerRate8 |
|
EQU |
|
02 |
|
| bvTimerRate16 |
|
EQU |
|
03 |
|
| bvTimerRate32 |
|
EQU |
|
04 |
|
| bvTimerRate64 |
|
EQU |
|
05 |
|
| bvTimerRate128 |
|
EQU |
|
06 |
|
| bvTimerRate256 |
|
EQU |
|
07 |
|
| ; |
|
|
|
|
|
| bvWdtRate1 |
|
EQU |
|
08H |
|
| bvWdtRate2 |
|
EQU |
|
09H |
|
| bvWdtRate4 |
|
EQU |
|
0AH |
|
| bvWdtRate8 |
|
EQU |
|
0BH |
|
| bvWdtRate16 |
|
EQU |
|
0CH |
|
| bvWdtRate32 |
|
EQU |
|
0DH |
|
| bvWdtRate64 |
|
EQU |
|
0EH |
|
| bvWdtRate128 |
|
EQU |
|
0FH |
|
;---------------------------------------------------------------------------------------------------------------- ; 특수 기능 레지스터들을 정의합니다.
|
| INDF |
|
EQU |
|
00H |
|
| TMR0 |
|
EQU |
|
01H |
|
| PCL |
|
EQU |
|
02H |
|
| PCHBUF |
|
EQU |
|
0AH |
|
;---------------------------------------------------------------------------------------------------------------- ; STATUS 레지스터를 정의합니다.
|
| STATUS |
|
EQU |
|
03H |
|
| bC |
|
EQU |
|
00 |
|
| bDC |
|
EQU |
|
01 |
|
| bZ |
|
EQU |
|
02 |
|
| bPD |
|
EQU |
|
03 |
|
| bTO |
|
EQU |
|
04 |
|
| bGP0 |
|
EQU |
|
05 |
|
| bGP1 |
|
EQU |
|
06 |
|
| bRST |
|
EQU |
|
07 |
|
;---------------------------------------------------------------------------------------------------------------- ; 파일 선택 레지스터를 정의합니다.
|
| FSR |
|
EQU |
|
04H |
|
| bRP0 |
|
EQU |
|
06 |
; 각 비트 6,7 정의. |
| bRP1 |
|
EQU |
|
07 |
|
;---------------------------------------------------------------------------------------------------------------- ; I/O 레지스터를 정의합니다.
|
| IOSTA |
|
EQU |
|
05H |
|
| bvINA0 |
|
EQU |
|
01 |
|
| bvINA1 |
|
EQU |
|
02 |
|
| bvINA2 |
|
EQU |
|
04 |
|
| bvINA3 |
|
EQU |
|
08 |
|
| ; |
|
|
|
|
|
| IOSTB |
|
EQU |
|
06H |
|
| bvINB0 |
|
EQU |
|
01 |
|
| bvINB1 |
|
EQU |
|
02 |
|
| bvINB2 |
|
EQU |
|
04 |
|
| bvINB3 |
|
EQU |
|
08 |
|
| bvINB4 |
|
EQU |
|
010H |
|
| bvINB5 |
|
EQU |
|
020H |
|
| bvINB6 |
|
EQU |
|
040H |
|
| bvINB7 |
|
EQU |
|
080H |
|
;---------------------------------------------------------------------------------------------------------------- ; 파워 컨트롤 레지스터를 정의합니다.
|
| PCON |
|
EQU |
|
08H |
|
| bLVDTE |
|
EQU |
|
05 |
; 각 비트 5,6,7 정의. |
| bEIS |
|
EQU |
|
06 |
|
| bWDTE |
|
EQU |
|
07 |
|
;---------------------------------------------------------------------------------------------------------------- ; 웨이크업 컨트롤 레지스터를 정의합니다.
|
| WUCON |
|
EQU |
|
09H |
|
| bWUB0 |
|
EQU |
|
00 |
; 각 비트 0,1,2,3,4,5,6,7 정의. |
| bWUB1 |
|
EQU |
|
01 |
|
| bWUB2 |
|
EQU |
|
02 |
|
| bWUB3 |
|
EQU |
|
03 |
|
| bWUB4 |
|
EQU |
|
04 |
|
| bWUB5 |
|
EQU |
|
05 |
|
| bWUB6 |
|
EQU |
|
06 |
|
| bWUB7 |
|
EQU |
|
07 |
|
| bvWUB0 |
|
EQU |
|
01 |
; 각 비트 값 0,1,2,3,4,5,6,7 정의. |
| bvWUB1 |
|
EQU |
|
02 |
|
| bvWUB2 |
|
EQU |
|
04 |
|
| bvWUB3 |
|
EQU |
|
08 |
|
| bvWUB4 |
|
EQU |
|
010H |
|
| bvWUB5 |
|
EQU |
|
020H |
|
| bvWUB6 |
|
EQU |
|
040H |
|
| bvWUB7 |
|
EQU |
|
080H |
|
;---------------------------------------------------------------------------------------------------------------- ; 풀 다운(Pull-Down) 컨트롤 레지스터를 정의합니다.
|
| PDCON |
|
EQU |
|
0BH |
|
| bPDA0 |
|
EQU |
|
00 |
;/PDA0; 각 비트 0,1,2,3,4,5,6 정의. |
| bPDA1 |
|
EQU |
|
01 |
;/PDA1 |
| bPDA2 |
|
EQU |
|
02 |
;/PDA2 |
| bPDA3 |
|
EQU |
|
03 |
;/PDA3 |
| bPDB0 |
|
EQU |
|
04 |
;/PDB0 |
| bPDB1 |
|
EQU |
|
05 |
;/PDB1 |
| bPDB2 |
|
EQU |
|
06 |
;/PDB2 |
| bvPDA0 |
|
EQU |
|
01 |
;/PDA0; 각 비트 값 0,1,2,3,4,5,6 정의. |
| bvPDA1 |
|
EQU |
|
02 |
;/PDA1 |
| bvPDA2 |
|
EQU |
|
04 |
;/PDA2 |
| bvPDA3 |
|
EQU |
|
08 |
;/PDA3 |
| bvPDB0 |
|
EQU |
|
010H |
;/PDB0 |
| bvPDB1 |
|
EQU |
|
020H |
;/PDB1 |
| bvPDB2 |
|
EQU |
|
040H |
;/PDB2 |
;---------------------------------------------------------------------------------------------------------------- ; 오픈-드래인(Opeb-Drain) 컨트롤 레지스터를 정의합니다.
|
| ODCON |
|
EQU |
|
0CH |
|
| bODB0 |
|
EQU |
|
00 |
; 각 비트 0,1,2,4,5,6,7 정의. |
| bODB1 |
|
EQU |
|
01 |
|
| bODB2 |
|
EQU |
|
02 |
|
| bODB4 |
|
EQU |
|
04 |
|
| bODB5 |
|
EQU |
|
05 |
|
| bODB6 |
|
EQU |
|
06 |
|
| bODB7 |
|
EQU |
|
07 |
|
| bvODB0 |
|
EQU |
|
01 |
; 각 비트 값 0,1,2,4,5,6,7 정의. |
| bvODB1 |
|
EQU |
|
02 |
|
| bvODB2 |
|
EQU |
|
04 |
|
| bvODB4 |
|
EQU |
|
010H |
|
| bvODB5 |
|
EQU |
|
020H |
|
| bvODB6 |
|
EQU |
|
040H |
|
| bvODB7 |
|
EQU |
|
080H |
|
;---------------------------------------------------------------------------------------------------------------- ; 풀-하이(Pull-High) 컨트롤 레지스터를 정의합니다.
|
| PHCON |
|
EQU |
|
0DH |
|
| bPHB0 |
|
EQU |
|
00 |
;/PHB0; 각 비트 0,1,2,3,4,5,6,7 정의. |
| bPHB1 |
|
EQU |
|
01 |
;/PHB1 |
| bPHB2 |
|
EQU |
|
02 |
;/PHB2 |
| bPHB3 |
|
EQU |
|
03 |
;/PHB3 |
| bPHB4 |
|
EQU |
|
04 |
;/PHB4 |
| bPHB5 |
|
EQU |
|
05 |
;/PHB5 |
| bPHB6 |
|
EQU |
|
06 |
;/PHB6 |
| bPHB7 |
|
EQU |
|
07 |
;/PHB7 |
| bvPHB0 |
|
EQU |
|
01 |
;/PHB0; 각 비트 값 0,1,2,3,4,5,6,7 정의. |
| bvPHB1 |
|
EQU |
|
02 |
;/PHB1 |
| bvPHB2 |
|
EQU |
|
04 |
;/PHB2 |
| bvPHB3 |
|
EQU |
|
08 |
;/PHB3 |
| bvPHB4 |
|
EQU |
|
010H |
;/PHB4 |
| bvPHB5 |
|
EQU |
|
020H |
;/PHB5 |
| bvPHB6 |
|
EQU |
|
040H |
;/PHB6 |
| bvPHB7 |
|
EQU |
|
080H |
;/PHB7 |
;---------------------------------------------------------------------------------------------------------------- ; 인터럽트 설정 레지스터를 정의합니다.
|
| INTEN |
|
EQU |
|
0EH |
|
| bT0IE |
|
EQU |
|
00 |
; 각 비트 0,1,2,7 정의. |
| bPBIE |
|
EQU |
|
01 |
|
| bINTIE |
|
EQU |
|
02 |
|
| bGIE |
|
EQU |
|
07 |
|
| bvT0IE |
|
EQU |
|
01H |
; 각 비트 값 0,1,2,7 정의. |
| bvPBIE |
|
EQU |
|
02H |
|
| bvINTIE |
|
EQU |
|
04H |
|
| bvGIE |
|
EQU |
|
080H |
|
;---------------------------------------------------------------------------------------------------------------- ; 인터럽트 상태 레지스터를 정의합니다.
|
| INTFLAG |
|
EQU |
|
0FH |
|
| bT01F |
|
EQU |
|
00 |
; 각 비트 0,1,2 정의. |
| bPBIF |
|
EQU |
|
01 |
|
| bINTIF |
|
EQU |
|
02 |
|
| bvT0IF |
|
EQU |
|
01 |
; 각 비트 값 0,1,2 정의. |
| bvPBIF |
|
EQU |
|
02 |
|
| bvINTIF |
|
EQU |
|
04 |
|
;---------------------------------------------------------------------------------------------------------------- ; Port A, Port B 레지스터를 정의합니다. ; 각 포트의 비트값은 여러분의 회로에 알맞은 포트 변수명으로 추가 정의하여 사용할 수 있습니다.
|
| PortA |
|
EQU |
|
05H |
|
| bPA0 |
|
EQU |
|
00 |
; 각 비트 0,1,2,3 정의. |
| bPA1 |
|
EQU |
|
01 |
|
| bPA2 |
|
EQU |
|
02 |
|
| bPA3 |
|
EQU |
|
03 |
|
| bvPA0 |
|
EQU |
|
01 |
; 각 비트값 0,1,2,3 정의. |
| bvPA1 |
|
EQU |
|
02 |
|
| bvPA2 |
|
EQU |
|
04 |
|
| bvPA3 |
|
EQU |
|
08 |
|
| ; |
|
|
|
|
|
| PortB |
|
EQU |
|
06H |
|
| bPB0 |
|
EQU |
|
00 |
; 각 비트 0,1,2,3,4,5,6,7 정의. |
| bPB1 |
|
EQU |
|
01 |
|
| bPB2 |
|
EQU |
|
02 |
|
| bPB3 |
|
EQU |
|
03 |
|
| bPB4 |
|
EQU |
|
04 |
|
| bPB5 |
|
EQU |
|
05 |
|
| bPB6 |
|
EQU |
|
06 |
|
| bPB7 |
|
EQU |
|
07 |
|
| bvPB0 |
|
EQU |
|
01 |
; 각 비트값 0,1,2,3,4,5,6,7 정의. |
| bvPB1 |
|
EQU |
|
02 |
|
| bvPB2 |
|
EQU |
|
04 |
|
| bvPB3 |
|
EQU |
|
08 |
|
| bvPB4 |
|
EQU |
|
010H |
|
| bvPB5 |
|
EQU |
|
020H |
|
| bvPB6 |
|
EQU |
|
040H |
|
| bvPB7 |
|
EQU |
|
080H |
|
; ; 여기에 여러분의 회로에 알맞은 포트 변수명으로 추가 정의합니다. ; 예를들면 bPA0 비트를 LED로 할 경우는 아래와 같습니다. |
| bLED |
|
EQU |
|
00 |
; Port A Bit0 |
;---------------------------------------------------------------------------------------------------------------- ; 사용할 변수를 정의합니다.
|
| ;rTEMP |
|
EQU |
|
07H |
; 이 영역을 변수로 사용할 수 있습니다. |
| rACC |
|
EQU |
|
010H |
; 인터럽트에서 백업할 ACC 내용을 저장합니다. |
| rSTATUS |
|
EQU |
|
011H |
; 인터럽트에서 백업할 STATUS 내용을 저장합니다. |
|
|
|
|
|
;사용자가 필요한 변수를 정의합니다. |
;---------------------------------------------------------------------------------------------------------------- ; 여기부터 프로그램을 코딩합니다. ; 먼저 프로그램 및 인터럽트 시작 위치를 설정합니다. |
|
|
ORG |
|
000H |
|
|
|
GOTO |
|
Start |
; 프로그램 시작 위치를 지정합니다. |
|
|
|
|
|
|
|
|
ORG |
|
002H |
|
|
|
GOTO |
|
SoftINT |
; 소프트웨어 인터럽트 시작 위치를 지정합니다. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ORG |
|
008H |
|
;---------------------------------------------------------------------------------------------------------------- ; 인터럽트 프로그램을 코딩합니다. |
| HardINT: |
|
|
|
|
|
|
|
MOVAR |
|
rACC |
; 메인에서 사용한 ACC를 백업합니다. |
|
|
SWAPR |
|
STATUS, W |
|
|
|
MOVAR |
|
rSTATUS |
; 메인에서 사용한 STATUS를 백업합니다. |
|
|
...
|
|
|
; 필요한 경우, 페이지 지정 레지스터 및 램 뱅크 레지스터를 백업합니다.
; CALL 명령을 사용하여 필요한 인터럽트 기능을 수행합니다.
; 저장한 레지스터가 있는경우 복원합니다.
|
|
|
|
|
|
; 사용한 인터럽트 플래그를 지웁니다. |
|
|
|
|
|
|
|
|
SWAPR |
|
rSTATUS, W |
|
|
|
MOVAR |
|
STATUS |
; STATUS를 가져옵니다(복원). |
|
|
SWAPR |
|
rACC, R |
|
|
|
SWAPR |
|
rACC, W |
; ACC를 가져옵니다(복원). |
| |
|
RETFIE |
|
|
; 인터럽트 루틴에서 복귀합니다. |
|
|
|
|
|
|
| SoftINT: |
|
|
|
|
|
|
|
RETURN |
|
|
;필요한 기능을 정의하고 원래 위치로 돌아갑니다. |
;---------------------------------------------------------------------------------------------------------------- ; 시작 프로그램을 코딩합니다. |
| Start: |
|
|
|
|
|
|
|
|
|
|
; 리셋 또는 웨이크업 상태를 확인하여 처리합니다. |
|
|
|
|
|
|
|
|
|
|
|
; 필요한 포트 및 레지스터를 초기화 합니다. |
|
|
|
|
|
|
| MainLoop: |
|
|
|
|
|
|
|
...
|
|
|
; 반복적인 기능을 처리합니다. |
|
|
GOTO |
|
MainLoop |
|
;---------------------------------------------------------------------------------------------------------------- ; 여기에 프로그램 리셋 위치를 정의합니다.
|
|
|
ORG |
|
03FFH |
|
|
|
GOTO |
|
Start |
|
;----------------------------------------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
|
이 프로그램은 FM8P 전용 어셈블리 언어 입니다. (주)이지플로우는 오랜 기간의 경험을 바탕으로 위와 같은 코딩 방법을 체택하여 개발하고 있습니다. 어셈블리 코딩 방식에 익숙하지 않은 학생/개발자는 이 방법을 참조하시기 바랍니다. 또한, 이 부분에 대하여 추가 정보/설명/아이디어가 있으시면, 이메일로 알려 주시기 바랍니다. |
|
|
|
|
|
|
|
|
|