📄 boat.lis
字号:
00FC _uart0_init::
00FC .dbline -1
00FC .dbline 142
00FC ;
00FC ; //UART0 initialisation
00FC ; // desired baud rate: 9600
00FC ; // actual: baud rate:9615 (0.2%)
00FC ; // char size: 8 bit
00FC ; // parity: Disabled
00FC ; void uart0_init(void)
00FC ; {
00FC .dbline 143
00FC ; UCSRB = 0x00; //disable while setting baud rate
00FC 2224 clr R2
00FE 2AB8 out 0xa,R2
0100 .dbline 144
0100 ; UCSRA = 0x00;
0100 2BB8 out 0xb,R2
0102 .dbline 145
0102 ; UCSRC = 0x86;
0102 86E8 ldi R24,134
0104 80BD out 0x20,R24
0106 .dbline 146
0106 ; UBRRL = 0x00; //set baud rate lo
0106 29B8 out 0x9,R2
0108 .dbline 147
0108 ; UBRRH = 0x00; //set baud rate hi
0108 20BC out 0x20,R2
010A .dbline 148
010A ; UCSRB = 0x98;
010A 88E9 ldi R24,152
010C 8AB9 out 0xa,R24
010E .dbline -2
010E .dbline 149
010E ; }
010E L20:
010E .dbline 0 ; func end
010E 0895 ret
0110 .dbend
.area vector(rom, abs)
.org 16
0010 0C948800 jmp _timer2_ovf_isr
.area text(rom, con, rel)
0110 .dbfile G:\汽艇\source\key_board\boat.c
0110 .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
.even
0110 _timer2_ovf_isr::
0110 0E940000 xcall push_lset
0114 .dbline -1
0114 .dbline 153
0114 ;
0114 ; #pragma interrupt_handler timer2_ovf_isr:5
0114 ; void timer2_ovf_isr(void)
0114 ; {
0114 .dbline 154
0114 ; TCNT2 = 0x83; //reload counter value
0114 83E8 ldi R24,131
0116 84BD out 0x24,R24
0118 .dbline 155
0118 ; delay_counter ++; //用于毫秒级延时
0118 80912B00 lds R24,_delay_counter
011C 90912C00 lds R25,_delay_counter+1
0120 0196 adiw R24,1
0122 90932C00 sts _delay_counter+1,R25
0126 80932B00 sts _delay_counter,R24
012A .dbline 157
012A ;
012A ; pwm_ctrler( &l_trap, &r_trap );
012A 20E0 ldi R18,<_r_trap
012C 30E0 ldi R19,>_r_trap
012E 00E0 ldi R16,<_l_trap
0130 10E0 ldi R17,>_l_trap
0132 A7D0 xcall _pwm_ctrler
0134 .dbline -2
0134 .dbline 158
0134 ; }
0134 L21:
0134 0E940000 xcall pop_lset
0138 .dbline 0 ; func end
0138 1895 reti
013A .dbend
.area vector(rom, abs)
.org 44
002C 0C949D00 jmp _uart0_rx_isr
.area text(rom, con, rel)
013A .dbfile G:\汽艇\source\key_board\boat.c
013A .dbfunc e uart0_rx_isr _uart0_rx_isr fV
013A ; command -> R10
013A ; dataLen -> R20
013A ; i -> R22
.even
013A _uart0_rx_isr::
013A 0E940000 xcall push_lset
013E 0E940000 xcall push_gset3
0142 .dbline -1
0142 .dbline 162
0142 ;
0142 ; #pragma interrupt_handler uart0_rx_isr:12
0142 ; void uart0_rx_isr(void)
0142 ; {
0142 .dbline 165
0142 ; uchar command,dataLen;
0142 ; uchar i;
0142 ; CLI();
0142 F894 cli
0144 .dbline 166
0144 ; command = UDR;
0144 ACB0 in R10,0xc
0146 .dbline 167
0146 ; if ( command== 0x01 ){
0146 8A2D mov R24,R10
0148 8130 cpi R24,1
014A 99F5 brne L23
014C .dbline 167
014C L25:
014C .dbline 168
014C L26:
014C .dbline 168
014C ; while( !( UCSRA & BIT( RXC ) ) );
014C 5F9B sbis 0xb,7
014E FECF rjmp L25
0150 .dbline 169
0150 ; dataLen = UDR;
0150 4CB1 in R20,0xc
0152 .dbline 170
0152 6627 clr R22
0154 0BC0 xjmp L31
0156 X0:
0156 .dbline 170
0156 ; for( i = 0; i < dataLen; i ++ ){
0156 L32:
0156 .dbline 171
0156 L33:
0156 .dbline 171
0156 5F9B sbis 0xb,7
0158 FECF rjmp L32
015A .dbline 172
015A 80E0 ldi R24,<_rbuf
015C 90E0 ldi R25,>_rbuf
015E E62F mov R30,R22
0160 FF27 clr R31
0162 E80F add R30,R24
0164 F91F adc R31,R25
0166 2CB0 in R2,0xc
0168 2082 std z+0,R2
016A .dbline 173
016A L29:
016A .dbline 170
016A 6395 inc R22
016C L31:
016C .dbline 170
016C 6417 cp R22,R20
016E 98F3 brlo L33
0170 .dbline 175
0170 ; while( !( UCSRA & BIT( RXC ) ) );
0170 ; rbuf[i] = UDR;
0170 ; }
0170 ; //------------接收数据实时处理区--------------
0170 ; key_status = 0;
0170 2224 clr R2
0172 3324 clr R3
0174 30920200 sts _key_status+1,R3
0178 20920100 sts _key_status,R2
017C .dbline 176
017C ; key_status &= rbuf[0];
017C 20900300 lds R2,_rbuf
0180 3324 clr R3
0182 40900100 lds R4,_key_status
0186 50900200 lds R5,_key_status+1
018A 4220 and R4,R2
018C 5320 and R5,R3
018E 50920200 sts _key_status+1,R5
0192 40920100 sts _key_status,R4
0196 .dbline 177
0196 ; key_status &= rbuf[1] << 8;
0196 20900400 lds R2,_rbuf+1
019A 3324 clr R3
019C 322C mov R3,R2
019E 2224 clr R2
01A0 4220 and R4,R2
01A2 5320 and R5,R3
01A4 50920200 sts _key_status+1,R5
01A8 40920100 sts _key_status,R4
01AC .dbline 178
01AC ; key_process( key_status );
01AC 8201 movw R16,R4
01AE 8DD2 xcall _key_process
01B0 .dbline 180
01B0 56C0 xjmp L24
01B2 L23:
01B2 .dbline 180
01B2 ; //--------------------------------------------
01B2 ; } else if ( command == 0x02 ){
01B2 8A2D mov R24,R10
01B4 8230 cpi R24,2
01B6 09F0 breq X2
01B8 52C0 xjmp L36
01BA X2:
01BA .dbline 180
01BA .dbline 182
01BA ; //----------发送实时处理区---------
01BA ; if ( l_trap.real_speed < 0 ) tbuf[0] = 1;
01BA 80913F00 lds R24,_l_trap+2
01BE 90914000 lds R25,_l_trap+2+1
01C2 8030 cpi R24,0
01C4 E0E0 ldi R30,0
01C6 9E07 cpc R25,R30
01C8 24F4 brge L38
01CA .dbline 182
01CA 81E0 ldi R24,1
01CC 80931700 sts _tbuf,R24
01D0 03C0 xjmp L39
01D2 L38:
01D2 .dbline 183
01D2 ; else tbuf[0] = 0;
01D2 2224 clr R2
01D4 20921700 sts _tbuf,R2
01D8 L39:
01D8 .dbline 184
01D8 ; tbuf[1] = (uchar)( l_trap.real_speed & 0x00FF );
01D8 80913F00 lds R24,_l_trap+2
01DC 90914000 lds R25,_l_trap+2+1
01E0 9070 andi R25,0
01E2 80931800 sts _tbuf+1,R24
01E6 .dbline 185
01E6 ; tbuf[2] = (uchar)( l_trap.real_speed >> 8 );
01E6 20903F00 lds R2,_l_trap+2
01EA 30904000 lds R3,_l_trap+2+1
01EE 232C mov R2,R3
01F0 3324 clr R3
01F2 27FC sbrc R2,7
01F4 3094 com R3
01F6 20921900 sts _tbuf+2,R2
01FA .dbline 186
01FA ; if ( r_trap.real_speed < 0 ) tbuf[3] = 1;
01FA 80913300 lds R24,_r_trap+2
01FE 90913400 lds R25,_r_trap+2+1
0202 8030 cpi R24,0
0204 E0E0 ldi R30,0
0206 9E07 cpc R25,R30
0208 24F4 brge L45
020A .dbline 186
020A 81E0 ldi R24,1
020C 80931A00 sts _tbuf+3,R24
0210 03C0 xjmp L46
0212 L45:
0212 .dbline 187
0212 ; else tbuf[3] = 0;
0212 2224 clr R2
0214 20921A00 sts _tbuf+3,R2
0218 L46:
0218 .dbline 188
0218 ; tbuf[4] = (uchar)( r_trap.real_speed & 0x00FF );
0218 80913300 lds R24,_r_trap+2
021C 90913400 lds R25,_r_trap+2+1
0220 9070 andi R25,0
0222 80931B00 sts _tbuf+4,R24
0226 .dbline 189
0226 ; tbuf[5] = (uchar)( r_trap.real_speed >> 8 );
0226 20903300 lds R2,_r_trap+2
022A 30903400 lds R3,_r_trap+2+1
022E 232C mov R2,R3
0230 3324 clr R3
0232 27FC sbrc R2,7
0234 3094 com R3
0236 20921C00 sts _tbuf+5,R2
023A L54:
023A .dbline 191
023A L55:
023A .dbline 191
023A ; //---------------------------------
023A ; while( !( UCSRA & BIT( RXC ) ) );
023A 5F9B sbis 0xb,7
023C FECF rjmp L54
023E .dbline 192
023E ; dataLen = UDR;
023E 4CB1 in R20,0xc
0240 .dbline 193
0240 6627 clr R22
0242 0BC0 xjmp L60
0244 X1:
0244 .dbline 193
0244 ; for( i = 0; i < dataLen; i ++ ){
0244 L61:
0244 .dbline 194
0244 L62:
0244 .dbline 194
0244 5D9B sbis 0xb,5
0246 FECF rjmp L61
0248 .dbline 195
0248 80E0 ldi R24,<_tbuf
024A 90E0 ldi R25,>_tbuf
024C E62F mov R30,R22
024E FF27 clr R31
0250 E80F add R30,R24
0252 F91F adc R31,R25
0254 2080 ldd R2,z+0
0256 2CB8 out 0xc,R2
0258 .dbline 196
0258 L58:
0258 .dbline 193
0258 6395 inc R22
025A L60:
025A .dbline 193
025A 6417 cp R22,R20
025C 98F3 brlo L62
025E .dbline 197
025E ; while( !( UCSRA & BIT( UDRE ) ) );
025E ; UDR = tbuf[i];
025E ; }
025E ; }
025E L36:
025E L24:
025E .dbline 198
025E ; SEI();
025E 7894 sei
0260 .dbline -2
0260 .dbline 199
0260 ; }
0260 L22:
0260 0E940000 xcall pop_gset3
0264 0E940000 xcall pop_lset
0268 .dbline 0 ; func end
0268 1895 reti
026A .dbsym r command 10 c
026A .dbsym r dataLen 20 c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -