📄 communication.lis
字号:
01CA L74:
01CA .dbline 156
01CA L75:
01CA .dbline 156
01CA ; for(aaa=1000;aaa>0;aaa--);//等待PB3引脚稳定 1000
01CA 4150 subi R20,1
01CC 5040 sbci R21,0
01CE .dbline 156
01CE 2224 clr R2
01D0 3324 clr R3
01D2 2416 cp R2,R20
01D4 3506 cpc R3,R21
01D6 CCF3 brlt L74
01D8 L78:
01D8 .dbline 158
01D8 L79:
01D8 .dbline 157
01D8 ; while(!(UCSR0A&(1<<UDRE0)))
01D8 5D9B sbis 0xb,5
01DA FECF rjmp L78
01DC .dbline 159
01DC ; ;
01DC ; if(i==1)
01DC 2130 cpi R18,1
01DE 11F4 brne L81
01E0 .dbline 160
01E0 ; UCSR0B|=(1<<TXB80); //发送地址
01E0 509A sbi 0xa,0
01E2 01C0 xjmp L82
01E4 L81:
01E4 .dbline 162
01E4 ; else
01E4 ; {
01E4 .dbline 163
01E4 ; UCSR0B&=~(1<<TXB80); //发送数据
01E4 5098 cbi 0xa,0
01E6 .dbline 164
01E6 ; }
01E6 L82:
01E6 .dbline 165
01E6 ; UDR0=data;
01E6 0CB9 out 0xc,R16
01E8 L83:
01E8 .dbline 167
01E8 L84:
01E8 .dbline 166
01E8 ; while(!(UCSR0A&(1<<TXC0)))
01E8 5E9B sbis 0xb,6
01EA FECF rjmp L83
01EC .dbline 168
01EC ; ;
01EC ; UCSR0A|=1<<TXC0;
01EC 5E9A sbi 0xb,6
01EE .dbline 169
01EE ; cs_485_receive();
01EE 1A9A sbi 0x3,2
01F0 .dbline -2
01F0 L73:
01F0 0E940000 xcall pop_gset1
01F4 .dbline 0 ; func end
01F4 0895 ret
01F6 .dbsym r aaa 20 I
01F6 .dbsym r i 18 c
01F6 .dbsym r data 16 c
01F6 .dbend
01F6 .dbfunc e usart_transmits _usart_transmits fV
01F6 ; bbb -> R22,R23
01F6 ; pr -> R20,R21
01F6 ; p -> R18,R19
01F6 ; n -> R16
.even
01F6 _usart_transmits::
01F6 0E940000 xcall push_gset2
01FA .dbline -1
01FA .dbline 173
01FA ; }
01FA ; //发送多个字节函数
01FA ; void usart_transmits(unsigned char n, unsigned char *p)
01FA ; {
01FA .dbline 174
01FA ; uchar *pr;int bbb=0;
01FA 6627 clr R22
01FC 7727 clr R23
01FE .dbline 175
01FE ; cs_485_send();
01FE 83B1 in R24,0x3
0200 8B7F andi R24,251
0202 83B9 out 0x3,R24
0204 .dbline 176
0204 68EE ldi R22,1000
0206 73E0 ldi R23,3
0208 L87:
0208 .dbline 176
0208 L88:
0208 .dbline 176
0208 ; for(bbb=1000;bbb>0;bbb--);//等待PB3引脚稳定
0208 6150 subi R22,1
020A 7040 sbci R23,0
020C .dbline 176
020C 2224 clr R2
020E 3324 clr R3
0210 2616 cp R2,R22
0212 3706 cpc R3,R23
0214 CCF3 brlt L87
0216 .dbline 177
0216 ; for(pr=p;pr<(p+n);pr++)
0216 A901 movw R20,R18
0218 07C0 xjmp L94
021A X0:
021A .dbline 178
021A ; {
021A L95:
021A .dbline 180
021A L96:
021A .dbline 179
021A 5D9B sbis 0xb,5
021C FECF rjmp L95
021E .dbline 181
021E FA01 movw R30,R20
0220 2080 ldd R2,z+0
0222 2CB8 out 0xc,R2
0224 .dbline 182
0224 L92:
0224 .dbline 177
0224 4F5F subi R20,255 ; offset = 1
0226 5F4F sbci R21,255
0228 L94:
0228 .dbline 177
0228 202E mov R2,R16
022A 3324 clr R3
022C 220E add R2,R18
022E 331E adc R3,R19
0230 4215 cp R20,R2
0232 5305 cpc R21,R3
0234 90F3 brlo L96
0236 L98:
0236 .dbline 184
0236 L99:
0236 .dbline 183
0236 ; while(!(UCSR0A&(1<<UDRE0)))
0236 ; ;
0236 ; UDR0= *pr;
0236 ; }
0236 ; while(!(UCSR0A&(1<<TXC0)))
0236 5E9B sbis 0xb,6
0238 FECF rjmp L98
023A .dbline 185
023A ; ;
023A ; UCSR0A|=1<<TXC0;
023A 5E9A sbi 0xb,6
023C .dbline 186
023C ; cs_485_receive();
023C 1A9A sbi 0x3,2
023E .dbline -2
023E L86:
023E 0E940000 xcall pop_gset2
0242 .dbline 0 ; func end
0242 0895 ret
0244 .dbsym r bbb 22 I
0244 .dbsym r pr 20 pc
0244 .dbsym r p 18 pc
0244 .dbsym r n 16 c
0244 .dbend
0244 .dbfunc e Usart_Receive_Data _Usart_Receive_Data fc
0244 ; j -> R20
0244 ; tcounter -> R22,R23
0244 ; flag5 -> R10,R11
.even
0244 _Usart_Receive_Data::
0244 0E940000 xcall push_gset3
0248 .dbline -1
0248 .dbline 190
0248 ; }
0248 ; //8位数据单字节接收函数Usart_Receive_Data()
0248 ; uchar Usart_Receive_Data(void)
0248 ; {
0248 .dbline 191
0248 ; int flag5=0;uchar j=0;int tcounter=0;
0248 AA24 clr R10
024A BB24 clr R11
024C .dbline 191
024C 4427 clr R20
024E .dbline 191
024E 6627 clr R22
0250 7727 clr R23
0252 19C0 xjmp L103
0254 L102:
0254 .dbline 193
0254 ; while(!(UCSR0A&(1<<RXC0)))
0254 ; {
0254 .dbline 194
0254 ; flag5++;
0254 C501 movw R24,R10
0256 0196 adiw R24,1
0258 5C01 movw R10,R24
025A .dbline 196
025A ; //wdr();
025A ; if(flag5>5000)
025A 88E8 ldi R24,5000
025C 93E1 ldi R25,19
025E 8A15 cp R24,R10
0260 9B05 cpc R25,R11
0262 34F4 brge L105
0264 .dbline 197
0264 ; {
0264 .dbline 198
0264 ; wdr();
0264 0E940000 xcall _wdr
0268 .dbline 199
0268 ; flag5=0;
0268 AA24 clr R10
026A BB24 clr R11
026C .dbline 200
026C ; tcounter++;
026C 6F5F subi R22,255 ; offset = 1
026E 7F4F sbci R23,255
0270 .dbline 201
0270 ; }
0270 L105:
0270 .dbline 202
0270 ; if(tcounter>2) //原来是3
0270 82E0 ldi R24,2
0272 90E0 ldi R25,0
0274 8617 cp R24,R22
0276 9707 cpc R25,R23
0278 34F4 brge L107
027A .dbline 203
027A ; {
027A .dbline 204
027A ; tcounter=0;
027A 6627 clr R22
027C 7727 clr R23
027E .dbline 205
027E ; errorflag=1; //最多等待50s还没有数据传上来说明节点断开
027E 81E0 ldi R24,1
0280 80930000 sts _errorflag,R24
0284 .dbline 206
0284 ; break; //errorflag 为未接受到数据 标识
0284 02C0 xjmp L104
0286 L107:
0286 .dbline 208
0286 L103:
0286 .dbline 192
0286 5F9B sbis 0xb,7
0288 E5CF rjmp L102
028A L104:
028A .dbline 209
028A ; }
028A ; }
028A ; j=UCSR0B;
028A 4AB1 in R20,0xa
028C .dbline 210
028C ; return UDR0;
028C 0CB1 in R16,0xc
028E .dbline -2
028E L101:
028E 0E940000 xcall pop_gset3
0292 .dbline 0 ; func end
0292 0895 ret
0294 .dbsym r j 20 c
0294 .dbsym r tcounter 22 I
0294 .dbsym r flag5 10 I
0294 .dbend
0294 .dbfunc e Usart2_Receive_Data _Usart2_Receive_Data fc
0294 ; j -> R20
0294 ; tcounter -> R22,R23
0294 ; flag5 -> R10,R11
.even
0294 _Usart2_Receive_Data::
0294 0E940000 xcall push_gset3
0298 .dbline -1
0298 .dbline 214
0298 ; }
0298 ; //8位数据单字节接收函数Usart2_Receive_Data() 调零专用
0298 ; uchar Usart2_Receive_Data(void)
0298 ; {
0298 .dbline 215
0298 ; int flag5=0;uchar j=0;int tcounter=0;
0298 AA24 clr R10
029A BB24 clr R11
029C .dbline 215
029C 4427 clr R20
029E .dbline 215
029E 6627 clr R22
02A0 7727 clr R23
02A2 1BC0 xjmp L111
02A4 L110:
02A4 .dbline 217
02A4 ; while(!(UCSR0A&(1<<RXC0)))
02A4 ; {
02A4 .dbline 218
02A4 ; flag5++;
02A4 C501 movw R24,R10
02A6 0196 adiw R24,1
02A8 5C01 movw R10,R24
02AA .dbline 219
02AA ; if(flag5>5000)
02AA 88E8 ldi R24,5000
02AC 93E1 ldi R25,19
02AE 8A15 cp R24,R10
02B0 9B05 cpc R25,R11
02B2 34F4 brge L113
02B4 .dbline 220
02B4 ; {
02B4 .dbline 221
02B4 ; wdr();
02B4 0E940000 xcall _wdr
02B8 .dbline 222
02B8 ; flag5=0;
02B8 AA24 clr R10
02BA BB24 clr R11
02BC .dbline 223
02BC ; tcounter++;
02BC 6F5F subi R22,255 ; offset = 1
02BE 7F4F sbci R23,255
02C0 .dbline 224
02C0 ; }
02C0 L113:
02C0 .dbline 225
02C0 ; if(tcounter>500) //
02C0 84EF ldi R24,500
02C2 91E0 ldi R25,1
02C4 8617 cp R24,R22
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -