📄 twi.lis
字号:
.module TWI.C
.area data(ram, con, rel)
0000 _table::
0000 .blkb 2
.area idata
0000 0102 .byte 1,2
.area data(ram, con, rel)
0002 .blkb 2
.area idata
0002 0408 .byte 4,8
.area data(ram, con, rel)
0004 .blkb 2
.area idata
0004 1020 .byte 16,32
.area data(ram, con, rel)
0006 .blkb 2
.area idata
0006 4080 .byte 64,128
.area data(ram, con, rel)
0008 .dbfile E:\PQ-1A\我的AVR\zlg7290\TWI.C
0008 .dbsym e table _table A[8:8]c
0008 _table1::
0008 .blkb 2
.area idata
0008 0000 .byte 0,0
.area data(ram, con, rel)
000A .dbfile E:\PQ-1A\我的AVR\zlg7290\TWI.C
000A .blkb 2
.area idata
000A 0000 .byte 0,0
.area data(ram, con, rel)
000C .dbfile E:\PQ-1A\我的AVR\zlg7290\TWI.C
000C .blkb 2
.area idata
000C 0000 .byte 0,0
.area data(ram, con, rel)
000E .dbfile E:\PQ-1A\我的AVR\zlg7290\TWI.C
000E .blkb 2
.area idata
000E 0000 .byte 0,0
.area data(ram, con, rel)
0010 .dbfile E:\PQ-1A\我的AVR\zlg7290\TWI.C
0010 .dbsym e table1 _table1 A[8:8]c
.area text(rom, con, rel)
0000 .dbfile E:\PQ-1A\我的AVR\zlg7290\TWI.C
0000 .dbfunc e delay _delay fV
0000 ; x -> R20,R21
0000 ; y -> R22,R23
0000 ; z -> R16,R17
.even
0000 _delay::
0000 0E940000 xcall push_gset2
0004 .dbline -1
0004 .dbline 15
0004 ; #include <iom128v.h>
0004 ; #include <iom128.h>
0004 ; #include <macros.h>
0004 ; #include "TWI.h"
0004 ;
0004 ; #define uchar unsigned char
0004 ; #define uint unsigned int
0004 ; #define Page_size 8
0004 ; #define Page_mask Page_size-1
0004 ; //#pragma data:code
0004 ; //const
0004 ; char table[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
0004 ; char table1[8]={0,0,0,0,0,0,0,0};
0004 ; void delay(uint z)
0004 ; {
0004 .dbline 17
0004 ; uint x,y;
0004 ; for(x=z;x>0;x--)
0004 A801 movw R20,R16
0006 0AC0 xjmp L5
0008 L2:
0008 .dbline 18
0008 6CE4 ldi R22,1100
000A 74E0 ldi R23,4
000C 02C0 xjmp L9
000E L6:
000E .dbline 18
000E L7:
000E .dbline 18
000E 6150 subi R22,1
0010 7040 sbci R23,0
0012 L9:
0012 .dbline 18
0012 6030 cpi R22,0
0014 6707 cpc R22,R23
0016 D9F7 brne L6
0018 X0:
0018 L3:
0018 .dbline 17
0018 4150 subi R20,1
001A 5040 sbci R21,0
001C L5:
001C .dbline 17
001C 4030 cpi R20,0
001E 4507 cpc R20,R21
0020 99F7 brne L2
0022 X1:
0022 .dbline -2
0022 .dbline 19
0022 ; for(y=1100;y>0;y--);
0022 ; }
0022 L1:
0022 0E940000 xcall pop_gset2
0026 .dbline 0 ; func end
0026 0895 ret
0028 .dbsym r x 20 i
0028 .dbsym r y 22 i
0028 .dbsym r z 16 i
0028 .dbend
0028 .dbfunc e TWI_init _TWI_init fV
.even
0028 _TWI_init::
0028 .dbline -1
0028 .dbline 28
0028 ;
0028 ;
0028 ; /*
0028 ; 函数:TWI_init()
0028 ; 功能:I2C总线初始化,使总线处于空闲状态
0028 ; 说明:在main()函数的开始处,通常应当要执行一次本函数
0028 ; */
0028 ; void TWI_init()
0028 ; {
0028 .dbline 29
0028 ; TWBR=0X22;
0028 82E2 ldi R24,34
002A 80937000 sts 112,R24
002E .dbline 30
002E ; TWSR=0;
002E 2224 clr R2
0030 20927100 sts 113,R2
0034 .dbline 31
0034 ; TWCR=0X44;
0034 84E4 ldi R24,68
0036 80937400 sts 116,R24
003A .dbline -2
003A .dbline 32
003A ; }
003A L10:
003A .dbline 0 ; func end
003A 0895 ret
003C .dbend
003C .dbfunc e TWI_start _TWI_start fc
.even
003C _TWI_start::
003C .dbline -1
003C .dbline 42
003C ;
003C ; /*
003C ; 函数:TWI_start()
003C ; 功能:产生I2C总线的起始状态
003C ; 说明:
003C ; 本函数也可以用来产生重复起始状态
003C ; 本函数执行后,I2C总线处于忙状态
003C ; */
003C ; uchar TWI_start(void)
003C ; {
003C .dbline 43
003C ; TWCR=(1<<TWINT)|(1<<TWSTA)|(1<<TWEN);
003C 84EA ldi R24,164
003E 80937400 sts 116,R24
0042 L12:
0042 .dbline 44
0042 L13:
0042 .dbline 44
0042 ; while(!(TWCR&(1<<TWINT)));
0042 20907400 lds R2,116
0046 27FE sbrs R2,7
0048 FCCF rjmp L12
004A .dbline 45
004A ; return 1;
004A 01E0 ldi R16,1
004C .dbline -2
004C L11:
004C .dbline 0 ; func end
004C 0895 ret
004E .dbend
004E .dbfunc e TWI_stop _TWI_stop fV
.even
004E _TWI_stop::
004E .dbline -1
004E .dbline 49
004E ; }
004E ;
004E ; void TWI_stop(void)
004E ; {
004E .dbline 50
004E ; TWCR=(1<<TWINT)|(1<<TWSTO)|(1<<TWEN);
004E 84E9 ldi R24,148
0050 80937400 sts 116,R24
0054 .dbline -2
0054 .dbline 51
0054 ; }
0054 L15:
0054 .dbline 0 ; func end
0054 0895 ret
0056 .dbend
0056 .dbfunc e TWI_writeB _TWI_writeB fc
0056 ; ack -> R20
0056 ; c -> R16
.even
0056 _TWI_writeB::
0056 0E940000 xcall push_gset1
005A .dbline -1
005A .dbline 63
005A ;
005A ; /*
005A ; 函数:TWI_writeB()
005A ; 功能:向I2C总线写1个字节的数据
005A ; 返回:
005A ; 0: 从机无应答
005A ; 1:从机应答
005A ; 参数:
005A ; c:要写到总线上的数据
005A ; */
005A ; uchar TWI_writeB(uchar c)
005A ; {
005A .dbline 64
005A ; uchar ack=1;
005A 41E0 ldi R20,1
005C .dbline 65
005C ; TWDR=c;
005C 00937300 sts 115,R16
0060 .dbline 66
0060 ; TWCR=(1<<TWINT)|(1<<TWEN);
0060 84E8 ldi R24,132
0062 80937400 sts 116,R24
0066 L17:
0066 .dbline 67
0066 L18:
0066 .dbline 67
0066 ; while(!(TWCR&(1<<TWINT)));
0066 20907400 lds R2,116
006A 27FE sbrs R2,7
006C FCCF rjmp L17
006E .dbline 68
006E ; if((TWSR&0xF8)!=SLA_W_ACK)
006E 80917100 lds R24,113
0072 887F andi R24,248
0074 8831 cpi R24,24
0076 09F0 breq L20
0078 .dbline 69
0078 ; ack=0;
0078 4427 clr R20
007A L20:
007A .dbline 70
007A ; return ack;
007A 042F mov R16,R20
007C .dbline -2
007C L16:
007C 0E940000 xcall pop_gset1
0080 .dbline 0 ; func end
0080 0895 ret
0082 .dbsym r ack 20 c
0082 .dbsym r c 16 c
0082 .dbend
0082 .dbfunc e TWI_readB _TWI_readB fc
0082 ; ack -> R16
.even
0082 _TWI_readB::
0082 .dbline -1
0082 .dbline 81
0082 ; }
0082 ;
0082 ; /*
0082 ; 函数:TWI_readB()
0082 ; 功能:从从机读取1个字节的数据
0082 ; 返回:读取的一个字节数据
0082 ; 说明:ack=0; 不应答
0082 ; ack=1; 应答
0082 ; */
0082 ; uchar TWI_readB(uchar ack)
0082 ; {
0082 .dbline 82
0082 ; if(ack)
0082 0023 tst R16
0084 21F0 breq L23
0086 .dbline 83
0086 ; TWCR=(1<<TWINT)|(1<<TWEA)|(1<<TWEN);
0086 84EC ldi R24,196
0088 80937400 sts 116,R24
008C 03C0 xjmp L26
008E L23:
008E .dbline 85
008E ; else
008E ; TWCR=(1<<TWINT)|(1<<TWEN);
008E 84E8 ldi R24,132
0090 80937400 sts 116,R24
0094 L25:
0094 .dbline 86
0094 L26:
0094 .dbline 86
0094 ; while(!(TWCR&(1<<TWINT)));
0094 20907400 lds R2,116
0098 27FE sbrs R2,7
009A FCCF rjmp L25
009C .dbline 87
009C ; return(TWDR);
009C 00917300 lds R16,115
00A0 .dbline -2
00A0 L22:
00A0 .dbline 0 ; func end
00A0 0895 ret
00A2 .dbsym r ack 16 c
00A2 .dbend
00A2 .dbfunc e TWI_page_write _TWI_page_write fc
00A2 ; i -> R20
00A2 ; arr -> R22,R23
00A2 ; n -> R10
00A2 ; addr -> R20
00A2 ; devadd -> R12
.even
00A2 _TWI_page_write::
00A2 0E940000 xcall push_gset4
00A6 422F mov R20,R18
00A8 C02E mov R12,R16
00AA A884 ldd R10,y+8
00AC 6A85 ldd R22,y+10
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -