Easyflow Inc.
हिन्दी · विदेश · अमेरिकी डॉलर ($) में दिखाया जा रहा है। आप इसे ऊपर दिए ग्लोब आइकन से बदल सकते हैं।

FM8P तकनीकी दस्तावेज़

FM8P53 MCU 기초 프로그램 소스 코드

a, FM8P 프로젝트 0200, FM8P53 기초 프로그램 2009-10-20
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 전용 어셈블리 언어 입니다.
 (주)이지플로우는 오랜 기간의 경험을 바탕으로 위와 같은 코딩 방법을 체택하여 개발하고 있습니다.
어셈블리 코딩 방식에 익숙하지 않은 학생/개발자는 이 방법을 참조하시기 바랍니다.
또한, 이 부분에 대하여 추가 정보/설명/아이디어가 있으시면, 이메일로 알려 주시기 바랍니다.

2026 चुसोक अवकाश के दौरान कार्यालय बंद रहने की सूचना