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

📄 write_page.s

📁 这个程序是用atmega128芯片对24c04进行读写的例子
💻 S
字号:
	.module write_page.c
	.area text(rom, con, rel)
	.dbfile E:\产品\开发板\mega128-board\实验程序\I2C读写24C04\页写\write_page.c
	.dbfile E:\产品\开发板\mega128-board\实验程序\I2C读写24C04\页写\i2c.h
	.dbfunc e i2c_init _i2c_init fV
	.even
_i2c_init::
	.dbline -1
	.dbline 5
; #include<iom128v.h>
; #define uchar unsigned char 
; #define uint unsigned int 
; #include"i2c.h"
; 
	.dbline 6
; 
	cbi 0x12,7
	.dbline 7
; //写一个字节
	ldi R24,1
	sts 112,R24
	.dbline 8
; main()
	sts 113,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e i2c_start _i2c_start fV
	.even
_i2c_start::
	.dbline -1
	.dbline 14
; {
; uchar aa[]={0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0a,0x0b,0x0c,0x0d,0x0e,0x0f,0x10};
; i2c_init();  //初始化
; i2c_wrpage(aa,0x00,16); //字节写入
; }
	.dbline 15
	ldi R24,164
	sts 116,R24
L3:
	.dbline 16
L4:
	.dbline 16
	lds R2,116
	sbrs R2,7
	rjmp L3
X0:
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e i2c_wrdata _i2c_wrdata fV
;       i2c_data -> R16
	.even
_i2c_wrdata::
	.dbline -1
	.dbline 22
	.dbline 23
	sts 115,R16
	.dbline 24
	ldi R24,132
	sts 116,R24
L7:
	.dbline 25
L8:
	.dbline 25
	lds R2,116
	sbrs R2,7
	rjmp L7
X1:
	.dbline -2
L6:
	.dbline 0 ; func end
	ret
	.dbsym r i2c_data 16 c
	.dbend
	.dbfunc e i2c_redata _i2c_redata fc
;       i2c_data -> R16
	.even
_i2c_redata::
	.dbline -1
	.dbline 31
	.dbline 33
	ldi R24,132
	sts 116,R24
L11:
	.dbline 34
L12:
	.dbline 34
	lds R2,116
	sbrs R2,7
	rjmp L11
X2:
	.dbline 35
	lds R16,115
	.dbline 36
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbsym r i2c_data 16 c
	.dbend
	.dbfunc e i2c_redataack _i2c_redataack fc
;       i2c_data -> R16
	.even
_i2c_redataack::
	.dbline -1
	.dbline 41
	.dbline 43
	ldi R24,196
	sts 116,R24
L15:
	.dbline 44
L16:
	.dbline 44
	lds R2,116
	sbrs R2,7
	rjmp L15
X3:
	.dbline 45
	lds R16,115
	.dbline 46
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbsym r i2c_data 16 c
	.dbend
	.dbfunc e i2c_stop _i2c_stop fV
	.even
_i2c_stop::
	.dbline -1
	.dbline 53
	.dbline 54
	ldi R24,148
	sts 116,R24
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e i2c_wrbyte _i2c_wrbyte fV
;        i2c_add -> R12
;       i2c_data -> R10
	.even
_i2c_wrbyte::
	st -y,R10
	st -y,R12
	mov R12,R18
	mov R10,R16
	.dbline -1
	.dbline 59
L20:
	.dbline 61
	.dbline 62
	xcall _i2c_start
	.dbline 63
	ldi R16,160
	xcall _i2c_wrdata
	.dbline 64
L21:
	.dbline 65
	lds R24,113
	andi R24,248
	cpi R24,24
	brne L20
X4:
	.dbline 67
	mov R16,R12
	xcall _i2c_wrdata
	.dbline 68
	mov R16,R10
	xcall _i2c_wrdata
	.dbline 69
	xcall _i2c_stop
	.dbline -2
L19:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym r i2c_add 12 c
	.dbsym r i2c_data 10 c
	.dbend
	.dbfunc e i2c_wrpage _i2c_wrpage fV
;              i -> R10
;        i2c_nub -> y+4
;        i2c_add -> R10
;       i2c_data -> R12,R13
	.even
_i2c_wrpage::
	xcall push_xgset003C
	mov R10,R18
	movw R12,R16
	.dbline -1
	.dbline 77
L24:
	.dbline 80
	.dbline 81
	xcall _i2c_start
	.dbline 82
	ldi R16,160
	xcall _i2c_wrdata
	.dbline 83
L25:
	.dbline 84
	lds R24,113
	andi R24,248
	cpi R24,24
	brne L24
X5:
	.dbline 86
	mov R16,R10
	xcall _i2c_wrdata
	.dbline 87
	clr R10
	xjmp L30
L27:
	.dbline 88
	.dbline 89
	movw R30,R12
	ld R16,Z+
	movw R12,R30
	xcall _i2c_wrdata
	.dbline 90
L28:
	.dbline 87
	inc R10
L30:
	.dbline 87
	ldd R0,y+4
	cp R10,R0
	brlo L27
X6:
	.dbline 91
	xcall _i2c_stop
	.dbline -2
L23:
	.dbline 0 ; func end
	xjmp pop_xgset003C
	.dbsym r i 10 c
	.dbsym l i2c_nub 4 c
	.dbsym r i2c_add 10 c
	.dbsym r i2c_data 12 pc
	.dbend
	.dbfunc e i2c_rebyte _i2c_rebyte fc
;       i2c_data -> R10
;        i2c_add -> R10
	.even
_i2c_rebyte::
	st -y,R10
	mov R10,R16
	.dbline -1
	.dbline 96
L32:
	.dbline 99
	.dbline 100
	xcall _i2c_start
	.dbline 101
	ldi R16,160
	xcall _i2c_wrdata
	.dbline 102
L33:
	.dbline 103
	lds R24,113
	andi R24,248
	cpi R24,24
	brne L32
X7:
	.dbline 105
	mov R16,R10
	xcall _i2c_wrdata
	.dbline 106
	xcall _i2c_start
	.dbline 107
	ldi R16,161
	xcall _i2c_wrdata
	.dbline 108
	xcall _i2c_redata
	mov R10,R16
	.dbline 109
	xcall _i2c_stop
	.dbline 110
	mov R16,R10
	.dbline -2
L31:
	.dbline 0 ; func end
	ld R10,y+
	ret
	.dbsym r i2c_data 10 c
	.dbsym r i2c_add 10 c
	.dbend
	.dbfunc e i2c_rese _i2c_rese fV
;              i -> R10
;        i2c_nub -> y+4
;        i2c_add -> R10
;       i2c_data -> R20,R21
	.even
_i2c_rese::
	xcall push_xgset300C
	mov R10,R18
	movw R20,R16
	.dbline -1
	.dbline 119
L36:
	.dbline 122
	.dbline 123
	xcall _i2c_start
	.dbline 124
	ldi R16,160
	xcall _i2c_wrdata
	.dbline 125
L37:
	.dbline 126
	lds R24,113
	andi R24,248
	cpi R24,24
	brne L36
X8:
	.dbline 128
	mov R16,R10
	xcall _i2c_wrdata
	.dbline 129
	xcall _i2c_start
	.dbline 130
	ldi R16,161
	xcall _i2c_wrdata
	.dbline 131
	clr R10
	xjmp L42
L39:
	.dbline 132
	.dbline 133
	xcall _i2c_redataack
	movw R30,R20
	std z+0,R16
	.dbline 134
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 135
L40:
	.dbline 131
	inc R10
L42:
	.dbline 131
	ldd R24,y+4
	subi R24,1
	cp R10,R24
	brlo L39
X9:
	.dbline 136
	xcall _i2c_redata
	movw R30,R20
	std z+0,R16
	.dbline 137
	xcall _i2c_stop
	.dbline -2
L35:
	.dbline 0 ; func end
	xjmp pop_xgset300C
	.dbsym r i 10 c
	.dbsym l i2c_nub 4 c
	.dbsym r i2c_add 10 c
	.dbsym r i2c_data 20 pc
	.dbend
	.area lit(rom, con, rel)
L44:
	.byte 1,2
	.byte 3,4
	.byte 5,6
	.byte 7,8
	.byte 9,10
	.byte 11,12
	.byte 13,14
	.byte 15,16
	.area text(rom, con, rel)
	.dbfile E:\产品\开发板\mega128-board\实验程序\I2C读写24C04\页写\i2c.h
	.dbfile E:\产品\开发板\mega128-board\实验程序\I2C读写24C04\页写\write_page.c
	.dbfunc e main _main fI
;             aa -> y+1
	.even
_main::
	sbiw R28,17
	.dbline -1
	.dbline 9
	.dbline 10
	ldi R24,<L44
	ldi R25,>L44
	movw R30,R28
	adiw R30,1
	ldi R16,16
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	xcall asgncblkx
	.dbline 11
	xcall _i2c_init
	.dbline 12
	ldi R24,16
	std y+0,R24
	clr R18
	movw R16,R28
	subi R16,255  ; offset = 1
	sbci R17,255
	xcall _i2c_wrpage
	.dbline -2
L43:
	.dbline 0 ; func end
	adiw R28,17
	ret
	.dbsym l aa 1 A[16:16]c
	.dbend

⌨️ 快捷键说明

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