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

📄 twi.lis

📁 PTR8000无线通信模块的单片机控制程序
💻 LIS
📖 第 1 页 / 共 3 页
字号:
 01C0           ;       switch(TWSR_state)
 01C0 1127              clr R17
 01C2 0038              cpi R16,128
 01C4 E0E0              ldi R30,0
 01C6 1E07              cpc R17,R30
 01C8 09F4              brne X4
 01CA 73C0              rjmp L58
 01CC           X4:
 01CC 80E8              ldi R24,128
 01CE 90E0              ldi R25,0
 01D0 8017              cp R24,R16
 01D2 9107              cpc R25,R17
 01D4 0CF4              brge X5
 01D6 35C0              rjmp L73
 01D8           X5:
 01D8           L72:
 01D8 0834              cpi R16,72
 01DA E0E0              ldi R30,0
 01DC 1E07              cpc R17,R30
 01DE 09F4              brne X6
 01E0 7DC0              rjmp L63
 01E2           X6:
 01E2 88E4              ldi R24,72
 01E4 90E0              ldi R25,0
 01E6 8017              cp R24,R16
 01E8 9107              cpc R25,R17
 01EA ACF0              brlt L75
 01EC           L74:
 01EC 0833              cpi R16,56
 01EE E0E0              ldi R30,0
 01F0 1E07              cpc R17,R30
 01F2 09F4              brne X7
 01F4 6AC0              rjmp L61
 01F6           X7:
 01F6 88E3              ldi R24,56
 01F8 90E0              ldi R25,0
 01FA 8017              cp R24,R16
 01FC 9107              cpc R25,R17
 01FE 2CF0              brlt L77
 0200           L76:
 0200 0030              cpi R16,0
 0202 0107              cpc R16,R17
 0204 09F4              brne X8
 0206 97C0              rjmp L71
 0208           X8:
 0208           X1:
 0208 98C0              rjmp L55
 020A           L77:
 020A 0034              cpi R16,64
 020C E0E0              ldi R30,0
 020E 1E07              cpc R17,R30
 0210 09F4              brne X9
 0212 61C0              rjmp L62
 0214           X9:
 0214 92C0              rjmp L55
 0216           L75:
 0216 0835              cpi R16,88
 0218 E0E0              ldi R30,0
 021A 1E07              cpc R17,R30
 021C 09F4              brne X10
 021E 6FC0              rjmp L65
 0220           X10:
 0220 88E5              ldi R24,88
 0222 90E0              ldi R25,0
 0224 8017              cp R24,R16
 0226 9107              cpc R25,R17
 0228 34F0              brlt L79
 022A           L78:
 022A 0035              cpi R16,80
 022C E0E0              ldi R30,0
 022E 1E07              cpc R17,R30
 0230 09F4              brne X11
 0232 5AC0              rjmp L64
 0234           X11:
 0234 82C0              rjmp L55
 0236           L79:
 0236 0036              cpi R16,96
 0238 E0E0              ldi R30,0
 023A 1E07              cpc R17,R30
 023C 09F4              brne X12
 023E 36C0              rjmp L57
 0240           X12:
 0240 7CC0              rjmp L55
 0242           L73:
 0242 083B              cpi R16,184
 0244 E0E0              ldi R30,0
 0246 1E07              cpc R17,R30
 0248 09F4              brne X13
 024A 6CC0              rjmp L67
 024C           X13:
 024C 88EB              ldi R24,184
 024E 90E0              ldi R25,0
 0250 8017              cp R24,R16
 0252 9107              cpc R25,R17
 0254 ACF0              brlt L81
 0256           L80:
 0256 003A              cpi R16,160
 0258 E0E0              ldi R30,0
 025A 1E07              cpc R17,R30
 025C 09F4              brne X14
 025E 32C0              rjmp L60
 0260           X14:
 0260 80EA              ldi R24,160
 0262 90E0              ldi R25,0
 0264 8017              cp R24,R16
 0266 9107              cpc R25,R17
 0268 2CF0              brlt L83
 026A           L82:
 026A 0838              cpi R16,136
 026C E0E0              ldi R30,0
 026E 1E07              cpc R17,R30
 0270 31F1              breq L59
 0272 63C0              rjmp L55
 0274           L83:
 0274 083A              cpi R16,168
 0276 E0E0              ldi R30,0
 0278 1E07              cpc R17,R30
 027A 09F4              brne X15
 027C 4BC0              rjmp L66
 027E           X15:
 027E 5DC0              rjmp L55
 0280           L81:
 0280 083C              cpi R16,200
 0282 E0E0              ldi R30,0
 0284 1E07              cpc R17,R30
 0286 09F4              brne X16
 0288 53C0              rjmp L69
 028A           X16:
 028A 88EC              ldi R24,200
 028C 90E0              ldi R25,0
 028E 8017              cp R24,R16
 0290 9107              cpc R25,R17
 0292 34F0              brlt L85
 0294           L84:
 0294 003C              cpi R16,192
 0296 E0E0              ldi R30,0
 0298 1E07              cpc R17,R30
 029A 09F4              brne X17
 029C 46C0              rjmp L68
 029E           X17:
 029E 4DC0              rjmp L55
 02A0           L85:
 02A0 083F              cpi R16,248
 02A2 E0E0              ldi R30,0
 02A4 1E07              cpc R17,R30
 02A6 09F4              brne X18
 02A8 48C0              rjmp L55
 02AA           X18:
 02AA 47C0              rjmp L55
 02AC           X2:
 02AC                   .dbline 194
 02AC           ;       {
 02AC           L57:
 02AC                   .dbline 196
 02AC           ;               //从机接收模式下的中断程序
 02AC           ;     case 0x60: TWCR=0xc5;break;              // SLA+W已经接收,ACK已返回(从机被寻址,等待主机发送数据)
 02AC 85EC              ldi R24,197
 02AE 86BF              out 0x36,R24
 02B0                   .dbline 196
 02B0 44C0              rjmp L55
 02B2           L58:
 02B2                   .dbline 197
 02B2           ;     case 0x80: receive_data = TWDR;TWCR=0xc5;break;  // 数据已接收,ACK已返回(接收数据)
 02B2 23B0              in R2,0x3
 02B4 20920000          sts _receive_data,R2
 02B8                   .dbline 197
 02B8 85EC              ldi R24,197
 02BA 86BF              out 0x36,R24
 02BC                   .dbline 197
 02BC 3EC0              rjmp L55
 02BE           L59:
 02BE                   .dbline 198
 02BE           ;     case 0x88: TWCR=0xc5;break;                              // 数据已接收,NOT ACK已返回(下一步:退出总线)
 02BE 85EC              ldi R24,197
 02C0 86BF              out 0x36,R24
 02C2                   .dbline 198
 02C2 3BC0              rjmp L55
 02C4           L60:
 02C4                   .dbline 199
 02C4           ;       case 0xA0: TWCR=0xc5;break;                            // 接收到STOP或重复的START信号(停止接收数据)
 02C4 85EC              ldi R24,197
 02C6 86BF              out 0x36,R24
 02C8                   .dbline 199
 02C8 38C0              rjmp L55
 02CA           L61:
 02CA                   .dbline 202
 02CA           ;               
 02CA           ;               //主机接收模式下的中断程序
 02CA           ;     case 0x38: error_state=4;TWCR=0xc5;break;  // SLA+R或NOT ACK仲裁失败(下一步:退出总线)
 02CA 84E0              ldi R24,4
 02CC 80930000          sts _error_state,R24
 02D0                   .dbline 202
 02D0 85EC              ldi R24,197
 02D2 86BF              out 0x36,R24
 02D4                   .dbline 202
 02D4 32C0              rjmp L55
 02D6           L62:
 02D6                   .dbline 203
 02D6           ;       case 0x40: TWCR=0xc5; break;               // SLA+R已发送,接收到ACK(从机被寻址,主机等待接收数据)
 02D6 85EC              ldi R24,197
 02D8 86BF              out 0x36,R24
 02DA                   .dbline 203
 02DA 2FC0              rjmp L55
 02DC           L63:
 02DC                   .dbline 204
 02DC           ;       case 0x48: error_state=5;TWCR=0xc5;break;  // SLA+R已发送,接收到NOT ACK(下一步:退出总线)
 02DC 85E0              ldi R24,5
 02DE 80930000          sts _error_state,R24
 02E2                   .dbline 204
 02E2 85EC              ldi R24,197
 02E4 86BF              out 0x36,R24
 02E6                   .dbline 204
 02E6 29C0              rjmp L55
 02E8           L64:
 02E8                   .dbline 205
 02E8           ;     case 0x50: receive_data = TWDR;_NOP();_NOP();error_state=8;TWCR = 0xc4;break;     // 接收到数据,ACK已返回(接收数据)
 02E8 23B0              in R2,0x3
 02EA 20920000          sts _receive_data,R2
 02EE                   .dbline 205
 02EE 0000              nop
 02F0                   .dbline 205
 02F0 0000              nop
 02F2                   .dbline 205
 02F2 88E0              ldi R24,8
 02F4 80930000          sts _error_state,R24
 02F8                   .dbline 205
 02F8 84EC              ldi R24,196
 02FA 86BF              out 0x36,R24
 02FC                   .dbline 205
 02FC 1EC0              rjmp L55
 02FE           L65:
 02FE                   .dbline 206
 02FE           ;       case 0x58: receive_data = TWDR;_NOP();_NOP();error_state=8;TWCR = 0xc4;break;   // 接收到数据,NOT ACK已返回(下一步:退出总线)
 02FE 23B0              in R2,0x3
 0300 20920000          sts _receive_data,R2
 0304                   .dbline 206
 0304 0000              nop
 0306                   .dbline 206
 0306 0000              nop
 0308                   .dbline 206
 0308 88E0              ldi R24,8
 030A 80930000          sts _error_state,R24
 030E                   .dbline 206
 030E 84EC              ldi R24,196
 0310 86BF              out 0x36,R24
 0312                   .dbline 206
 0312 13C0              rjmp L55
 0314           L66:
 0314                   .dbline 209
 0314           ;               
 0314           ;               //从机发送模式
 0314           ;       case 0xA8: TWDR= send_data;_NOP();_NOP();TWCR= 0x85; break; // SLA+R已接收,ACK已返回(从机被寻址,开送发送数据)
 0314 20900000          lds R2,_send_data
 0318 23B8              out 0x3,R2
 031A                   .dbline 209
 031A 0000              nop
 031C                   .dbline 209
 031C 0000              nop
 031E                   .dbline 209
 031E 85E8              ldi R24,133
 0320 86BF              out 0x36,R24
 0322                   .dbline 209
 0322 0BC0              rjmp L55
 0324           L67:
 0324                   .dbline 210
 0324           ;       case 0xB8: TWCR= 0xc5;break;              // TWDR里的数据已发送,接受到ACK(主机接收到数据,继续发送数据)
 0324 85EC              ldi R24,197
 0326 86BF              out 0x36,R24
 0328                   .dbline 210
 0328 08C0              rjmp L55
 032A           L68:
 032A                   .dbline 211
 032A           ;       case 0xC0: TWCR= 0xc5;break;                      // TWDR里的数据已发送,接受到NOT ACK(下一步:退出总线)
 032A 85EC              ldi R24,197
 032C 86BF              out 0x36,R24
 032E                   .dbline 211
 032E 05C0              rjmp L55
 0330           L69:
 0330                   .dbline 212
 0330           ;       case 0xC8: TWCR= 0xc5;break;              // TWEA=0,接收到ACK(停止发送数据,退出发送)
 0330 85EC              ldi R24,197
 0332 86BF              out 0x36,R24
 0334                   .dbline 212
 0334 02C0              rjmp L55
 0336           X3:
 0336                   .dbline 215
 0336           ;               
 0336           ;               //其他状态码
 0336           ;       case 0xf8: break;                                                 // 等待或进行当前传输
 0336           L71:
 0336                   .dbline 216
 0336           ;       case 0x00: TWCR= 0x95;break;              // 非法的START或STOP引起的总线错误(释放总线)
 0336 85E9              ldi R24,149
 0338 86BF              out 0x36,R24
 033A                   .dbline 216
 033A                   .dbline 217
 033A           ;     default:   break;
 033A           L55:
 033A                   .dbline 219
 033A           ;       }
 033A           ;       return receive_data;                                      // 返回接收到的数据
 033A 00910000          lds R16,_receive_data
 033E                   .dbline -2
 033E           L53:
 033E 2990              ld R2,y+
 0340 2FBE              out 0x3f,R2
 0342 E991              ld R30,y+
 0344 9991              ld R25,y+
 0346 8991              ld R24,y+
 0348 1991              ld R17,y+
 034A 0991              ld R16,y+
 034C 2990              ld R2,y+
 034E                   .dbline 0 ; func end
 034E 1895              reti
 0350                   .dbsym r TWSR_state 16 c
 0350                   .dbend

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -