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

📄 write-byte.s

📁 这个程序是用atmega128芯片对24c04进行读写的例子
💻 S
字号:
	.module write-byte.c
	.area text(rom, con, rel)
	.dbfile E:\产品\开发板\mega128-board\实验程序\I2C读写24C04\write-byte.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
; void s_ms(unsigned int t)
	cbi 0x12,7
	.dbline 7
; {
	ldi R24,1
	sts 112,R24
	.dbline 8
;     for(;t>1;t--)
	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
;     {
;     }
; }
; 
; //写一个字节
; main()
	.dbline 15
; {
	ldi R24,164
	sts 116,R24
L3:
	.dbline 16
; i2c_init();  //初始化
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
; i2c_wrbyte(0x03,0x0012);  //字节写入
; }
	.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
;           addh -> R14
;           addl -> R10
;              i -> R10
;        i2c_nub -> y+6
;        i2c_add -> R14,R15
;       i2c_data -> R12,R13
	.even
_i2c_wrpage::
	xcall push_xgset00FC
	movw R14,R18
	movw R12,R16
	.dbline -1
	.dbline 77
	.dbline 79
	mov R10,R14
	.dbline 80
	mov R14,R15
	clr R15
L24:
	.dbline 82
	.dbline 83
	xcall _i2c_start
	.dbline 84
	ldi R16,160
	xcall _i2c_wrdata
	.dbline 85
L25:
	.dbline 86
	lds R24,113
	andi R24,248
	cpi R24,24
	brne L24
X5:
	.dbline 88
	mov R16,R14
	xcall _i2c_wrdata
	.dbline 89
	mov R16,R10
	xcall _i2c_wrdata
	.dbline 90
	clr R10
	xjmp L30
L27:
	.dbline 91
	.dbline 92
	mov R30,R10
	clr R31
	add R30,R12
	adc R31,R13
	ldd R16,z+0
	xcall _i2c_wrdata
	.dbline 93
L28:
	.dbline 90
	inc R10
L30:
	.dbline 90
	ldd R0,y+6
	cp R10,R0
	brlo L27
X6:
	.dbline 94
	xcall _i2c_stop
	.dbline -2
L23:
	.dbline 0 ; func end
	xjmp pop_xgset00FC
	.dbsym r addh 14 c
	.dbsym r addl 10 c
	.dbsym r i 10 c
	.dbsym l i2c_nub 6 c
	.dbsym r i2c_add 14 i
	.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 99
L32:
	.dbline 102
	.dbline 103
	xcall _i2c_start
	.dbline 104
	ldi R16,160
	xcall _i2c_wrdata
	.dbline 105
L33:
	.dbline 106
	lds R24,113
	andi R24,248
	cpi R24,24
	brne L32
X7:
	.dbline 108
	mov R16,R10
	xcall _i2c_wrdata
	.dbline 109
	xcall _i2c_start
	.dbline 110
	ldi R16,161
	xcall _i2c_wrdata
	.dbline 111
	xcall _i2c_redata
	mov R10,R16
	.dbline 112
	xcall _i2c_stop
	.dbline 113
	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
;           addh -> R20
;           addl -> R14
;              i -> R14
;        i2c_nub -> R12
;        i2c_add -> R20,R21
;             aa -> R10,R11
	.even
_i2c_rese::
	xcall push_xgset30FC
	movw R20,R18
	movw R10,R16
	ldd R12,y+8
	.dbline -1
	.dbline 122
	.dbline 124
	mov R14,R20
	.dbline 125
	mov R20,R21
	clr R21
	.dbline 126
	dec R12
L36:
	.dbline 128
	.dbline 129
	xcall _i2c_start
	.dbline 130
	ldi R16,160
	xcall _i2c_wrdata
	.dbline 131
L37:
	.dbline 132
	lds R24,113
	andi R24,248
	cpi R24,24
	brne L36
X8:
	.dbline 134
	mov R16,R20
	xcall _i2c_wrdata
	.dbline 135
	mov R16,R14
	xcall _i2c_wrdata
	.dbline 136
	xcall _i2c_start
	.dbline 137
	ldi R16,161
	xcall _i2c_wrdata
	.dbline 138
	clr R14
	xjmp L42
L39:
	.dbline 139
	.dbline 140
	xcall _i2c_redataack
	mov R30,R14
	clr R31
	add R30,R10
	adc R31,R11
	std z+0,R16
	.dbline 141
L40:
	.dbline 138
	inc R14
L42:
	.dbline 138
	cp R14,R12
	brlo L39
X9:
	.dbline 142
	xcall _i2c_redata
	mov R30,R12
	clr R31
	add R30,R10
	adc R31,R11
	std z+0,R16
	.dbline 144
	xcall _i2c_stop
	.dbline -2
L35:
	.dbline 0 ; func end
	xjmp pop_xgset30FC
	.dbsym r addh 20 c
	.dbsym r addl 14 c
	.dbsym r i 14 c
	.dbsym r i2c_nub 12 c
	.dbsym r i2c_add 20 i
	.dbsym r aa 10 pc
	.dbend
	.dbfile E:\产品\开发板\mega128-board\实验程序\I2C读写24C04\write-byte.c
	.dbfunc e s_ms _s_ms fV
;              t -> R16,R17
	.even
_s_ms::
	.dbline -1
	.dbline 7
	.dbline 8
	xjmp L47
L44:
	.dbline 9
	.dbline 10
L45:
	.dbline 8
	subi R16,1
	sbci R17,0
L47:
	.dbline 8
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlo L44
X10:
	.dbline -2
L43:
	.dbline 0 ; func end
	ret
	.dbsym r t 16 i
	.dbend
	.dbfunc e main _main fI
	.even
_main::
	.dbline -1
	.dbline 15
	.dbline 16
	xcall _i2c_init
	.dbline 17
	ldi R18,18
	ldi R16,3
	xcall _i2c_wrbyte
	.dbline -2
L48:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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