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

📄 main.a51

📁 扩展RAM 扩展RAM 扩展RAM 扩展RAM 扩展RAM 扩展RAM 扩展RAM
💻 A51
字号:
;*******************************************************************************
;程序名称:RAM测试
;硬件接法:16KB片外RAM接在0x8000~0xBFFF,MOVC和MOVX都可访问,详见电路图
;运行效果:如果RAM通过测试,则指示灯常亮,否则指示灯不停闪烁
;*******************************************************************************


;*******************************************************************************
;定义I/O接口
;*******************************************************************************
LED	BIT	P1.1


;*******************************************************************************
;复位入口
;*******************************************************************************
	ORG	0x0000
	LJMP	main


	ORG	0x0080


;*******************************************************************************
;函数:void Delay(unsigned char t)
;功能:延时0.01s~2.56s
;参数:t = R7
;      t>0时,延时(t*0.01)s
;      t=0时,延时2.56s
;说明:定时10ms的定时器初值=65536-0.01/(1/(f/12)),其中f为晶振频率
;*******************************************************************************
Delay:
	MOV	TH0, #0xDC	;设置T0初值(定时10ms)
	MOV	TL0, #0x00
	SETB	TR0		;启动T0
	JNB	TF0, $		;等待T0溢出
	CLR	TR0		;停止T0
	CLR	TF0		;清除溢出标志
	DJNZ	R7, Delay	;循环t次
	RET


;*******************************************************************************
;宏定义:DJNZ_W
;功能:双字节数自减1,结果不为0跳转
;参数:
;	(xh,xl):要操作的数
;	Label:跳转目标
;*******************************************************************************
DJNZ_W	MACRO	xh,xl, Label
LOCAL	next
	MOV	A, xl
	JNZ	next
	DEC	xh
next:
	DEC	xl
	MOV	A, xh
	ORL	A, xl
	JNZ	Label
	ENDM


;*******************************************************************************
;函数:void WriteRam(unsigned int addr, unsigned int size, unsigned char c)
;功能:向RAM写入数据
;参数:addr=R6,R7-起始地址
;      size=R4,R5-存储单元大小
;      c=R3-要写入的数据
;*******************************************************************************
WriteRam:
	MOV	DPH, R6
	MOV	DPL, R7
WriteRam_Loop:
	MOV	A, R3
	MOVX	@DPTR, A
	INC	DPTR
	DJNZ_W	R4,R5, WriteRam_Loop
	RET


;*******************************************************************************
;函数:bit CheckRam(unsigned int addr, unsigned int size, unsigned char c)
;功能:检查RAM中存储的数据
;参数:addr=R6,R7-起始地址
;      size=R4,R5-存储单元大小
;      c=R3-核对的数据
;返回:0-失败
;      1-成功
;*******************************************************************************
CheckRam:
	MOV	DPH, R6
	MOV	DPL, R7
CheckRam_Loop:
	CLR	A
	MOVC	A, @A+DPTR
	INC	DPTR
	XRL	A, R3
	JNZ	CheckRam_Fail
	DJNZ_W	R4,R5, CheckRam_Loop
	SETB	C
	RET
CheckRam_Fail:
	CLR	C
	RET


;*******************************************************************************
;函数:SysInit()
;功能:系统初始化
;*******************************************************************************
SysInit:
	MOV	SP, #0x30
	MOV	TMOD, #0x01	;T0设置在方式1,即16位定时器
	RET


;*******************************************************************************
;函数:void main()
;功能:主函数
;*******************************************************************************
main:
	CALL	SysInit
;向x8000~0xBFFF写入测试数据0x5A
	MOV	R3, #0xA5
	MOV	R4, #0x40
	MOV	R5, #0x00
	MOV	R6, #0x80
	MOV	R7, #0x00
	CALL	WriteRam
;检查RAM
	MOV	R3, #0xA5
	MOV	R4, #0x40
	MOV	R5, #0x00
	MOV	R6, #0x80
	MOV	R7, #0x00
	CALL	CheckRam
	JNC	Ram_Error
Ram_Ok:
	;测试通过,LED常亮
	CLR	LED
	SJMP	$
Ram_Error:
	;测试失败,LED不停闪烁
	CLR	LED
	MOV	R7, #30
	CALL	Delay
	SETB	LED
	MOV	R7, #30
	CALL	Delay
	SJMP	Ram_Error


;*******************************************************************************
;程序结束
;*******************************************************************************
	END

⌨️ 快捷键说明

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