⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 twi_master_polling.lis

📁 UART_TO_TWI程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
 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 + -