?? 3-6.asm
字號:
.mmregs
SWCR .set 002BH ;定義SWCR寄存器
OUTDATA1 .set 0000H ;定義DA輸出數值1
OUTDATA2 .set 07FFH ;定義DA輸出數值2
K_IPTR .set 000111000B<<07 ;定義中斷入口地址高9bit
K_TEMP .set 1111111B ;定義中斷入口地址低7bit
.data ;數據段開始
RES_SPACE: ;程序標號
.space 07E0h ;將前127個字節預留
.word 8000h
.word 0000H
.sect ".DISPLAY"
.label DISPLAY_SRC
.word 08AAH ;定義BOOT啟動方式,并行8bit
.word 7fffH ;SWWSR的值
.word 0F000H ;BSCR的值
.word 0000h ;xpc 的值
.word 0200h ;pc 的值
.word 01e0h ;程序長度
.word 0000h ;第一段的xpc值
.word 0100h ;第一段的pc值
.copy "vectors.asm" ;拷貝中斷向量表程序
start: ;以下斜體部分為寫入Flash的程序,這里不做說明
stm #3000h,sp ;如果寫入的內容改變,可以將用戶程序替代斜體
STM #80H,AR2 ;部分程序就可以了
STM #81H,AR3
ST #outdata1,*ar2
ST #outdata2,*ar3
begin:
portw *ar2,0bfffh
rpt #7fffh
nop
portw *ar3,0bfffh
rpt #7fffh
nop
b begin ;程序結束
.space 2000h ;以下程序實現將斜體部分程序內容寫入Flash中
.label DISPLAY_END
.text
MAIN_START:
STM #3000h,SP
STM #0FFA0H,PMST
STM #07FFFH,SWWSR
STM #0FFFFH,SWCR
STM #0H,34H
STM #0H,35H
STM #1H,34H
STM #0H,35H
STM #0EH,34H
STM #3F4FH,35H
SSBX INTM ;關閉所有中斷
STM #8000h,AR6
STM #8000H,AR3 ;寫入的地址
STM DISPLAY_SRC,AR5 ;寫入的程序頭
STM #0BH,AR4 ;一共寫入12頁
WRI_RPT:
STM #63,AR1 ;一頁寫入64個字節,在Flash中為128個字節
WRI_LOP:
LD *AR5,-8,A ;將128個半字節依次寫入Flash中
NOP
NOP
AND #0FEFFH,A ;將D8數據總線置0,用于Flash的寫時鐘
NOP
NOP
STL A,*AR6
NOP
NOP
LD *AR5,-8,A
NOP
NOP
OR #0100H,A ;將D8數據總線置1
NOP
NOP
STL A,*AR6+ ;地址加1,準備寫入下一個數據
NOP
NOP
LD *AR5,A
NOP
NOP
AND #0FEFFH,A
NOP
NOP
STL A,*AR6
NOP
NOP
LD *AR5+,A
NOP
NOP
OR #0100H,A
NOP
NOP
STL A,*AR6+
NOP
NOP
BANZ WRI_LOP,*AR1-
CALL DELAYY
BANZ WRI_RPT,*AR4-
STM #RES_SPACE,AR1
STM #0FF80H,AR5 ;將原中斷向量清零
STM #127,AR3
WRI_LOOP:
LD *AR1,-8,A
NOP
NOP
AND #0FEFFH,A
NOP
NOP
STL A,*AR5
NOP
NOP
LD *AR1+,-8,A
NOP
NOP
OR #0100H,A
NOP
NOP
STL A,*AR5+
NOP
BANZ WRI_LOOP,*AR3-
LOAD_LOOP:
B LOAD_LOOP
DELAYY: ;延時子程序
PSHM AR2 ;等待Flash將一頁數據寫入的時間,
STM #0020H,AR2
DELAYY_LOOP:
RPT #0fff0h
NOP
BANZ DELAYY_LOOP,*AR2-
POPM AR2
RET
.END ;程序結束
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -