Easyflow Inc.
正在以 简体中文 · 海外 · 美元 ($) 显示。可通过上方的地球图标更改。

FM8P 技术文档

FM8P MCU 인터럽트 루틴 소스 코드.

a, FM8P 프로젝트 0000, 인터럽트 루틴 2009-10-20
FM8P MCU 인터럽트 루틴

FM8P MCU는 인터럽트 루틴을 사용할 수 있습니다.
MCU 프로그램에서 인터럽트를 사용할 경우 기본 순서는 아래와 같습니다.

  1. 메인 루틴에서 사용중인 레지스터를 인터럽트 루틴 시작 부분에서 백업합니다.
  2. 필요한 인터럽트 기능을 수행합니다.
  3. 사용한 인터럽트 플래그를 지웁니다.
  4. 인터럽트 루틴 끝 부분에서 메인루틴에서 사용중인 레지스터를 복원합니다.
  5. 리턴합니다.


  [ 보기 : 프로그램 예제 소스 코드 ]

;----------------------------------------------------------------------------------------------------------------
;
;     FM8P MCU 인터럽트 루틴 프로그램 소스 코드 V.1.0
;
; (주)이지플로우 기술지원팀
;----------------------------------------------------------------------------------------------------------------


;----------------------------------------------------------------------------------------------------------------
; 전 지역에서 사용할 공용 심벌을 정의합니다.

; 데이터  전송 방향을 지정합니다.
W EQU 00
R EQU 01


;----------------------------------------------------------------------------------------------------------------
; 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


;----------------------------------------------------------------------------------------------------------------
; 인터럽트 설정 레지스터를 정의합니다.
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
INTFLAG EQU 0FH
 


;----------------------------------------------------------------------------------------------------------------
; 사용할 변수를 정의합니다.
rACC   EQU   010H ; 인터럽트에서 백업할 ACC 내용을 저장합니다.
rSTATUS EQU 011H ; 인터럽트에서 백업할 STATUS 내용을 저장합니다.
;사용자가 필요한 변수를 정의합니다.
 
 
;----------------------------------------------------------------------------------------------------------------
; 여기부터 프로그램을 코딩합니다.
; 먼저 프로그램 및 인터럽트 시작 위치를 설정합니다.
ORG 000H
GOTO Start ; 프로그램 시작 위치를 지정합니다. 
  ;2K,4K 디바이스는 FGOTO 명령을 사용할 수 있습니다. 
ORG 002H
GOTO SoftINT ; 소프트웨어 인터럽트 시작 위치를 지정합니다.  
;2K,4K 디바이스는 FGOTO 명령을 사용할 수 있습니다. 
ORG 008H
 
;----------------------------------------------------------------------------------------------------------------
; 인터럽트 프로그램을 코딩합니다.
HardINT:
MOVAR rACC ; 메인에서 사용한 ACC를 백업합니다.
SWAPR STATUS, W
MOVAR rSTATUS ; 메인에서 사용한 STATUS를 백업합니다.

...

; 필요한 경우, 페이지 지정 레지스터 및 램 뱅크 레지스터를 백업합니다.

; CALL 명령을 사용하여 필요한 인터럽트 기능을 수행합니다.

; 저장한 레지스터가 있는경우 복원합니다.
BCR INTFLAG, bT01F ; 사용한 인터럽트 플래그를 지웁니다(타이머 경우).
 
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年中秋节(秋夕)假期休息通知