📄 read-byte.lis
字号:
.module read-byte.c
.area text(rom, con, rel)
0000 .dbfile D:\16实验程序\I2C读写24C04\读一个字节\read-byte.c
0000 .dbfile D:\16实验程序\I2C读写24C04\读一个字节\i2c.h
0000 .dbfunc e i2c_init _i2c_init fV
.even
0000 _i2c_init::
0000 .dbline -1
0000 .dbline 5
0000 ; //读24c04的一个字节程序
0000 ; #include<iom16v.h>
0000 ; #define uchar unsigned char
0000 ; #define uint unsigned int
0000 ; #include"i2c.h"
0000 .dbline 6
0000 ;
0000 9798 cbi 0x12,7
0002 .dbline 7
0002 ; //读一个字节
0002 81E0 ldi R24,1
0004 80B9 out 0x0,R24
0006 .dbline 8
0006 ; main()
0006 81B9 out 0x1,R24
0008 .dbline -2
0008 L1:
0008 .dbline 0 ; func end
0008 0895 ret
000A .dbend
000A .dbfunc e i2c_start _i2c_start fV
.even
000A _i2c_start::
000A .dbline -1
000A .dbline 14
000A ; {
000A ; DDRD=0xff;
000A ; PORTD=0xff;
000A ; i2c_init(); //初始化
000A ; PORTD=~i2c_rebyte(0x12); //读出地址0x12的字节
000A ; }
000A .dbline 15
000A 84EA ldi R24,164
000C 86BF out 0x36,R24
000E L3:
000E .dbline 16
000E L4:
000E .dbline 16
000E 26B6 in R2,0x36
0010 27FE sbrs R2,7
0012 FDCF rjmp L3
0014 X0:
0014 .dbline -2
0014 L2:
0014 .dbline 0 ; func end
0014 0895 ret
0016 .dbend
0016 .dbfunc e i2c_wrdata _i2c_wrdata fV
0016 ; i2c_data -> R16
.even
0016 _i2c_wrdata::
0016 .dbline -1
0016 .dbline 22
0016 .dbline 23
0016 03B9 out 0x3,R16
0018 .dbline 24
0018 84E8 ldi R24,132
001A 86BF out 0x36,R24
001C L7:
001C .dbline 25
001C L8:
001C .dbline 25
001C 26B6 in R2,0x36
001E 27FE sbrs R2,7
0020 FDCF rjmp L7
0022 X1:
0022 .dbline -2
0022 L6:
0022 .dbline 0 ; func end
0022 0895 ret
0024 .dbsym r i2c_data 16 c
0024 .dbend
0024 .dbfunc e i2c_redata _i2c_redata fc
0024 ; i2c_data -> R16
.even
0024 _i2c_redata::
0024 .dbline -1
0024 .dbline 31
0024 .dbline 33
0024 84E8 ldi R24,132
0026 86BF out 0x36,R24
0028 L11:
0028 .dbline 34
0028 L12:
0028 .dbline 34
0028 26B6 in R2,0x36
002A 27FE sbrs R2,7
002C FDCF rjmp L11
002E X2:
002E .dbline 35
002E 03B1 in R16,0x3
0030 .dbline 36
0030 .dbline -2
0030 L10:
0030 .dbline 0 ; func end
0030 0895 ret
0032 .dbsym r i2c_data 16 c
0032 .dbend
0032 .dbfunc e i2c_redataack _i2c_redataack fc
0032 ; i2c_data -> R16
.even
0032 _i2c_redataack::
0032 .dbline -1
0032 .dbline 41
0032 .dbline 43
0032 84EC ldi R24,196
0034 86BF out 0x36,R24
0036 L15:
0036 .dbline 44
0036 L16:
0036 .dbline 44
0036 26B6 in R2,0x36
0038 27FE sbrs R2,7
003A FDCF rjmp L15
003C X3:
003C .dbline 45
003C 03B1 in R16,0x3
003E .dbline 46
003E .dbline -2
003E L14:
003E .dbline 0 ; func end
003E 0895 ret
0040 .dbsym r i2c_data 16 c
0040 .dbend
0040 .dbfunc e i2c_stop _i2c_stop fV
.even
0040 _i2c_stop::
0040 .dbline -1
0040 .dbline 53
0040 .dbline 54
0040 84E9 ldi R24,148
0042 86BF out 0x36,R24
0044 .dbline -2
0044 L18:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
0046 .dbfunc e i2c_wrbyte _i2c_wrbyte fV
0046 ; i2c_add -> R12
0046 ; i2c_data -> R10
.even
0046 _i2c_wrbyte::
0046 AA92 st -y,R10
0048 CA92 st -y,R12
004A C22E mov R12,R18
004C A02E mov R10,R16
004E .dbline -1
004E .dbline 59
004E L20:
004E .dbline 61
004E .dbline 62
004E DDDF xcall _i2c_start
0050 .dbline 63
0050 00EA ldi R16,160
0052 E1DF xcall _i2c_wrdata
0054 .dbline 64
0054 L21:
0054 .dbline 65
0054 81B1 in R24,0x1
0056 887F andi R24,248
0058 8831 cpi R24,24
005A C9F7 brne L20
005C X4:
005C .dbline 67
005C 0C2D mov R16,R12
005E DBDF xcall _i2c_wrdata
0060 .dbline 68
0060 0A2D mov R16,R10
0062 D9DF xcall _i2c_wrdata
0064 .dbline 69
0064 EDDF xcall _i2c_stop
0066 .dbline -2
0066 L19:
0066 .dbline 0 ; func end
0066 C990 ld R12,y+
0068 A990 ld R10,y+
006A 0895 ret
006C .dbsym r i2c_add 12 c
006C .dbsym r i2c_data 10 c
006C .dbend
006C .dbfunc e i2c_wrpage _i2c_wrpage fV
006C ; i -> R10
006C ; i2c_nub -> y+4
006C ; i2c_add -> R10
006C ; i2c_data -> R12,R13
.even
006C _i2c_wrpage::
006C 0E940000 xcall push_xgset003C
0070 A22E mov R10,R18
0072 6801 movw R12,R16
0074 .dbline -1
0074 .dbline 77
0074 L24:
0074 .dbline 80
0074 .dbline 81
0074 CADF xcall _i2c_start
0076 .dbline 82
0076 00EA ldi R16,160
0078 CEDF xcall _i2c_wrdata
007A .dbline 83
007A L25:
007A .dbline 84
007A 81B1 in R24,0x1
007C 887F andi R24,248
007E 8831 cpi R24,24
0080 C9F7 brne L24
0082 X5:
0082 .dbline 86
0082 0A2D mov R16,R10
0084 C8DF xcall _i2c_wrdata
0086 .dbline 87
0086 AA24 clr R10
0088 05C0 xjmp L30
008A L27:
008A .dbline 88
008A .dbline 89
008A F601 movw R30,R12
008C 0191 ld R16,Z+
008E 6F01 movw R12,R30
0090 C2DF xcall _i2c_wrdata
0092 .dbline 90
0092 L28:
0092 .dbline 87
0092 A394 inc R10
0094 L30:
0094 .dbline 87
0094 0C80 ldd R0,y+4
0096 A014 cp R10,R0
0098 C0F3 brlo L27
009A X6:
009A .dbline 91
009A D2DF xcall _i2c_stop
009C .dbline -2
009C L23:
009C .dbline 0 ; func end
009C 0C940000 xjmp pop_xgset003C
00A0 .dbsym r i 10 c
00A0 .dbsym l i2c_nub 4 c
00A0 .dbsym r i2c_add 10 c
00A0 .dbsym r i2c_data 12 pc
00A0 .dbend
00A0 .dbfunc e i2c_rebyte _i2c_rebyte fc
00A0 ; i2c_data -> R10
00A0 ; i2c_add -> R10
.even
00A0 _i2c_rebyte::
00A0 AA92 st -y,R10
00A2 A02E mov R10,R16
00A4 .dbline -1
00A4 .dbline 96
00A4 L32:
00A4 .dbline 99
00A4 .dbline 100
00A4 B2DF xcall _i2c_start
00A6 .dbline 101
00A6 00EA ldi R16,160
00A8 B6DF xcall _i2c_wrdata
00AA .dbline 102
00AA L33:
00AA .dbline 103
00AA 81B1 in R24,0x1
00AC 887F andi R24,248
00AE 8831 cpi R24,24
00B0 C9F7 brne L32
00B2 X7:
00B2 .dbline 105
00B2 0A2D mov R16,R10
00B4 B0DF xcall _i2c_wrdata
00B6 .dbline 106
00B6 A9DF xcall _i2c_start
00B8 .dbline 107
00B8 01EA ldi R16,161
00BA ADDF xcall _i2c_wrdata
00BC .dbline 108
00BC B3DF xcall _i2c_redata
00BE A02E mov R10,R16
00C0 .dbline 109
00C0 BFDF xcall _i2c_stop
00C2 .dbline 110
00C2 0A2D mov R16,R10
00C4 .dbline -2
00C4 L31:
00C4 .dbline 0 ; func end
00C4 A990 ld R10,y+
00C6 0895 ret
00C8 .dbsym r i2c_data 10 c
00C8 .dbsym r i2c_add 10 c
00C8 .dbend
00C8 .dbfunc e i2c_rese _i2c_rese fV
00C8 ; i -> R10
00C8 ; i2c_nub -> y+4
00C8 ; i2c_add -> R10
00C8 ; i2c_data -> R20,R21
.even
00C8 _i2c_rese::
00C8 0E940000 xcall push_xgset300C
00CC A22E mov R10,R18
00CE A801 movw R20,R16
00D0 .dbline -1
00D0 .dbline 119
00D0 L36:
00D0 .dbline 122
00D0 .dbline 123
00D0 9CDF xcall _i2c_start
00D2 .dbline 124
00D2 00EA ldi R16,160
00D4 A0DF xcall _i2c_wrdata
00D6 .dbline 125
00D6 L37:
00D6 .dbline 126
00D6 81B1 in R24,0x1
00D8 887F andi R24,248
00DA 8831 cpi R24,24
00DC C9F7 brne L36
00DE X8:
00DE .dbline 128
00DE 0A2D mov R16,R10
00E0 9ADF xcall _i2c_wrdata
00E2 .dbline 129
00E2 93DF xcall _i2c_start
00E4 .dbline 130
00E4 01EA ldi R16,161
00E6 97DF xcall _i2c_wrdata
00E8 .dbline 131
00E8 AA24 clr R10
00EA 06C0 xjmp L42
00EC L39:
00EC .dbline 132
00EC .dbline 133
00EC A2DF xcall _i2c_redataack
00EE FA01 movw R30,R20
00F0 0083 std z+0,R16
00F2 .dbline 134
00F2 4F5F subi R20,255 ; offset = 1
00F4 5F4F sbci R21,255
00F6 .dbline 135
00F6 L40:
00F6 .dbline 131
00F6 A394 inc R10
00F8 L42:
00F8 .dbline 131
00F8 8C81 ldd R24,y+4
00FA 8150 subi R24,1
00FC A816 cp R10,R24
00FE B0F3 brlo L39
0100 X9:
0100 .dbline 136
0100 91DF xcall _i2c_redata
0102 FA01 movw R30,R20
0104 0083 std z+0,R16
0106 .dbline 137
0106 9CDF xcall _i2c_stop
0108 .dbline -2
0108 L35:
0108 .dbline 0 ; func end
0108 0C940000 xjmp pop_xgset300C
010C .dbsym r i 10 c
010C .dbsym l i2c_nub 4 c
010C .dbsym r i2c_add 10 c
010C .dbsym r i2c_data 20 pc
010C .dbend
010C .dbfile D:\16实验程序\I2C读写24C04\读一个字节\read-byte.c
010C .dbfunc e main _main fI
.even
010C _main::
010C .dbline -1
010C .dbline 9
010C .dbline 10
010C 8FEF ldi R24,255
010E 81BB out 0x11,R24
0110 .dbline 11
0110 82BB out 0x12,R24
0112 .dbline 12
0112 76DF xcall _i2c_init
0114 .dbline 13
0114 02E1 ldi R16,18
0116 C4DF xcall _i2c_rebyte
0118 202E mov R2,R16
011A 2094 com R2
011C 22BA out 0x12,R2
011E .dbline -2
011E L43:
011E .dbline 0 ; func end
011E 0895 ret
0120 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -