📄 twi_master_polling.lis
字号:
00C6 ; unsigned char twi_read_byte(unsigned char device_adr,unsigned char RamAddress)
00C6 ; {
00C6 .dbline 54
00C6 84EA ldi R24,164
00C8 86BF out 0x36,R24
00CA .dbline 54
00CA L24:
00CA .dbline 54
00CA L25:
00CA .dbline 54
00CA ; unsigned char temp;
00CA ;
00CA ; //I2C启动
00CA ; Start(); Wait();
00CA 26B6 in R2,0x36
00CC 27FE sbrs R2,7
00CE FDCF rjmp L24
00D0 .dbline 54
00D0 .dbline 54
00D0 .dbline 55
00D0 ; if (TestAck()!=START) {Read_Succsee_Flag = false;Stop();return TestAck();}//ACK
00D0 81B1 in R24,0x1
00D2 887F andi R24,248
00D4 8830 cpi R24,8
00D6 41F0 breq L27
00D8 .dbline 55
00D8 .dbline 55
00D8 2224 clr R2
00DA 20920000 sts _Read_Succsee_Flag,R2
00DE .dbline 55
00DE 84E9 ldi R24,148
00E0 86BF out 0x36,R24
00E2 .dbline 55
00E2 01B1 in R16,0x1
00E4 087F andi R16,248
00E6 61C0 rjmp L23
00E8 L27:
00E8 .dbline 57
00E8 .dbline 57
00E8 03B9 out 0x3,R16
00EA .dbline 57
00EA 84E8 ldi R24,132
00EC 86BF out 0x36,R24
00EE .dbline 57
00EE .dbline 57
00EE .dbline 57
00EE L29:
00EE .dbline 57
00EE L30:
00EE .dbline 57
00EE ; //写I2C从器件地址和写方式
00EE ; Write8Bit(device_adr); Wait();
00EE 26B6 in R2,0x36
00F0 27FE sbrs R2,7
00F2 FDCF rjmp L29
00F4 .dbline 57
00F4 .dbline 57
00F4 .dbline 58
00F4 ; if (TestAck()!=MT_SLA_ACK) {Read_Succsee_Flag = false;Stop();return TestAck();}//ACK
00F4 81B1 in R24,0x1
00F6 887F andi R24,248
00F8 8831 cpi R24,24
00FA 41F0 breq L32
00FC .dbline 58
00FC .dbline 58
00FC 2224 clr R2
00FE 20920000 sts _Read_Succsee_Flag,R2
0102 .dbline 58
0102 84E9 ldi R24,148
0104 86BF out 0x36,R24
0106 .dbline 58
0106 01B1 in R16,0x1
0108 087F andi R16,248
010A 4FC0 rjmp L23
010C L32:
010C .dbline 60
010C .dbline 60
010C 23B9 out 0x3,R18
010E .dbline 60
010E 84E8 ldi R24,132
0110 86BF out 0x36,R24
0112 .dbline 60
0112 .dbline 60
0112 .dbline 60
0112 L34:
0112 .dbline 60
0112 L35:
0112 .dbline 60
0112 ; //写RAM地址
0112 ; Write8Bit(RamAddress); Wait();
0112 26B6 in R2,0x36
0114 27FE sbrs R2,7
0116 FDCF rjmp L34
0118 .dbline 60
0118 .dbline 60
0118 .dbline 61
0118 ; if (TestAck()!=MT_DATA_ACK) {Read_Succsee_Flag = false;Stop();return TestAck();}
0118 81B1 in R24,0x1
011A 887F andi R24,248
011C 8832 cpi R24,40
011E 41F0 breq L37
0120 .dbline 61
0120 .dbline 61
0120 2224 clr R2
0122 20920000 sts _Read_Succsee_Flag,R2
0126 .dbline 61
0126 84E9 ldi R24,148
0128 86BF out 0x36,R24
012A .dbline 61
012A 01B1 in R16,0x1
012C 087F andi R16,248
012E 3DC0 rjmp L23
0130 L37:
0130 .dbline 63
0130 84EA ldi R24,164
0132 86BF out 0x36,R24
0134 .dbline 63
0134 L39:
0134 .dbline 63
0134 L40:
0134 .dbline 63
0134 ; //I2C重新启动
0134 ; Start(); Wait();
0134 26B6 in R2,0x36
0136 27FE sbrs R2,7
0138 FDCF rjmp L39
013A .dbline 63
013A .dbline 63
013A .dbline 64
013A ; if (TestAck()!=RE_START) {Read_Succsee_Flag = false;Stop();return TestAck();}
013A 81B1 in R24,0x1
013C 887F andi R24,248
013E 8031 cpi R24,16
0140 41F0 breq L42
0142 .dbline 64
0142 .dbline 64
0142 2224 clr R2
0144 20920000 sts _Read_Succsee_Flag,R2
0148 .dbline 64
0148 84E9 ldi R24,148
014A 86BF out 0x36,R24
014C .dbline 64
014C 01B1 in R16,0x1
014E 087F andi R16,248
0150 2CC0 rjmp L23
0152 L42:
0152 .dbline 66
0152 .dbline 66
0152 802F mov R24,R16
0154 8F5F subi R24,255 ; addi 1
0156 83B9 out 0x3,R24
0158 .dbline 66
0158 84E8 ldi R24,132
015A 86BF out 0x36,R24
015C .dbline 66
015C .dbline 66
015C .dbline 66
015C L44:
015C .dbline 66
015C L45:
015C .dbline 66
015C ; //写I2C从器件地址和读方式
015C ; Write8Bit(device_adr+1); Wait();
015C 26B6 in R2,0x36
015E 27FE sbrs R2,7
0160 FDCF rjmp L44
0162 .dbline 66
0162 .dbline 66
0162 .dbline 67
0162 ; if(TestAck()!=MR_SLA_ACK) {Read_Succsee_Flag = false;Stop();return TestAck();}//ACK
0162 81B1 in R24,0x1
0164 887F andi R24,248
0166 8034 cpi R24,64
0168 41F0 breq L47
016A .dbline 67
016A .dbline 67
016A 2224 clr R2
016C 20920000 sts _Read_Succsee_Flag,R2
0170 .dbline 67
0170 84E9 ldi R24,148
0172 86BF out 0x36,R24
0174 .dbline 67
0174 01B1 in R16,0x1
0176 087F andi R16,248
0178 18C0 rjmp L23
017A L47:
017A .dbline 69
017A 84EC ldi R24,196
017C 86BF out 0x36,R24
017E .dbline 69
017E L49:
017E .dbline 69
017E L50:
017E .dbline 69
017E ; //启动主I2C读方式,且设为准备响应
017E ; Twi(); Wait();
017E 26B6 in R2,0x36
0180 27FE sbrs R2,7
0182 FDCF rjmp L49
0184 .dbline 69
0184 .dbline 69
0184 .dbline 70
0184 ; if(TestAck()!=MR_DATA_ACK) {Read_Succsee_Flag = false;Stop();return TestAck();}//ACK
0184 81B1 in R24,0x1
0186 887F andi R24,248
0188 8035 cpi R24,80
018A 41F0 breq L52
018C .dbline 70
018C .dbline 70
018C 2224 clr R2
018E 20920000 sts _Read_Succsee_Flag,R2
0192 .dbline 70
0192 84E9 ldi R24,148
0194 86BF out 0x36,R24
0196 .dbline 70
0196 01B1 in R16,0x1
0198 087F andi R16,248
019A 07C0 rjmp L23
019C L52:
019C .dbline 72
019C ; //读取I2C接收数据
019C ; temp=TWDR;
019C 43B1 in R20,0x3
019E .dbline 73
019E ; Read_Succsee_Flag = true;
019E 81E0 ldi R24,1
01A0 80930000 sts _Read_Succsee_Flag,R24
01A4 .dbline 75
01A4 ; //I2C停止
01A4 ; Stop();
01A4 84E9 ldi R24,148
01A6 86BF out 0x36,R24
01A8 .dbline 76
01A8 ; return temp;
01A8 042F mov R16,R20
01AA .dbline -2
01AA L23:
01AA 00D0 rcall pop_gset1
01AC .dbline 0 ; func end
01AC 0895 ret
01AE .dbsym r temp 20 c
01AE .dbsym r RamAddress 18 c
01AE .dbsym r device_adr 16 c
01AE .dbend
.area bss(ram, con, rel)
0000 .dbfile H:\程序库\twi_master_polling.c
0000 _Read_Succsee_Flag::
0000 .blkb 1
0001 .dbsym e Read_Succsee_Flag _Read_Succsee_Flag c
0001 _Write_Succsee_Flag::
0001 .blkb 1
0002 .dbsym e Write_Succsee_Flag _Write_Succsee_Flag c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -