C8051Fxxx 프로세서는 Flash 메모리 전구간에 대하여 데이터를 써넣을 수 있습니다. 다른 프로세서는 Flash 메모리와 EEPROM 메모리로 나누어서 EEPROM 에만 데이터를 쓸수 있지만 C8051Fxxx 은 Flash 와 EEPROM 을 구분하지 않습니다.
;-----------------------------------------------------------------------------
; SAMPLE Electronics co. http://www.SAMPLE.co.kr
; Tel (02): 707-3882 Fax: (02) 707-3884
;-----------------------------------------------------------------------------
; FLASH Memory Programming
; 이 프로그램은 C8051Fxxx 프로세서의 FLASH 메모리에 데이터를
; 프로그래밍 하는 실험입니다. ( 8000h 번지에 데이트를 라이트 )
;-----------------------------------------------------------------------------
;
;-----------------------------------------------------------------------------
; EQUATES
;-----------------------------------------------------------------------------
$MOD8F000
;-----------------------------------------------------------------------------
; VARIABLES
;-----------------------------------------------------------------------------
; Indirect address space variables
ISEG at 80h
org 0e8h ; temporary forced STACK location
STACK_TOP: DS 1 ; beginning of hardware stack
;-----------------------------------------------------------------------------
; MACRO DEFINITIONS
;-----------------------------------------------------------------------------
;-----------------------------------------------------------------------------
; RESET AND INTERRUPT VECTOR TABLE
;-----------------------------------------------------------------------------
CSEG
org 0000h
ljmp Main
;-----------------------------------------------------------------------------
; MAIN PROGRAM CODE
;-----------------------------------------------------------------------------
org 0B3h
Main:
mov WDTCN, #0deh ; 워치독 타이머 동작 금지
mov WDTCN, #0adh
;
mov SP, #STACK_TOP ; 스택포인터 설정
mov XBR2, #40h ; Enable crossbar and weak pull-ups
;
; mov OSCXCN, #01100101b ; 외부 오실레이터, 크리스탈을 동작한다.
; ; XFCN = '101' for 11.0592 MHz crystal
; mov OSCICN, #00001000b ; 외부 오실레이터 클럭을 시스템 클럭으로
; ; 사용한다. 내부 오실레이터를 금지한다.
;
;-----------------------------------------------< Flash Erase / 플래쉬 블럭 지우기 >
mov flscl,#10000110b ; Flash One-Shot Timer Enable
; FLASCL = 0110 내부 1.9 MHz 클럭
; FLASCL = 1000 외부 11.0592 MHz 클럭
orl psctl,#00000011b ; PSEE 비트와 PSWE 비트를 동시에 세트
mov dptr,#8000h ; 이레이즈 Flash 블럭(512 Byte 단위) 주소 지정
; mov a,#55h ; 임의 데이타 (값은 상관 없슴)
movx @dptr,a ; Flash 클리어( 0FFh 로 만듬)
anl psctl,#11111101b ; PSEE bit clear 이레이즈 금지
;-------------------------------< FLASH Write / 1 개 바이트 라이트 >
mov a,#0CCh ; Flash 에 써넣을 데이터
mov dptr, #8000h ; 어드레스
movx @dptr,a ; 데이터 쓰기
anl psctl,#11111110b ; PSWE bit clear - 쓰기완료
;-------------------------------< Flash Read / 써넣은 값 읽어 테스트 >
clr a
movc a,@a+dptr ; 읽어온다
mov P0, a ; 읽은값을 P0 에 표시한다.
sjmp $ ; STOP
;-----------------------------------------------------------------------------
; End of file.
END
회원에게만 댓글 작성 권한이 있습니다.