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

📄 communication.lis

📁 基于PIC单片机
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -