📄 iic.lis
字号:
0154 .dbline 57
0154 ; vision_flag=0;
0154 20920000 sts _vision_flag,R2
0158 .dbline 58
0158 ; cmd_flag=0;
0158 20920000 sts _cmd_flag,R2
015C .dbline 59
015C ; cmd_num=0;
015C 20920000 sts _cmd_num,R2
0160 .dbline 60
0160 ; }
0160 L10:
0160 .dbline 61
0160 ; if(cmd==0x0f) //接收到握手结束位 置标记
0160 80910000 lds R24,_cmd
0164 8F30 cpi R24,15
0166 31F4 brne L12
0168 .dbline 62
0168 ; {
0168 .dbline 63
0168 ; start_flag=1;
0168 81E0 ldi R24,1
016A 80930000 sts _start_flag,R24
016E .dbline 64
016E ; PWRON;
016E 88B3 in R24,0x18
0170 8F7D andi R24,223
0172 88BB out 0x18,R24
0174 .dbline 65
0174 ; }
0174 L12:
0174 .dbline 66
0174 ; if(cmd==0x05 && cmd_num==2)
0174 80910000 lds R24,_cmd
0178 8530 cpi R24,5
017A 39F4 brne L14
017C 80910000 lds R24,_cmd_num
0180 8230 cpi R24,2
0182 19F4 brne L14
0184 .dbline 67
0184 ; {
0184 .dbline 68
0184 ; vision_flag=1;
0184 81E0 ldi R24,1
0186 80930000 sts _vision_flag,R24
018A .dbline 69
018A ; }
018A L14:
018A .dbline 70
018A ; Twi_ACK();
018A 85EC ldi R24,197
018C 86BF out 0x36,R24
018E .dbline 71
018E ; if(cmd==0xff) //接受到主机发送数据结束位 置标记
018E 80910000 lds R24,_cmd
0192 8F3F cpi R24,255
0194 09F0 breq X17
0196 20C1 rjmp L3
0198 X17:
0198 .dbline 72
0198 ; {
0198 .dbline 73
0198 ; cmd_flag=1;
0198 81E0 ldi R24,1
019A 80930000 sts _cmd_flag,R24
019E .dbline 74
019E ; }
019E .dbline 75
019E ; break;
019E 1CC1 rjmp L3
01A0 L18:
01A0 .dbline 78
01A0 ; }
01A0 ; case SR_DATA_NOACK://SR_DATA_NOACK=0x88;以前以自己的 SLA+W 被寻址;数据已经被接收,NOT ACK 已返回
01A0 ; {
01A0 .dbline 79
01A0 ; cmd=TWDR;
01A0 23B0 in R2,0x3
01A2 20920000 sts _cmd,R2
01A6 .dbline 80
01A6 ; buf[cmd_num]=cmd;
01A6 80E0 ldi R24,<_buf
01A8 90E0 ldi R25,>_buf
01AA E0910000 lds R30,_cmd_num
01AE FF27 clr R31
01B0 E80F add R30,R24
01B2 F91F adc R31,R25
01B4 2082 std z+0,R2
01B6 .dbline 81
01B6 ; cmd_num++;
01B6 80910000 lds R24,_cmd_num
01BA 8F5F subi R24,255 ; addi 1
01BC 80930000 sts _cmd_num,R24
01C0 .dbline 82
01C0 ; if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
01C0 20900000 lds R2,_cmd
01C4 2220 tst R2
01C6 89F4 brne L19
01C8 8230 cpi R24,2
01CA 79F4 brne L19
01CC .dbline 83
01CC ; {
01CC .dbline 84
01CC ; req_flag=1;
01CC 81E0 ldi R24,1
01CE 80930000 sts _req_flag,R24
01D2 .dbline 85
01D2 ; start_flag=0;
01D2 2224 clr R2
01D4 20920000 sts _start_flag,R2
01D8 .dbline 86
01D8 ; vision_flag=0;
01D8 20920000 sts _vision_flag,R2
01DC .dbline 87
01DC ; cmd_flag=0;
01DC 20920000 sts _cmd_flag,R2
01E0 .dbline 88
01E0 ; PWRON;
01E0 88B3 in R24,0x18
01E2 8F7D andi R24,223
01E4 88BB out 0x18,R24
01E6 .dbline 89
01E6 ; cmd_num=0;
01E6 20920000 sts _cmd_num,R2
01EA .dbline 90
01EA ; }
01EA L19:
01EA .dbline 91
01EA ; if(cmd==0x0f) //接收到握手结束位 置标记
01EA 80910000 lds R24,_cmd
01EE 8F30 cpi R24,15
01F0 31F4 brne L21
01F2 .dbline 92
01F2 ; {
01F2 .dbline 93
01F2 ; start_flag=1;
01F2 81E0 ldi R24,1
01F4 80930000 sts _start_flag,R24
01F8 .dbline 94
01F8 ; PWRON;
01F8 88B3 in R24,0x18
01FA 8F7D andi R24,223
01FC 88BB out 0x18,R24
01FE .dbline 95
01FE ; }
01FE L21:
01FE .dbline 96
01FE ; if(cmd==0x05 && cmd_num==2)
01FE 80910000 lds R24,_cmd
0202 8530 cpi R24,5
0204 39F4 brne L23
0206 80910000 lds R24,_cmd_num
020A 8230 cpi R24,2
020C 19F4 brne L23
020E .dbline 97
020E ; {
020E .dbline 98
020E ; vision_flag=1;
020E 81E0 ldi R24,1
0210 80930000 sts _vision_flag,R24
0214 .dbline 99
0214 ; }
0214 L23:
0214 .dbline 100
0214 ; Twi_ACK();
0214 85EC ldi R24,197
0216 86BF out 0x36,R24
0218 .dbline 101
0218 ; if(cmd==0xff) //接受到主机发送数据结束位 置标记
0218 80910000 lds R24,_cmd
021C 8F3F cpi R24,255
021E 09F0 breq X18
0220 DBC0 rjmp L3
0222 X18:
0222 .dbline 102
0222 ; {
0222 .dbline 103
0222 ; cmd_flag=1;
0222 81E0 ldi R24,1
0224 80930000 sts _cmd_flag,R24
0228 .dbline 104
0228 ; }
0228 .dbline 105
0228 ; break;
0228 D7C0 rjmp L3
022A L27:
022A .dbline 108
022A ; }
022A ; case SR_ALL_DATA_ACK://SR_ALL_DATA_ACK=0x90;以前以广播方式被寻址;数据已经被接收,ACK 已返回
022A ; {
022A .dbline 109
022A ; cmd=TWDR;
022A 23B0 in R2,0x3
022C 20920000 sts _cmd,R2
0230 .dbline 110
0230 ; buf[cmd_num]=cmd;
0230 80E0 ldi R24,<_buf
0232 90E0 ldi R25,>_buf
0234 E0910000 lds R30,_cmd_num
0238 FF27 clr R31
023A E80F add R30,R24
023C F91F adc R31,R25
023E 2082 std z+0,R2
0240 .dbline 111
0240 ; cmd_num++;
0240 80910000 lds R24,_cmd_num
0244 8F5F subi R24,255 ; addi 1
0246 80930000 sts _cmd_num,R24
024A .dbline 112
024A ; if(cmd==0x00 && cmd_num==2) //接收到主机请求数据结束位 置标记
024A 20900000 lds R2,_cmd
024E 2220 tst R2
0250 89F4 brne L28
0252 8230 cpi R24,2
0254 79F4 brne L28
0256 .dbline 113
0256 ; {
0256 .dbline 114
0256 ; req_flag=1;
0256 81E0 ldi R24,1
0258 80930000 sts _req_flag,R24
025C .dbline 115
025C ; start_flag=0;
025C 2224 clr R2
025E 20920000 sts _start_flag,R2
0262 .dbline 116
0262 ; vision_flag=0;
0262 20920000 sts _vision_flag,R2
0266 .dbline 117
0266 ; cmd_flag=0;
0266 20920000 sts _cmd_flag,R2
026A .dbline 118
026A ; PWRON;
026A 88B3 in R24,0x18
026C 8F7D andi R24,223
026E 88BB out 0x18,R24
0270 .dbline 119
0270 ; cmd_num=0;
0270 20920000 sts _cmd_num,R2
0274 .dbline 120
0274 ; }
0274 L28:
0274 .dbline 121
0274 ; if(cmd==0x0f) //接收到握手结束位 置标记
0274 80910000 lds R24,_cmd
0278 8F30 cpi R24,15
027A 31F4 brne L30
027C .dbline 122
027C ; {
027C .dbline 123
027C ; start_flag=1;
027C 81E0 ldi R24,1
027E 80930000 sts _start_flag,R24
0282 .dbline 124
0282 ; PWRON;
0282 88B3 in R24,0x18
0284 8F7D andi R24,223
0286 88BB out 0x18,R24
0288 .dbline 125
0288 ; }
0288 L30:
0288 .dbline 126
0288 ; if(cmd==0x05 && cmd_num==2)
0288 80910000 lds R24,_cmd
028C 8530 cpi R24,5
028E 39F4 brne L32
0290 80910000 lds R24,_cmd_num
0294 8230 cpi R24,2
0296 19F4 brne L32
0298 .dbline 127
0298 ; {
0298 .dbline 128
0298 ; vision_flag=1;
0298 81E0 ldi R24,1
029A 80930000 sts _vision_flag,R24
029E .dbline 129
029E ; }
029E L32:
029E .dbline 130
029E ; Twi_ACK();
029E 85EC ldi R24,197
02A0 86BF out 0x36,R24
02A2 .dbline 131
02A2 ; if(cmd==0xff) //接受到主机发送数据结束位 置标记
02A2 80910000 lds R24,_cmd
02A6 8F3F cpi R24,255
02A8 09F0 breq X19
02AA 96C0 rjmp L3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -