📄 communication.lis
字号:
00A0 .dbline 85
00A0 ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
00A0 C09A sbi 0x18,0
00A2 .dbline 86
00A2 ; return (spidata);
00A2 042F mov R16,R20
00A4 .dbline -2
00A4 L31:
00A4 0E940000 xcall pop_gset1
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbsym r spidata 20 c
00AA .dbsym r adress 16 c
00AA .dbend
00AA .dbfunc e bit_modify _bit_modify fV
00AA ; value -> R20
00AA ; cc -> R18
00AA ; adress -> R16
.even
00AA _bit_modify::
00AA 0E940000 xcall push_gset1
00AE 4A81 ldd R20,y+2
00B0 .dbline -1
00B0 .dbline 90
00B0 ; }
00B0 ; //位调整函数
00B0 ; void bit_modify(unsigned char adress,unsigned char cc, unsigned char value)
00B0 ; {
00B0 .dbline 91
00B0 ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
00B0 C098 cbi 0x18,0
00B2 .dbline 92
00B2 ; SPDR=0x05; // bit modify Write command
00B2 85E0 ldi R24,5
00B4 8FB9 out 0xf,R24
00B6 L42:
00B6 .dbline 93
00B6 L43:
00B6 .dbline 93
00B6 ; while(!(SPSR & (1<<SPIF))); //
00B6 779B sbis 0xe,7
00B8 FECF rjmp L42
00BA .dbline 94
00BA ; SPDR=adress; // sende Write command
00BA 0FB9 out 0xf,R16
00BC L45:
00BC .dbline 95
00BC L46:
00BC .dbline 95
00BC ; while(!(SPSR & (1<<SPIF))); //
00BC 779B sbis 0xe,7
00BE FECF rjmp L45
00C0 .dbline 96
00C0 ; SPDR=cc; // sende Write command
00C0 2FB9 out 0xf,R18
00C2 L48:
00C2 .dbline 97
00C2 L49:
00C2 .dbline 97
00C2 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
00C2 779B sbis 0xe,7
00C4 FECF rjmp L48
00C6 .dbline 98
00C6 ; SPDR=value; // sende Write command
00C6 4FB9 out 0xf,R20
00C8 L51:
00C8 .dbline 99
00C8 L52:
00C8 .dbline 99
00C8 ; while(!(SPSR & (1<<SPIF))); //
00C8 779B sbis 0xe,7
00CA FECF rjmp L51
00CC .dbline 100
00CC ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
00CC C09A sbi 0x18,0
00CE .dbline -2
00CE L41:
00CE 0E940000 xcall pop_gset1
00D2 .dbline 0 ; func end
00D2 0895 ret
00D4 .dbsym r value 20 c
00D4 .dbsym r cc 18 c
00D4 .dbsym r adress 16 c
00D4 .dbend
00D4 .dbfunc e send_box_0 _send_box_0 fV
.even
00D4 _send_box_0::
00D4 .dbline -1
00D4 .dbline 104
00D4 ; }
00D4 ; //发送缓冲器0
00D4 ; void send_box_0(void) //此处好像应该加发送缓冲器空标志查询!!!!!
00D4 ; {
00D4 .dbline 105
00D4 ; write_MCP (TXB0CTRL, 0x0B); // sende Telegramm mit h鯿hster Priori
00D4 2BE0 ldi R18,11
00D6 00E3 ldi R16,48
00D8 C7DF xcall _write_MCP
00DA .dbline 107
00DA ; //0x0B--缓冲区等待报文发送,最高的报文发送优先级
00DA ; PORTB&=~(1<<CS_CAN); // CS Low -> MCP enable
00DA C098 cbi 0x18,0
00DC .dbline 108
00DC ; SPDR=(RTS | 0x01); // sende Mailbox Nummer 0
00DC 81E8 ldi R24,129
00DE 8FB9 out 0xf,R24
00E0 L55:
00E0 .dbline 109
00E0 L56:
00E0 .dbline 109
00E0 ; while(!(SPSR & (1<<SPIF))); // warten bis das Byte gesendet wurde
00E0 779B sbis 0xe,7
00E2 FECF rjmp L55
00E4 .dbline 110
00E4 ; PORTB|=(1<<CS_CAN); // CS High -> MCP disable
00E4 C09A sbi 0x18,0
00E6 .dbline -2
00E6 L54:
00E6 .dbline 0 ; func end
00E6 0895 ret
00E8 .dbend
00E8 .dbfunc e remotesend _remotesend fV
00E8 ; id_addr -> R20
.even
00E8 _remotesend::
00E8 0E940000 xcall push_gset1
00EC 402F mov R20,R16
00EE .dbline -1
00EE .dbline 114
00EE ; }
00EE ; //数据请求数据帧函数
00EE ; void remotesend(uchar id_addr)
00EE ; {
00EE .dbline 115
00EE ; NOP();
00EE 0000 nop
00F0 .dbline 116
00F0 ; write_MCP(TXB0SIDH,id_addr);//接收方的地址,
00F0 242F mov R18,R20
00F2 01E3 ldi R16,49
00F4 B9DF xcall _write_MCP
00F6 .dbline 118
00F6 ; // write_MCP(TXB0SIDL,0x48); //扩展帧格式 且4就表示是发送请求命令
00F6 ; write_MCP(TXB0SIDL,0xc8); //扩展帧格式 且4就表示是发送请求命令
00F6 28EC ldi R18,200
00F8 02E3 ldi R16,50
00FA B6DF xcall _write_MCP
00FC .dbline 119
00FC ; write_MCP(TXB0EID8,0x00); //标识发送方地址主控制器为0x00
00FC 2227 clr R18
00FE 03E3 ldi R16,51
0100 B3DF xcall _write_MCP
0102 .dbline 120
0102 ; write_MCP(TXB0EID0,0x00); //
0102 2227 clr R18
0104 04E3 ldi R16,52
0106 B0DF xcall _write_MCP
0108 .dbline 121
0108 ; write_MCP(TXB0DLC, 0x08); //发送8个字节
0108 28E0 ldi R18,8
010A 05E3 ldi R16,53
010C ADDF xcall _write_MCP
010E .dbline 122
010E ; write_MCP(TXB0D0, 0x00); //
010E 2227 clr R18
0110 06E3 ldi R16,54
0112 AADF xcall _write_MCP
0114 .dbline 123
0114 ; write_MCP(TXB0D1, 0x00); //
0114 2227 clr R18
0116 07E3 ldi R16,55
0118 A7DF xcall _write_MCP
011A .dbline 124
011A ; write_MCP(TXB0D2, 0x00); //
011A 2227 clr R18
011C 08E3 ldi R16,56
011E A4DF xcall _write_MCP
0120 .dbline 125
0120 ; write_MCP(TXB0D3, 0x00); //
0120 2227 clr R18
0122 09E3 ldi R16,57
0124 A1DF xcall _write_MCP
0126 .dbline 126
0126 ; write_MCP(TXB0D4, 0x00); //
0126 2227 clr R18
0128 0AE3 ldi R16,58
012A 9EDF xcall _write_MCP
012C .dbline 127
012C ; write_MCP(TXB0D5, 0x00); //
012C 2227 clr R18
012E 0BE3 ldi R16,59
0130 9BDF xcall _write_MCP
0132 .dbline 128
0132 ; write_MCP(TXB0D6, 0x00); //
0132 2227 clr R18
0134 0CE3 ldi R16,60
0136 98DF xcall _write_MCP
0138 .dbline 129
0138 ; write_MCP(TXB0D7, 0x00);
0138 2227 clr R18
013A 0DE3 ldi R16,61
013C 95DF xcall _write_MCP
013E .dbline 130
013E ; send_box_0();
013E CADF xcall _send_box_0
0140 .dbline 131
0140 ; NOP();
0140 0000 nop
0142 .dbline -2
0142 L58:
0142 0E940000 xcall pop_gset1
0146 .dbline 0 ; func end
0146 0895 ret
0148 .dbsym r id_addr 20 c
0148 .dbend
0148 .dbfunc e fill_msg_box_0 _fill_msg_box_0 fV
.even
0148 _fill_msg_box_0::
0148 .dbline -1
0148 .dbline 135
0148 ; }
0148 ; //装载报文 TXB0
0148 ; void fill_msg_box_0(void)
0148 ; {
0148 .dbline 136
0148 ; tx_buff[9]=8;
0148 88E0 ldi R24,8
014A 80935200 sts _tx_buff+9,R24
014E .dbline 137
014E ; write_MCP(TXB0SIDH,tx_buff[1]); //接收方的地址
014E 20914A00 lds R18,_tx_buff+1
0152 01E3 ldi R16,49
0154 89DF xcall _write_MCP
0156 .dbline 138
0156 ; write_MCP(TXB0SIDL,tx_buff[7]); //扩展帧格式
0156 20915000 lds R18,_tx_buff+7
015A 02E3 ldi R16,50
015C 85DF xcall _write_MCP
015E .dbline 139
015E ; write_MCP(TXB0EID8,tx_buff[8]); //标识发送方地址
015E 20915100 lds R18,_tx_buff+8
0162 03E3 ldi R16,51
0164 81DF xcall _write_MCP
0166 .dbline 140
0166 ; write_MCP(TXB0EID0,tx_buff[2]); //485节点地址
0166 20914B00 lds R18,_tx_buff+2
016A 04E3 ldi R16,52
016C 7DDF xcall _write_MCP
016E .dbline 141
016E ; write_MCP(TXB0DLC, tx_buff[9]); //发送8个字节
016E 20915200 lds R18,_tx_buff+9
0172 05E3 ldi R16,53
0174 79DF xcall _write_MCP
0176 .dbline 142
0176 ; write_MCP(TXB0D0, tx_buff[2]); //485NA节点地址
0176 20914B00 lds R18,_tx_buff+2
017A 06E3 ldi R16,54
017C 75DF xcall _write_MCP
017E .dbline 143
017E ; write_MCP(TXB0D1, tx_buff[0]); //命令字节
017E 20914900 lds R18,_tx_buff
0182 07E3 ldi R16,55
0184 71DF xcall _write_MCP
0186 .dbline 144
0186 ; write_MCP(TXB0D2, tx_buff[3]); //高报点高字节
0186 20914C00 lds R18,_tx_buff+3
018A 08E3 ldi R16,56
018C 6DDF xcall _write_MCP
018E .dbline 145
018E ; write_MCP(TXB0D3, tx_buff[4]); //高报点低字节
018E 20914D00 lds R18,_tx_buff+4
0192 09E3 ldi R16,57
0194 69DF xcall _write_MCP
0196 .dbline 146
0196 ; write_MCP(TXB0D4, tx_buff[5]); //低报点高字节
0196 20914E00 lds R18,_tx_buff+5
019A 0AE3 ldi R16,58
019C 65DF xcall _write_MCP
019E .dbline 147
019E ; write_MCP(TXB0D5, tx_buff[6]); //低报点低字节
019E 20914F00 lds R18,_tx_buff+6
01A2 0BE3 ldi R16,59
01A4 61DF xcall _write_MCP
01A6 .dbline 148
01A6 ; write_MCP(TXB0D6, tx_buff[10]); //校验
01A6 20915300 lds R18,_tx_buff+10
01AA 0CE3 ldi R16,60
01AC 5DDF xcall _write_MCP
01AE .dbline 149
01AE ; write_MCP(TXB0D7, tx_buff[11]);
01AE 20915400 lds R18,_tx_buff+11
01B2 0DE3 ldi R16,61
01B4 59DF xcall _write_MCP
01B6 .dbline -2
01B6 L59:
01B6 .dbline 0 ; func end
01B6 0895 ret
01B8 .dbend
01B8 .dbfunc e Usart_Transmit_Data _Usart_Transmit_Data fV
01B8 ; aaa -> R20,R21
01B8 ; i -> R18
01B8 ; data -> R16
.even
01B8 _Usart_Transmit_Data::
01B8 0E940000 xcall push_gset1
01BC .dbline -1
01BC .dbline 153
01BC ; }
01BC ; //485收发函数
01BC ; void Usart_Transmit_Data(uchar data,uchar i)
01BC ; {
01BC .dbline 154
01BC ; int aaa=0;
01BC 4427 clr R20
01BE 5527 clr R21
01C0 .dbline 155
01C0 ; cs_485_send();
01C0 83B1 in R24,0x3
01C2 8B7F andi R24,251
01C4 83B9 out 0x3,R24
01C6 .dbline 156
01C6 48EE ldi R20,1000
01C8 53E0 ldi R21,3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -