복잡한 프로그램을 쉽고 빠르게 개발할 수 있는
  한글 프로그램 제어기인 디오를 판매합니다.
  20년 이상 축척된 다양한 개발 경험과 축척된
  기술력을 바탕으로 제품 양산을 도와 드립니다 !!
 
    하드웨어 제품
 
    기술자료
 

more... 
1. Prof-UIS v.2.90 버젼이 출시 되었습니다.  
2. AVRISP, JTAGICE 가격을 대폭인하합니다.   
3. Prof-UIS 2.89 릴리즈 !!!                
4. Elegant Ribbon 3.6 릴리즈 !!!           
5. Elegant Ribbon 3.5 릴리즈 !!!           
  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 전용 어셈블리 언어 입니다.
 (주)이지플로우는 오랜 기간의 경험을 바탕으로 위와 같은 코딩 방법을 체택하여 개발하고 있습니다.
어셈블리 코딩 방식에 익숙하지 않은 학생/개발자는 이 방법을 참조하시기 바랍니다.
또한, 이 부분에 대하여 추가 정보/설명/아이디어가 있으시면, 이메일로 알려 주시기 바랍니다.

㈜이지플로우 기술개발부  
FM8P 프로젝트   

      

    

에스크로 가입 여부를 확인합니다.