⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 电压控制程序,符合各种设备需要,核心程序,IBm专属
💻 ASM
字号:
//======================================================================
//	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
//	功能描述:	《实验仪实验指导书》基础应用实验
//              32K FLASH读写
//				向FLASH中的0xA000单元写数据,然后读出,每次复位加1
//				现象,程序每次复位重新运行将点亮不同的二极管,事实上是
//              记录开机和复位的总次数
//  IDE环境:   SUNPLUS u'nSPTM  IDE 2.0.0(or later)
//	涉及的库:	CMacro1016.lib
//	组成文件:	main.asm
//	硬件连接:	LED_SEG接口的IOA0~7与a~h分别连接
//				LED_DIG接口的IOB6与DIG5连接
//	维护记录:	2005-09-12	v1.0
//
//======================================================================

//======================================================================
//	文件名称:	main.asm
//	功能描述:	向FLASH中的0xA000单元写数据,然后读出,每次复位加1
//				现象,程序每次复位重新运行将点亮不同的二极管
//	维护记录:	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		//擦除一页
.DEFINE C_FLASH_1WORD_PGM		0x5533		//写一个字
.DEFINE C_FLASH_SEQUENT_PGM		0x5544		//写多个字

.DEFINE C_FLAG					0xa000

.RAM
.VAR Temp

.CODE

//=========================================================================
//	汇编格式:	_main
//	C格式:		int main(void);
//	实现功能:	向FLASH中的0xA000单元写数据,然后读出,每次复位加1
//				现象,程序每次复位重新运行将点亮不同的二极管
//	入口参数:	无
//	出口参数:	无
//	破坏寄存器: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设置为高电平输出
	[P_IOB_Dir] = r1
	[P_IOB_Attrib] = r1
	[P_IOB_Data] = r1

	bp = C_FLAG							//被写数据的起始地址
	r1 = [bp]                           //读数据
	cmp r1,0x0100                       //比较是否大于0x0100
	jne ?Add                            //否,转向?Add
	r1 = 0xffff                         //
?Add:
	r1 += 1                             //读出数据加1
	[Temp] = r1							//暂存数据
	
	r1 = C_FLAG							//擦除FLASH
	call F_FlashErase
	
	r1 = C_FLAG     
	r2 = [Temp]                         
	call F_FlashWrite1Word               //写数据
	
	[P_IOA_Data] = r2                    //显示读出数据
?Loop:
	r1 = 0x0001
	[P_Watchdog_Clear] = r1
	jmp ?Loop
//========================================================
//	汇编格式:	F_FlashWrite1Word
//	C格式:		无(不提供)
//	实现功能:	写一个字到FLASH中
//	入口参数:	r1:被写数据的存储地址,r2:被写数据
//	出口参数:	无
//	破坏寄存器: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                           //写数据
	retf
	
//========================================================
//	汇编格式:	F_FlashWrite
//	C格式:		无(不提供)
//	实现功能:	顺序写多个字到FLASH中
//	入口参数:	r1:被写数据的目的起始地址,r2:被写数据源起始地址
//				r3:被写数据的字数
//	出口参数:	无
//	破坏寄存器: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                             //写数据
	r3 -= 1                                 //判断是否写结束
	jnz ?FlashWriteLoop                     //否,继续写
	[P_Flash_Ctrl] = r3						//写结束
	retf

//========================================================
//	汇编格式:	F_FlashErase
//	C格式:		无(不提供)
//	实现功能:	擦除256个字节
//	入口参数:	r1:擦除页的起始地址
//	出口参数:	无
//	破坏寄存器: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								//往该页的地址写任意数
	retf

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -