📄 m16i2crw24c02.s
字号:
ldi R16,1
.dbline -2
L57:
.dbline 0 ; func end
ret
.dbsym r pRdDat 16 pc
.dbend
.dbfunc e I2C_Write _I2C_Write fc
; dat -> y+4
; wordAdr -> R20
; wrDAdr -> R22,R23
.even
_I2C_Write::
xcall push_gset2
mov R20,R18
movw R22,R16
.dbline -1
.dbline 276
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 277
; }
xcall _I2C_Start
tst R16
brne L64
.dbline 278
; }
clr R16
xjmp L63
L64:
.dbline 280
; }
; }
movw R16,R22
xcall _I2C_SendWrDAdr_
tst R16
brne L66
.dbline 281
; }
clr R16
xjmp L63
L66:
.dbline 283
; }
; }
mov R16,R20
xcall _I2C_SendDat
tst R16
brne L68
.dbline 284
; }
clr R16
xjmp L63
L68:
.dbline 286
; }
; }
ldd R16,y+4
xcall _I2C_SendDat
tst R16
brne L70
.dbline 287
; }
clr R16
xjmp L63
L70:
.dbline 289
; }
; }
ldi R24,148
out 0x36,R24
.dbline 291
; }
; }
ldi R16,1
.dbline -2
L63:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l dat 4 c
.dbsym r wordAdr 20 c
.dbsym r wrDAdr 22 i
.dbend
.dbfunc e I2C_Write_ _I2C_Write_ fc
; i -> R20
; num -> R22
; pWrDat -> R10,R11
; wordAdr -> R20
; wrDAdr -> R12,R13
.even
_I2C_Write_::
xcall push_gset4
mov R20,R18
movw R12,R16
ldd R10,y+8
ldd R11,y+9
ldd R22,y+10
.dbline -1
.dbline 305
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 308
; }
; }
; }
xcall _I2C_Start
tst R16
brne L73
.dbline 309
; }
clr R16
xjmp L72
L73:
.dbline 311
; }
; }
movw R16,R12
xcall _I2C_SendWrDAdr_
tst R16
brne L75
.dbline 312
; }
clr R16
xjmp L72
L75:
.dbline 314
; }
; }
mov R16,R20
xcall _I2C_SendDat
tst R16
brne L77
.dbline 315
; }
clr R16
xjmp L72
L77:
.dbline 316
; }
clr R20
xjmp L82
L79:
.dbline 317
; }
.dbline 318
; }
mov R30,R20
clr R31
add R30,R10
adc R31,R11
ldd R16,z+0
xcall _I2C_SendDat
tst R16
brne L83
.dbline 319
; }
clr R16
xjmp L72
L83:
.dbline 320
L80:
.dbline 316
inc R20
L82:
.dbline 316
cp R20,R22
brlo L79
.dbline 322
; }
; }
; }
ldi R24,148
out 0x36,R24
.dbline 324
; }
; }
ldi R16,1
.dbline -2
L72:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r num 22 c
.dbsym r pWrDat 10 pc
.dbsym r wordAdr 20 c
.dbsym r wrDAdr 12 i
.dbend
.dbfunc e I2C_Read _I2C_Read fc
; pRdDat -> y+6
; rdDAdr -> y+4
; wordAdr -> R20
; wrDAdr -> R22,R23
.even
_I2C_Read::
xcall push_gset2
mov R20,R18
movw R22,R16
.dbline -1
.dbline 339
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 340
; }
xcall _I2C_Start
tst R16
brne L86
.dbline 341
; }
clr R16
xjmp L85
L86:
.dbline 343
; }
; }
movw R16,R22
xcall _I2C_SendWrDAdr_
tst R16
brne L88
.dbline 344
; }
clr R16
xjmp L85
L88:
.dbline 346
; }
; }
mov R16,R20
xcall _I2C_SendDat
tst R16
brne L90
.dbline 347
; }
clr R16
xjmp L85
L90:
.dbline 349
; }
; }
xcall _I2C_Restart
tst R16
brne L92
.dbline 350
; }
clr R16
xjmp L85
L92:
.dbline 352
; }
; }
ldd R16,y+4
xcall _I2C_SendRdDAdr
tst R16
brne L94
.dbline 353
; }
clr R16
xjmp L85
L94:
.dbline 355
; }
; }
ldd R16,y+6
ldd R17,y+7
xcall _I2C_RcvNAckDat
tst R16
brne L96
.dbline 356
; }
clr R16
xjmp L85
L96:
.dbline 358
; }
; }
ldi R24,148
out 0x36,R24
.dbline 360
; }
; }
ldi R16,1
.dbline -2
L85:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym l pRdDat 6 pc
.dbsym l rdDAdr 4 c
.dbsym r wordAdr 20 c
.dbsym r wrDAdr 22 i
.dbend
.dbfunc e I2C_Read_ _I2C_Read_ fc
; i -> R20
; num -> R22
; pRdDat -> R10,R11
; rdDAdr -> y+8
; wordAdr -> R20
; wrDAdr -> R12,R13
.even
_I2C_Read_::
xcall push_gset4
mov R20,R18
movw R12,R16
ldd R10,y+10
ldd R11,y+11
ldd R22,y+12
.dbline -1
.dbline 376
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 379
; }
; }
; }
xcall _I2C_Start
tst R16
brne L99
.dbline 380
; }
clr R16
xjmp L98
L99:
.dbline 382
; }
; }
movw R16,R12
xcall _I2C_SendWrDAdr_
tst R16
brne L101
.dbline 383
; }
clr R16
xjmp L98
L101:
.dbline 385
; }
; }
mov R16,R20
xcall _I2C_SendDat
tst R16
brne L103
.dbline 386
; }
clr R16
xjmp L98
L103:
.dbline 388
; }
; }
xcall _I2C_Restart
tst R16
brne L105
.dbline 389
; }
clr R16
xjmp L98
L105:
.dbline 391
; }
; }
ldd R16,y+8
xcall _I2C_SendRdDAdr
tst R16
brne L107
.dbline 392
; }
clr R16
xjmp L98
L107:
.dbline 394
; }
; }
clr R20
xjmp L112
L109:
.dbline 395
; }
mov R16,R20
clr R17
add R16,R10
adc R17,R11
xcall _I2C_RcvAckDat
tst R16
brne L113
.dbline 396
; }
clr R16
xjmp L98
L113:
L110:
.dbline 394
inc R20
L112:
.dbline 394
mov R24,R22
subi R24,1
cp R20,R24
brlo L109
.dbline 398
; }
; }
mov R16,R20
clr R17
add R16,R10
adc R17,R11
xcall _I2C_RcvNAckDat
tst R16
brne L115
.dbline 399
; }
clr R16
xjmp L98
L115:
.dbline 401
; }
; }
ldi R24,148
out 0x36,R24
.dbline 403
; }
; }
ldi R16,1
.dbline -2
L98:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbsym r num 22 c
.dbsym r pRdDat 10 pc
.dbsym l rdDAdr 8 c
.dbsym r wordAdr 20 c
.dbsym r wrDAdr 12 i
.dbend
.dbfile F:\job\M16学习板\I2C读写24C02(实验十)\M16I2CRW24C02.c
.dbfunc e Uart0Init _Uart0Init fV
.even
_Uart0Init::
.dbline -1
.dbline 29
.dbline 30
clr R2
out 0xa,R2
.dbline 31
ldi R24,2
out 0xb,R24
.dbline 32
ldi R24,134
out 0x20,R24
.dbline 33
ldi R24,12
out 0x9,R24
.dbline 34
ldi R24,152
out 0xa,R24
.dbline -2
L117:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 44
jmp _UartRecvData
.area text(rom, con, rel)
.dbfile F:\job\M16学习板\I2C读写24C02(实验十)\M16I2CRW24C02.c
.dbfunc e UartRecvData _UartRecvData fV
; temp1 -> R16
.even
_UartRecvData::
st -y,R16
in R16,0x3f
st -y,R16
.dbline -1
.dbline 44
.dbline 46
in R16,0xc
.dbline -2
L118:
ld R16,y+
out 0x3f,R16
ld R16,y+
.dbline 0 ; func end
reti
.dbsym r temp1 16 c
.dbend
.dbfunc e UartTransmitData _UartTransmitData fV
; i -> R20,R21
; len -> R18,R19
; SendData -> R16,R17
.even
_UartTransmitData::
xcall push_gset1
.dbline -1
.dbline 56
.dbline 58
clr R20
clr R21
xjmp L123
X0:
.dbline 59
L124:
.dbline 60
L125:
.dbline 60
sbis 0xb,5
rjmp L124
.dbline 61
movw R30,R20
add R30,R16
adc R31,R17
ldd R2,z+0
out 0xc,R2
.dbline 62
L121:
.dbline 58
subi R20,255 ; offset = 1
sbci R21,255
L123:
.dbline 58
cp R20,R18
cpc R21,R19
brlo L125
.dbline -2
L119:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r len 18 i
.dbsym r SendData 16 pc
.dbend
.dbfunc e InitDevices _InitDevices fV
.even
_InitDevices::
.dbline -1
.dbline 71
.dbline 72
cli
.dbline 73
xcall _Uart0Init
.dbline 74
sei
.dbline -2
L127:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; temp2 -> y+5
; j -> R20,R21
; i -> R22
.even
_main::
sbiw R28,13
.dbline -1
.dbline 78
.dbline 85
ldi R20,2000
ldi R21,7
.dbline 86
xcall _InitDevices
L129:
.dbline 87
L130:
.dbline 87
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L129
tst R3
brne L129
X1:
.dbline 88
.dbline 89
ldi R22,167
L132:
.dbline 90
L133:
.dbline 90
mov R2,R22
clr R3
subi R22,1
tst R2
brne L132
.dbline 91
.dbline 92
ldi R24,8
std y+4,R24
movw R24,R28
adiw R24,5
std y+3,R25
std y+2,R24
ldi R24,161
std y+0,R24
clr R18
ldi R16,160
ldi R17,0
xcall _I2C_Read_
.dbline 93
ldi R20,2000
ldi R21,7
L135:
.dbline 94
L136:
.dbline 94
movw R2,R20
subi R20,1
sbci R21,0
tst R2
brne L135
tst R3
brne L135
X2:
.dbline 95
.dbline 96
ldi R22,167
L138:
.dbline 97
L139:
.dbline 97
mov R2,R22
clr R3
subi R22,1
tst R2
brne L138
.dbline 98
.dbline 99
ldi R18,8
ldi R19,0
movw R16,R28
subi R16,251 ; offset = 5
sbci R17,255
xcall _UartTransmitData
L141:
.dbline 100
L142:
.dbline 100
xjmp L141
X3:
.dbline -2
L128:
adiw R28,13
.dbline 0 ; func end
ret
.dbsym l temp2 5 A[8:8]c
.dbsym r j 20 i
.dbsym r i 22 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -