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

📄 boat.lis

📁 AVR单片机开发的键盘处理程序C源代码希望对单片机初学选手有点帮助
💻 LIS
📖 第 1 页 / 共 5 页
字号:
 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 + -