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

📄 write_page1.asm

📁 C51实现的采用USB1.1通信方式对FLASH进行写入的代码
💻 ASM
字号:
; E:\file\htd30\asm\write_page.SRC generated from: E:\file\htd30\asm\write_page.c
; COMPILER INVOKED BY:
;        E:\file\htd30\asm\KEIL\c51.exe E:\file\htd30\asm\write_page.c

$NOMOD51

NAME	WRITE_PAGE

P0	DATA	080H
P1	DATA	090H
P2	DATA	0A0H
P3	DATA	0B0H
AC	BIT	0D0H.6
T0	BIT	0B0H.4
T1	BIT	0B0H.5
EA	BIT	0A8H.7
T2	BIT	090H.0
IE	DATA	0A8H
P0_0	BIT	080H.0
P1_0	BIT	090H.0
P0_1	BIT	080H.1
FL	BIT	0D0H.1
P2_0	BIT	0A0H.0
P1_1	BIT	090H.1
P0_2	BIT	080H.2
P3_0	BIT	0B0H.0
P2_1	BIT	0A0H.1
P1_2	BIT	090H.2
P0_3	BIT	080H.3
P3_1	BIT	0B0H.1
P2_2	BIT	0A0H.2
P1_3	BIT	090H.3
P0_4	BIT	080H.4
P3_2	BIT	0B0H.2
P2_3	BIT	0A0H.3
P1_4	BIT	090H.4
P0_5	BIT	080H.5
EXF2	BIT	0C8H.6
RD	BIT	0B0H.7
P3_3	BIT	0B0H.3
P2_4	BIT	0A0H.4
P1_5	BIT	090H.5
P0_6	BIT	080H.6
P3_4	BIT	0B0H.4
P2_5	BIT	0A0H.5
P1_6	BIT	090H.6
P0_7	BIT	080H.7
P3_5	BIT	0B0H.5
ES	BIT	0A8H.4
P2_6	BIT	0A0H.6
P1_7	BIT	090H.7
P3_6	BIT	0B0H.6
P2_7	BIT	0A0H.7
IP	DATA	0B8H
P3_7	BIT	0B0H.7
RI	BIT	098H.0
CY	BIT	0D0H.7
INT0	BIT	0B0H.2
INT1	BIT	0B0H.3
TI	BIT	098H.1
RCAP2H	DATA	0CBH
PS	BIT	0B8H.4
SP	DATA	081H
T2EX	BIT	090H.1
OV	BIT	0D0H.2
RCAP2L	DATA	0CAH
C_T2	BIT	0C8H.1
WR	BIT	0B0H.6
RCLK	BIT	0C8H.5
TCLK	BIT	0C8H.4
SBUF	DATA	099H
PCON	DATA	087H
SCON	DATA	098H
TMOD	DATA	089H
TCON	DATA	088H
IE0	BIT	088H.1
IE1	BIT	088H.3
AUXR	DATA	08EH
AUXR1	DATA	0A2H
B	DATA	0F0H
CP_RL2	BIT	0C8H.0
ACC	DATA	0E0H
SEL_OTHER	BIT	090H.5
ET0	BIT	0A8H.1
ET1	BIT	0A8H.3
TF0	BIT	088H.5
ET2	BIT	0A8H.5
TF1	BIT	088H.7
TF2	BIT	0C8H.7
RB8	BIT	098H.2
TH0	DATA	08CH
EX0	BIT	0A8H.0
IT0	BIT	088H.0
TH1	DATA	08DH
EX1	BIT	0A8H.2
TB8	BIT	098H.3
IT1	BIT	088H.2
TH2	DATA	0CDH
P	BIT	0D0H.0
SM0	BIT	098H.7
TL0	DATA	08AH
SM1	BIT	098H.6
TL1	DATA	08BH
SM2	BIT	098H.5
TL2	DATA	0CCH
PT0	BIT	0B8H.1
RS0	BIT	0D0H.3
PT1	BIT	0B8H.3
RS1	BIT	0D0H.4
PT2	BIT	0B8H.5
TR0	BIT	088H.4
TR1	BIT	088H.6
TR2	BIT	0C8H.2
PX0	BIT	0B8H.0
PX1	BIT	0B8H.2
DPH	DATA	083H
DPL	DATA	082H
EXEN2	BIT	0C8H.3
REN	BIT	098H.4
T2MOD	DATA	0C9H
T2CON	DATA	0C8H
RXD	BIT	0B0H.0
TXD	BIT	0B0H.1
F0	BIT	0D0H.5
PSW	DATA	0D0H
?PR?write_page?WRITE_PAGE                SEGMENT CODE
?DT?write_page?WRITE_PAGE                SEGMENT DATA OVERLAYABLE
	EXTRN	CODE (_write_flash_byte)
	EXTRN	IDATA (flash_high_add)
	EXTRN	DATA (mirror_377)
	EXTRN	XDATA (flash_buf)
	EXTRN	CODE (read_flash_srd)
	EXTRN	CODE (delay_50us)
;	EXTRN	IDATA (flash_low_add)
;	EXTRN	IDATA (flash_mid_add)
	EXTRN	DATA (low_word_flash)
	EXTRN	DATA (flash_address)
	EXTRN	BIT (ext_ram)
	PUBLIC	write_page

	RSEG  ?DT?write_page?WRITE_PAGE
?write_page?BYTE:
          i?040:   DS   1
       temp?042:   DS   1
address_flash?043:   DS   2
; #pragma	src
;
; //write flash page 1
; #include	"at89x52.h"
; #include	"keil\absacc.h"
; sfr		AUXR=0x8e;
; #define sel_hc377		XBYTE[0xa000]
; #define	set_extram	AUXR|=0x02
; #define	clr_extram	AUXR&=0xfd
;
; #define	uchar	unsigned char
; #define	uint		unsigned int
; extern	uchar	idata		flash_high_add;
; extern	uchar	idata		flash_mid_add;
; extern	uchar	idata		flash_low_add;
; extern	uchar 	bdata 	mirror_377;
; extern	uchar	xdata	flash_buf[128];
;
; extern	bit		ext_ram;
;
; sbit		SEL_OTHER=P1^5;
;
; extern	data	union
; 	{
; 	uint		flash_page;
; 	uchar	flash_arr[2];
; 	struct
; 		{
; 		uchar	page_MSB;
; 		uchar	page_LSB;
; 		}flash_byte;
; 	}flash_address;
;
; extern	void	write_flash_byte(uchar	write_byte);
; extern	void	delay_50us(void);
; extern	uchar	read_flash_srd(void);
; void	write_page(void)

	RSEG  ?PR?write_page?WRITE_PAGE
write_page:
	USING	0
			; SOURCE LINE # 37
; 	{
			; SOURCE LINE # 38
; 	uchar	i,k,temp;
; 	data	union
; 		{
; 		uchar	target_byte[2];
; 		uint		target_word;
; 		}address_flash;
; 	i=0;
			; SOURCE LINE # 45
	CLR  	A
	MOV  	i?040,A
; 	temp=IE;
			; SOURCE LINE # 46
	MOV  	temp?042,IE
; 	EA=0;
			; SOURCE LINE # 47
	CLR  	EA
?C0001:
; 	while(i<128)
			; SOURCE LINE # 48
	MOV  	A,i?040
	CLR  	C
	SUBB 	A,#080H
	JC   	$ + 5H
	LJMP 	?C0002
; 		{
			; SOURCE LINE # 49
; 		flash_high_add=0;
			; SOURCE LINE # 50
	CLR  	A
	MOV  	R0,#LOW (flash_high_add)
	MOV  	@R0,A
; 		flash_mid_add=0xaa;
			; SOURCE LINE # 51
;	MOV  	R0,#LOW (flash_mid_add)
;	MOV  	@R0,#0AAH
	MOV  	low_word_flash,#0AAH
; 		flash_low_add=0xaa;
			; SOURCE LINE # 52
;	MOV  	R0,#LOW (flash_low_add)
;	MOV  	@R0,#0AAH
	MOV  	low_word_flash+01H,#0AAH
; 		write_flash_byte(0xaa);
			; SOURCE LINE # 53
	MOV  	R7,#0AAH
	LCALL	_write_flash_byte
; 		flash_high_add=0;
			; SOURCE LINE # 54
	CLR  	A
	MOV  	R0,#LOW (flash_high_add)
	MOV  	@R0,A
; 		flash_mid_add=0x55;
			; SOURCE LINE # 55
;	MOV  	R0,#LOW (flash_mid_add)
;	MOV  	@R0,#055H
	MOV  	low_word_flash,#55H
; 		flash_low_add=0x54;
			; SOURCE LINE # 56
;	MOV  	R0,#LOW (flash_low_add)
;	MOV  	@R0,#054H
	MOV  	low_word_flash+01H,#54H
; 		write_flash_byte(0x55);
			; SOURCE LINE # 57
	MOV  	R7,#055H
	LCALL	_write_flash_byte
; 		flash_high_add=0;
			; SOURCE LINE # 58
	CLR  	A
	MOV  	R0,#LOW (flash_high_add)
	MOV  	@R0,A
; 		flash_mid_add=0xaa;
			; SOURCE LINE # 59
;	MOV  	R0,#LOW (flash_mid_add)
;	MOV  	@R0,#0AAH
	MOV  	low_word_flash,#0AAH
; 		flash_low_add=0xaa;
			; SOURCE LINE # 60
;	MOV  	R0,#LOW (flash_low_add)
;	MOV  	@R0,#0AAH
	MOV  	low_word_flash+01H,#0AAH
; 		write_flash_byte(0xa0);
			; SOURCE LINE # 61
	MOV  	R7,#0A0H
	LCALL	_write_flash_byte
; 		flash_high_add=flash_address.flash_byte.page_MSB/2;
			; SOURCE LINE # 62
	MOV  	A,flash_address
	CLR  	C
	RRC  	A
	MOV  	R0,#LOW (flash_high_add)
	MOV  	@R0,A
; 		flash_mid_add=(flash_address.flash_byte.page_MSB<<7)+(flash_address.flash_byte.page_LSB/2);
			; SOURCE LINE # 63
	MOV  	A,flash_address
	SWAP 	A
	RLC  	A
	RLC  	A
	RLC  	A
	ANL  	A,#080H
	MOV  	R7,A
	MOV  	A,flash_address+01H
	CLR  	C
	RRC  	A
	ADD  	A,R7
;	MOV  	R0,#LOW (flash_mid_add)
;	MOV  	@R0,A
	MOV  	low_word_flash,A
; 		flash_low_add=(flash_address.flash_byte.page_LSB<<7);
			; SOURCE LINE # 64
	MOV  	A,flash_address+01H
	SWAP 	A
	RLC  	A
	RLC  	A
	RLC  	A
	ANL  	A,#080H
;	MOV  	R0,#LOW (flash_low_add)
;	MOV  	@R0,A
	MOV  	low_word_flash+01H,A
; 		SEL_OTHER=1;
			; SOURCE LINE # 65
;	SETB 	SEL_OTHER
; 		mirror_377&=0xe0;
			; SOURCE LINE # 66
	ANL  	mirror_377,#0E0H
; 		mirror_377+=flash_high_add;
			; SOURCE LINE # 67
	MOV  	R0,#LOW (flash_high_add)
	MOV  	A,@R0
	ADD  	A,mirror_377
	MOV  	mirror_377,A
; 		sel_hc377=mirror_377;
			; SOURCE LINE # 68
	MOV  	DPTR,#0A000H
	MOVX 	@DPTR,A
; 		SEL_OTHER=0;
			; SOURCE LINE # 69
;	CLR  	SEL_OTHER
; 		address_flash.target_byte[0]=flash_mid_add;
			; SOURCE LINE # 70
;	MOV  	R0,#LOW (flash_mid_add)
;	MOV  	A,@R0
	MOV  	A,low_word_flash

	MOV  	address_flash?043,A
; 		address_flash.target_byte[1]=flash_low_add;
			; SOURCE LINE # 71
;	MOV  	R0,#LOW (flash_low_add)
;	MOV  	A,@R0
	MOV  	A,low_word_flash+01H

	MOV  	address_flash?043+01H,A
; 		ext_ram=0;
			; SOURCE LINE # 72
	CLR  	ext_ram
; 		address_flash.target_word+=i;
			; SOURCE LINE # 73
	MOV  	A,i?040
	ADD  	A,address_flash?043+01H
	MOV  	address_flash?043+01H,A
	CLR  	A
	ADDC 	A,address_flash?043
	MOV  	address_flash?043,A

	MOV  	A,#LOW (flash_buf)		;将DPTR的数值准备好,索引flash_buf
	ADD  	A,i?040
	MOV  	DPL,A
	CLR  	 A
	ADDC 	A,#HIGH (flash_buf)
	MOV  	DPH,A

	INC		AUXR1				;切换到DPTR1,索引address_flash

	MOV  	R4,address_flash?043
	MOV  	R5,address_flash?043+01H
	MOV  	DPL,R5
	MOV  	DPH,R4

	INC		AUXR1				;切换回DPTR

?C0003:
; 		while(i<128)
			; SOURCE LINE # 74
	MOV  	A,i?040
	CLR  	C
	SUBB 	A,#080H
	JNC  	?C0004
; 			{
			; SOURCE LINE # 75
; 			k=flash_buf[i];
			; SOURCE LINE # 76
	MOVX 	A,@DPTR				;取出DPTR的指向的内容
	INC		DPTR				;DPTR地址自增

	INC		AUXR1				;切换到DPTR1
;	ORL  	AUXR,#02H

	CLR  	SEL_OTHER

	MOVX  	@DPTR,A				;放到DPTR1指向的地址
	INC		DPTR				;DPTR1地址自增

	SETB	SEL_OTHER
; 			clr_extram;
			; SOURCE LINE # 83
;	ANL  	AUXR,#0FDH
	INC		AUXR1				;切换回DPTR
; 			EA=1;
; 			i++;
			; SOURCE LINE # 85
	INC  	i?040
; 			}
			; SOURCE LINE # 86
	SJMP 	?C0003
?C0004:
; 		delay_100us();
			; SOURCE LINE # 86
	MOV  	IE,temp?042
	LCALL	delay_50us
?C0005:
; 		while(read_flash_srd()!=0x80)
			; SOURCE LINE # 87
	LCALL	read_flash_srd
	MOV  	A,R7
	XRL  	A,#080H
	JNZ  	$ + 5H
	LJMP 	?C0001
; 			{
			; SOURCE LINE # 88
; 			}
			; SOURCE LINE # 89
	SJMP 	?C0005
; 		}
			; SOURCE LINE # 90
?C0002:
; 	IE=temp;
			; SOURCE LINE # 91
	MOV  	IE,temp?042
; 	}			; SOURCE LINE # 92
	RET
; END OF write_page

	END

⌨️ 快捷键说明

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