📄 write-byte.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 + -