?? main.asm
字號(hào):
//======================================================================
// The information contained herein is the exclusive property of
// Sunnnorth Technology Co. And shall not be distributed, reproduced,
// or disclosed in whole in part without prior written permission.
// (C) COPYRIGHT 2003 SUNNORTH TECHNOLOGY CO.
// ALL RIGHTS RESERVED
// The entire notice above must be reproduced on all authorized copies.
//======================================================================
//======================================================================
// 工程名稱: ex21_asm_FLASH
// 功能描述: 《實(shí)驗(yàn)儀實(shí)驗(yàn)指導(dǎo)書》基礎(chǔ)應(yīng)用實(shí)驗(yàn)
// 32K FLASH讀寫
// 向FLASH中的0xA000單元寫數(shù)據(jù),然后讀出,每次復(fù)位加1
// 現(xiàn)象,程序每次復(fù)位重新運(yùn)行將點(diǎn)亮不同的二極管,事實(shí)上是
// 記錄開(kāi)機(jī)和復(fù)位的總次數(shù)
// IDE環(huán)境: SUNPLUS u'nSPTM IDE 2.0.0(or later)
// 涉及的庫(kù): CMacro1016.lib
// 組成文件: main.asm
// 硬件連接: LED_SEG接口的IOA0~7與a~h分別連接
// LED_DIG接口的IOB6與DIG5連接
// 維護(hù)記錄: 2005-09-12 v1.0
//
//======================================================================
//======================================================================
// 文件名稱: main.asm
// 功能描述: 向FLASH中的0xA000單元寫數(shù)據(jù),然后讀出,每次復(fù)位加1
// 現(xiàn)象,程序每次復(fù)位重新運(yùn)行將點(diǎn)亮不同的二極管
// 維護(hù)記錄: 2005-09-12 v1.0
//======================================================================
.DEFINE P_IOA_Data 0x7000
.DEFINE P_IOA_Dir 0x7002
.DEFINE P_IOA_Attrib 0x7003
.DEFINE P_IOB_Data 0x7005
.DEFINE P_IOB_Dir 0x7007
.DEFINE P_IOB_Attrib 0x7008
.DEFINE P_Watchdog_Clear 0x7012
.DEFINE P_Flash_Ctrl 0x7555
.DEFINE C_FLASH_SIZE 0x8000
.DEFINE C_FLASH_BLOCK_SIZE 0x100
.DEFINE C_FLASH_MATCH 0xAAAA
.DEFINE C_FLASH_PAGE_ERASE 0x5511 //擦除一頁(yè)
.DEFINE C_FLASH_1WORD_PGM 0x5533 //寫一個(gè)字
.DEFINE C_FLASH_SEQUENT_PGM 0x5544 //寫多個(gè)字
.DEFINE C_FLAG 0xa000
.RAM
.VAR Temp
.CODE
//=========================================================================
// 匯編格式: _main
// C格式: int main(void);
// 實(shí)現(xiàn)功能: 向FLASH中的0xA000單元寫數(shù)據(jù),然后讀出,每次復(fù)位加1
// 現(xiàn)象,程序每次復(fù)位重新運(yùn)行將點(diǎn)亮不同的二極管
// 入口參數(shù): 無(wú)
// 出口參數(shù): 無(wú)
// 破壞寄存器:r1,r2,bp
//==========================================================================
.PUBLIC _main
_main:
r1 = 0x00ff //初始化IOA口低八位為同相低電平輸出口
[P_IOA_Dir] = r1
r1 = 0x00ff
[P_IOA_Attrib] = r1
r1 = 0x0000
[P_IOA_Data] = r1
r1 = 0x0040 //IOB6設(shè)置為高電平輸出
[P_IOB_Dir] = r1
[P_IOB_Attrib] = r1
[P_IOB_Data] = r1
bp = C_FLAG //被寫數(shù)據(jù)的起始地址
r1 = [bp] //讀數(shù)據(jù)
cmp r1,0x0100 //比較是否大于0x0100
jne ?Add //否,轉(zhuǎn)向?Add
r1 = 0xffff //
?Add:
r1 += 1 //讀出數(shù)據(jù)加1
[Temp] = r1 //暫存數(shù)據(jù)
r1 = C_FLAG //擦除FLASH
call F_FlashErase
r1 = C_FLAG
r2 = [Temp]
call F_FlashWrite1Word //寫數(shù)據(jù)
[P_IOA_Data] = r2 //顯示讀出數(shù)據(jù)
?Loop:
r1 = 0x0001
[P_Watchdog_Clear] = r1
jmp ?Loop
//========================================================
// 匯編格式: F_FlashWrite1Word
// C格式: 無(wú)(不提供)
// 實(shí)現(xiàn)功能: 寫一個(gè)字到FLASH中
// 入口參數(shù): r1:被寫數(shù)據(jù)的存儲(chǔ)地址,r2:被寫數(shù)據(jù)
// 出口參數(shù): 無(wú)
// 破壞寄存器:r1,r2
//========================================================
.PUBLIC F_FlashWrite1Word
F_FlashWrite1Word:
r3 = C_FLASH_MATCH //AAAA
[P_Flash_Ctrl] = r3
r3 = C_FLASH_1WORD_PGM //5533
[P_Flash_Ctrl] = r3 //使能寫命令
[r1] = r2 //寫數(shù)據(jù)
retf
//========================================================
// 匯編格式: F_FlashWrite
// C格式: 無(wú)(不提供)
// 實(shí)現(xiàn)功能: 順序?qū)懚鄠€(gè)字到FLASH中
// 入口參數(shù): r1:被寫數(shù)據(jù)的目的起始地址,r2:被寫數(shù)據(jù)源起始地址
// r3:被寫數(shù)據(jù)的字?jǐn)?shù)
// 出口參數(shù): 無(wú)
// 破壞寄存器:r1,r2,r3
//========================================================
.PUBLIC F_FlashWrite
F_FlashWrite:
r4 = C_FLASH_MATCH //AAAA
[P_Flash_Ctrl] = r4
?FlashWriteLoop:
r4 = C_FLASH_SEQUENT_PGM //5544
[P_Flash_Ctrl] = r4
r4 = [r2++]
[r1++] = r4 //寫數(shù)據(jù)
r3 -= 1 //判斷是否寫結(jié)束
jnz ?FlashWriteLoop //否,繼續(xù)寫
[P_Flash_Ctrl] = r3 //寫結(jié)束
retf
//========================================================
// 匯編格式: F_FlashErase
// C格式: 無(wú)(不提供)
// 實(shí)現(xiàn)功能: 擦除256個(gè)字節(jié)
// 入口參數(shù): r1:擦除頁(yè)的起始地址
// 出口參數(shù): 無(wú)
// 破壞寄存器:r1
//========================================================
.PUBLIC F_FlashErase
F_FlashErase:
r2 = C_FLASH_MATCH //AAAA
[P_Flash_Ctrl] = r2
r2 = C_FLASH_PAGE_ERASE //5511
[P_Flash_Ctrl] = r2
[r1] = r1 //往該頁(yè)的地址寫任意數(shù)
retf
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -