📄 main.s
字号:
.module main.c
.area text(rom, con, rel)
.dbfile D:\AVR\我的程序\AT24C02的I2C实验/cfg.h
.dbfunc e delay_ms _delay_ms fV
; i -> R20,R21
; time -> R16,R17
.even
_delay_ms::
xcall push_gset1
.dbline -1
.dbline 39
; /***********************************
; *实验目的:熟悉AT24C02编程
; *设 计:萧联珠
; *日 期:2007-11-22
; ************************************/
; #include <iom16v.h>
; #include "cfg.h"
;
; void main()
; {
; unsigned char i;
; uart_init(); /*串口初始化*/
; for(i=0;i<10;i++)
; I2C_Write(i,0x80+i);
; delay_ms(1000);
; while(1)
; {
; for(i=0;i<10;i++)
; {
; while(!(UCSRA&(1<<UDRE))); /*等待接受准备好*/
; delay_ms(10);
; UDR=I2C_Read(0x80+i);
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 41
; }
; }
xjmp L5
L2:
.dbline 42
clr R20
clr R21
L6:
.dbline 42
L7:
.dbline 42
subi R20,255 ; offset = 1
sbci R21,255
.dbline 42
cpi R20,232
ldi R30,3
cpc R21,R30
brlt L6
L3:
.dbline 41
subi R16,1
sbci R17,0
L5:
.dbline 41
clr R2
clr R3
cp R2,R16
cpc R3,R17
brlt L2
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r i 20 I
.dbsym r time 16 I
.dbend
.dbfunc e uart_init _uart_init fV
.even
_uart_init::
.dbline -1
.dbline 47
; }
; }
; }
; }
; }
; }
.dbline 48
; }
ldi R24,2
out 0xb,R24
.dbline 49
; }
ldi R24,24
out 0xa,R24
.dbline 50
; }
ldi R24,6
out 0x20,R24
.dbline 51
; }
clr R2
out 0x20,R2
.dbline 52
; }
ldi R24,12
out 0x9,R24
.dbline -2
L10:
.dbline 0 ; func end
ret
.dbend
.dbfunc e I2C_Write _I2C_Write fc
; RegAddress -> R22
; Wdata -> R20
.even
_I2C_Write::
xcall push_gset2
mov R22,R18
mov R20,R16
.dbline -1
.dbline 61
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 62
; }
ldi R24,164
out 0x36,R24
.dbline 63
L12:
.dbline 63
L13:
.dbline 63
; }
in R2,0x36
sbrs R2,7
rjmp L12
.dbline 63
.dbline 63
.dbline 64
; }
in R24,0x1
andi R24,248
cpi R24,8
breq L15
.dbline 65
; }
ldi R16,1
xjmp L11
L15:
.dbline 67
; }
; }
.dbline 67
ldi R24,160
out 0x3,R24
.dbline 67
ldi R24,132
out 0x36,R24
.dbline 67
.dbline 67
.dbline 68
L17:
.dbline 68
L18:
.dbline 68
; }
in R2,0x36
sbrs R2,7
rjmp L17
.dbline 68
.dbline 68
.dbline 69
; }
in R24,0x1
andi R24,248
cpi R24,24
breq L20
.dbline 70
; }
ldi R16,1
xjmp L11
L20:
.dbline 72
; }
; }
.dbline 72
out 0x3,R22
.dbline 72
ldi R24,132
out 0x36,R24
.dbline 72
.dbline 72
.dbline 73
L22:
.dbline 73
L23:
.dbline 73
; }
in R2,0x36
sbrs R2,7
rjmp L22
.dbline 73
.dbline 73
.dbline 74
; }
in R24,0x1
andi R24,248
cpi R24,40
breq L25
.dbline 75
; }
ldi R16,1
xjmp L11
L25:
.dbline 77
; }
; }
.dbline 77
out 0x3,R20
.dbline 77
ldi R24,132
out 0x36,R24
.dbline 77
.dbline 77
.dbline 78
L27:
.dbline 78
L28:
.dbline 78
; }
in R2,0x36
sbrs R2,7
rjmp L27
.dbline 78
.dbline 78
.dbline 79
; }
in R24,0x1
andi R24,248
cpi R24,40
breq L30
.dbline 80
; }
ldi R16,1
xjmp L11
L30:
.dbline 82
; }
; }
ldi R24,148
out 0x36,R24
.dbline 83
; }
ldi R16,100
ldi R17,0
xcall _delay_ms
.dbline 84
; }
clr R16
.dbline -2
L11:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r RegAddress 22 c
.dbsym r Wdata 20 c
.dbend
.dbfunc e I2C_Read _I2C_Read fc
; temp -> R20
; RegAddress -> R16,R17
.even
_I2C_Read::
xcall push_gset1
.dbline -1
.dbline 93
; }
; }
; }
; }
; }
; }
; }
; }
; }
.dbline 95
; }
; }
ldi R24,164
out 0x36,R24
.dbline 96
L33:
.dbline 96
L34:
.dbline 96
; }
in R2,0x36
sbrs R2,7
rjmp L33
.dbline 96
.dbline 96
.dbline 97
; }
in R24,0x1
andi R24,248
cpi R24,8
breq L36
.dbline 98
; }
ldi R16,1
xjmp L32
L36:
.dbline 100
; }
; }
.dbline 100
ldi R24,160
out 0x3,R24
.dbline 100
ldi R24,132
out 0x36,R24
.dbline 100
.dbline 100
.dbline 101
L38:
.dbline 101
L39:
.dbline 101
; }
in R2,0x36
sbrs R2,7
rjmp L38
.dbline 101
.dbline 101
.dbline 102
; }
in R24,0x1
andi R24,248
cpi R24,24
breq L41
.dbline 103
; }
ldi R16,1
xjmp L32
L41:
.dbline 105
; }
; }
.dbline 105
out 0x3,R16
.dbline 105
ldi R24,132
out 0x36,R24
.dbline 105
.dbline 105
.dbline 106
L43:
.dbline 106
L44:
.dbline 106
; }
in R2,0x36
sbrs R2,7
rjmp L43
.dbline 106
.dbline 106
.dbline 107
; }
in R24,0x1
andi R24,248
cpi R24,40
breq L46
.dbline 108
; }
ldi R16,1
xjmp L32
L46:
.dbline 110
; }
; }
ldi R24,164
out 0x36,R24
.dbline 111
L48:
.dbline 111
L49:
.dbline 111
; }
in R2,0x36
sbrs R2,7
rjmp L48
.dbline 111
.dbline 111
.dbline 112
; }
in R24,0x1
andi R24,248
cpi R24,16
breq L51
.dbline 113
; }
ldi R16,1
xjmp L32
L51:
.dbline 115
; }
; }
.dbline 115
ldi R24,161
out 0x3,R24
.dbline 115
ldi R24,132
out 0x36,R24
.dbline 115
.dbline 115
.dbline 116
L53:
.dbline 116
L54:
.dbline 116
; }
in R2,0x36
sbrs R2,7
rjmp L53
.dbline 116
.dbline 116
.dbline 117
; }
in R24,0x1
andi R24,248
cpi R24,64
breq L56
.dbline 118
; }
ldi R16,1
xjmp L32
L56:
.dbline 120
; }
; }
ldi R24,132
out 0x36,R24
.dbline 121
L58:
.dbline 121
L59:
.dbline 121
; }
in R2,0x36
sbrs R2,7
rjmp L58
.dbline 121
.dbline 121
.dbline 122
; }
in R24,0x1
andi R24,248
cpi R24,88
breq L61
.dbline 123
; }
ldi R16,1
xjmp L32
L61:
.dbline 125
; }
; }
in R20,0x3
.dbline 126
; }
ldi R24,148
out 0x36,R24
.dbline 127
; }
mov R16,R20
.dbline -2
L32:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r temp 20 c
.dbsym r RegAddress 16 i
.dbend
.dbfile D:\AVR\我的程序\AT24C02的I2C实验\main.c
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 10
.dbline 12
xcall _uart_init
.dbline 13
clr R20
xjmp L67
L64:
.dbline 14
mov R18,R20
subi R18,128 ; addi 128
mov R16,R20
xcall _I2C_Write
L65:
.dbline 13
inc R20
L67:
.dbline 13
cpi R20,10
brlo L64
.dbline 15
ldi R16,1000
ldi R17,3
xcall _delay_ms
xjmp L69
L68:
.dbline 17
.dbline 18
clr R20
xjmp L74
X0:
.dbline 19
L75:
.dbline 20
L76:
.dbline 20
sbis 0xb,5
rjmp L75
.dbline 21
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 22
mov R16,R20
clr R17
subi R16,128 ; offset = 128
sbci R17,255
xcall _I2C_Read
out 0xc,R16
.dbline 23
L72:
.dbline 18
inc R20
L74:
.dbline 18
cpi R20,10
brlo L76
.dbline 24
L69:
.dbline 16
xjmp L68
X1:
.dbline -2
L63:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -