📄 iic.lis
字号:
02AC X19:
02AC .dbline 132
02AC ; {
02AC .dbline 133
02AC ; cmd_flag=1;
02AC 81E0 ldi R24,1
02AE 80930000 sts _cmd_flag,R24
02B2 .dbline 134
02B2 ; }
02B2 .dbline 135
02B2 ; break;
02B2 92C0 rjmp L3
02B4 L36:
02B4 .dbline 138
02B4 ; }
02B4 ; case SR_ALL_DATA_NOACK://SR_ALL_DATA_NOACK=0x98;以前以广播方式被寻址;数据已经被接收,NOT ACK 已返回
02B4 ; {
02B4 .dbline 139
02B4 ; cmd=TWDR;
02B4 23B0 in R2,0x3
02B6 20920000 sts _cmd,R2
02BA .dbline 140
02BA ; buf[cmd_num]=cmd;
02BA 80E0 ldi R24,<_buf
02BC 90E0 ldi R25,>_buf
02BE E0910000 lds R30,_cmd_num
02C2 FF27 clr R31
02C4 E80F add R30,R24
02C6 F91F adc R31,R25
02C8 2082 std z+0,R2
02CA .dbline 141
02CA ; cmd_num++;
02CA 80910000 lds R24,_cmd_num
02CE 8F5F subi R24,255 ; addi 1
02D0 80930000 sts _cmd_num,R24
02D4 .dbline 142
02D4 ; if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
02D4 20900000 lds R2,_cmd
02D8 2220 tst R2
02DA 89F4 brne L37
02DC 8230 cpi R24,2
02DE 79F4 brne L37
02E0 .dbline 143
02E0 ; {
02E0 .dbline 144
02E0 ; req_flag=1;
02E0 81E0 ldi R24,1
02E2 80930000 sts _req_flag,R24
02E6 .dbline 145
02E6 ; start_flag=0;
02E6 2224 clr R2
02E8 20920000 sts _start_flag,R2
02EC .dbline 146
02EC ; vision_flag=0;
02EC 20920000 sts _vision_flag,R2
02F0 .dbline 147
02F0 ; cmd_flag=0;
02F0 20920000 sts _cmd_flag,R2
02F4 .dbline 148
02F4 ; PWRON;
02F4 88B3 in R24,0x18
02F6 8F7D andi R24,223
02F8 88BB out 0x18,R24
02FA .dbline 149
02FA ; cmd_num=0;
02FA 20920000 sts _cmd_num,R2
02FE .dbline 150
02FE ; }
02FE L37:
02FE .dbline 151
02FE ; if(cmd==0x0f) //接收到握手结束位 置标记
02FE 80910000 lds R24,_cmd
0302 8F30 cpi R24,15
0304 31F4 brne L39
0306 .dbline 152
0306 ; {
0306 .dbline 153
0306 ; start_flag=1;
0306 81E0 ldi R24,1
0308 80930000 sts _start_flag,R24
030C .dbline 154
030C ; PWRON;
030C 88B3 in R24,0x18
030E 8F7D andi R24,223
0310 88BB out 0x18,R24
0312 .dbline 155
0312 ; }
0312 L39:
0312 .dbline 156
0312 ; if(cmd==0x05 && cmd_num==2)
0312 80910000 lds R24,_cmd
0316 8530 cpi R24,5
0318 39F4 brne L41
031A 80910000 lds R24,_cmd_num
031E 8230 cpi R24,2
0320 19F4 brne L41
0322 .dbline 157
0322 ; {
0322 .dbline 158
0322 ; vision_flag=1;
0322 81E0 ldi R24,1
0324 80930000 sts _vision_flag,R24
0328 .dbline 159
0328 ; }
0328 L41:
0328 .dbline 160
0328 ; Twi_ACK();
0328 85EC ldi R24,197
032A 86BF out 0x36,R24
032C .dbline 161
032C ; if(cmd==0xff) //接受到主机发送数据结束位 置标记
032C 80910000 lds R24,_cmd
0330 8F3F cpi R24,255
0332 09F0 breq X20
0334 51C0 rjmp L3
0336 X20:
0336 .dbline 162
0336 ; {
0336 .dbline 163
0336 ; cmd_flag=1;
0336 81E0 ldi R24,1
0338 80930000 sts _cmd_flag,R24
033C .dbline 164
033C ; }
033C .dbline 165
033C ; break;
033C 4DC0 rjmp L3
033E L45:
033E .dbline 169
033E ; }
033E ; //*****************************从机发送************************/
033E ; case ST_SLA_ACK://SR_STOP_RESTART=0xa8, 自己的SLA+R 已经被接收,ACK 已返回
033E ; {
033E .dbline 170
033E ; Twi_WB(*(data+j)); //从机发送数据
033E .dbline 170
033E 20900000 lds R2,_data
0342 30900100 lds R3,_data+1
0346 E0910000 lds R30,_j
034A FF27 clr R31
034C E20D add R30,R2
034E F31D adc R31,R3
0350 2080 ldd R2,z+0
0352 23B8 out 0x3,R2
0354 .dbline 170
0354 85EC ldi R24,197
0356 86BF out 0x36,R24
0358 .dbline 170
0358 .dbline 170
0358 .dbline 171
0358 ; j++; //准备下一个数据
0358 80910000 lds R24,_j
035C 8F5F subi R24,255 ; addi 1
035E 80930000 sts _j,R24
0362 .dbline 172
0362 ; break;
0362 3AC0 rjmp L3
0364 L46:
0364 .dbline 175
0364 ; }
0364 ; case MT_ST_SLA_ACK://SR_STOP_RESTART=0xb0, SLA+R/W 作为主机的仲裁失败;自己的SLA+R 已经被接收,ACK 已返回
0364 ; {
0364 .dbline 176
0364 ; Twi_WB(*(data+j)); //从机发送数据
0364 .dbline 176
0364 20900000 lds R2,_data
0368 30900100 lds R3,_data+1
036C E0910000 lds R30,_j
0370 FF27 clr R31
0372 E20D add R30,R2
0374 F31D adc R31,R3
0376 2080 ldd R2,z+0
0378 23B8 out 0x3,R2
037A .dbline 176
037A 85EC ldi R24,197
037C 86BF out 0x36,R24
037E .dbline 176
037E .dbline 176
037E .dbline 177
037E ; j++; //准备下一个数据
037E 80910000 lds R24,_j
0382 8F5F subi R24,255 ; addi 1
0384 80930000 sts _j,R24
0388 .dbline 178
0388 ; break;
0388 27C0 rjmp L3
038A L47:
038A .dbline 181
038A ; }
038A ; case ST_DATA_ACK://SR_STOP_RESTART=0xb8, TWDR 里数据已经发送,接收到ACK
038A ; {
038A .dbline 182
038A ; Twi_WB(*(data+j)); //从机发送数据
038A .dbline 182
038A 20900000 lds R2,_data
038E 30900100 lds R3,_data+1
0392 E0910000 lds R30,_j
0396 FF27 clr R31
0398 E20D add R30,R2
039A F31D adc R31,R3
039C 2080 ldd R2,z+0
039E 23B8 out 0x3,R2
03A0 .dbline 182
03A0 85EC ldi R24,197
03A2 86BF out 0x36,R24
03A4 .dbline 182
03A4 .dbline 182
03A4 .dbline 183
03A4 ; j++; //准备下一个数据
03A4 80910000 lds R24,_j
03A8 8F5F subi R24,255 ; addi 1
03AA 80930000 sts _j,R24
03AE .dbline 184
03AE ; break;
03AE 14C0 rjmp L3
03B0 L48:
03B0 .dbline 187
03B0 ; }
03B0 ; case ST_DATA_NOACK://SR_STOP_RESTART=0xc0, TWDR 里数据已经发送,接收到NOT ACK
03B0 ; {
03B0 .dbline 188
03B0 ; j=0; //发送完数据请零结束
03B0 2224 clr R2
03B2 20920000 sts _j,R2
03B6 .dbline 189
03B6 ; Twi_ACK();
03B6 85EC ldi R24,197
03B8 86BF out 0x36,R24
03BA .dbline 190
03BA ; break;
03BA 0EC0 rjmp L3
03BC L49:
03BC .dbline 193
03BC ; }
03BC ; case ST_LAST_DATA_ACK://SR_STOP_RESTART=0xc8, TWDR 的一字节数据已经发送,(TWAE = “0”);接收到ACK
03BC ; {
03BC .dbline 194
03BC ; j=0;//发送完数据请零结束
03BC 2224 clr R2
03BE 20920000 sts _j,R2
03C2 .dbline 195
03C2 ; Twi_ACK();
03C2 85EC ldi R24,197
03C4 86BF out 0x36,R24
03C6 .dbline 196
03C6 ; break;
03C6 08C0 rjmp L3
03C8 L50:
03C8 .dbline 199
03C8 ; }
03C8 ; case SR_STOP_RESTART://SR_STOP_RESTART=0xa0, 在以从机工作时接收到STOP或重复START
03C8 ; {
03C8 .dbline 200
03C8 ; j=0;
03C8 2224 clr R2
03CA 20920000 sts _j,R2
03CE .dbline 201
03CE ; Twi_ACK();
03CE 85EC ldi R24,197
03D0 86BF out 0x36,R24
03D2 .dbline 202
03D2 ; break;
03D2 02C0 rjmp L3
03D4 L2:
03D4 .dbline 205
03D4 .dbline 206
03D4 85E9 ldi R24,149
03D6 86BF out 0x36,R24
03D8 .dbline 207
03D8 L3:
03D8 .dbline -2
03D8 L1:
03D8 2990 ld R2,y+
03DA 2FBE out 0x3f,R2
03DC F991 ld R31,y+
03DE E991 ld R30,y+
03E0 9991 ld R25,y+
03E2 8991 ld R24,y+
03E4 1991 ld R17,y+
03E6 0991 ld R16,y+
03E8 3990 ld R3,y+
03EA 2990 ld R2,y+
03EC .dbline 0 ; func end
03EC 1895 reti
03EE .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -