📄 keyboard.lis
字号:
01CE _init_devices::
01CE .dbline -1
01CE .dbline 154
01CE ; }
01CE ;
01CE ; //call this routine to initialise all peripherals
01CE ; void init_devices(void)
01CE ; {
01CE .dbline 156
01CE ; //stop errant interrupts until set up
01CE ; CLI(); //disable all interrupts
01CE F894 cli
01D0 .dbline 157
01D0 ; port_init();
01D0 B3DF xcall _port_init
01D2 .dbline 158
01D2 ; timer0_init();
01D2 C0DF xcall _timer0_init
01D4 .dbline 159
01D4 ; uart0_init();
01D4 EEDF xcall _uart0_init
01D6 .dbline 162
01D6 ; //watchdog_init();
01D6 ;
01D6 ; MCUCR = 0x00;
01D6 2224 clr R2
01D8 25BE out 0x35,R2
01DA .dbline 163
01DA ; GICR = 0x00;
01DA 2BBE out 0x3b,R2
01DC .dbline 164
01DC ; TIMSK = 0x01; //timer interrupt sources
01DC 81E0 ldi R24,1
01DE 89BF out 0x39,R24
01E0 .dbline 165
01E0 ; SEI(); //re-enable interrupts
01E0 7894 sei
01E2 .dbline -2
01E2 L73:
01E2 .dbline 0 ; func end
01E2 0895 ret
01E4 .dbend
01E4 .dbfunc e send_num _send_num fV
01E4 ; num -> R20
01E4 ; index -> R22
.even
01E4 _send_num::
01E4 0E940000 xcall push_gset2
01E8 422F mov R20,R18
01EA 602F mov R22,R16
01EC .dbline -1
01EC .dbline 171
01EC ; //all peripherals are now initialised
01EC ; }
01EC ;
01EC ; //显示
01EC ; void send_num( uchar index, uchar num )
01EC ; {
01EC .dbline 172
01EC ; PORTB = ~BIT( index );
01EC 01E0 ldi R16,1
01EE 162F mov R17,R22
01F0 0E940000 xcall lsl8
01F4 202E mov R2,R16
01F6 2094 com R2
01F8 28BA out 0x18,R2
01FA .dbline 173
01FA ; if( index <= 7 ) { PORTA = num_table[num]; }
01FA 87E0 ldi R24,7
01FC 8617 cp R24,R22
01FE 48F0 brlo L75
0200 .dbline 173
0200 .dbline 173
0200 80E0 ldi R24,<_num_table
0202 90E0 ldi R25,>_num_table
0204 E42F mov R30,R20
0206 FF27 clr R31
0208 E80F add R30,R24
020A F91F adc R31,R25
020C E491 lpm R30,Z
020E EBBB out 0x1b,R30
0210 .dbline 173
0210 01C0 xjmp L76
0212 L75:
0212 .dbline 174
0212 ; else { PORTA = num; }
0212 .dbline 174
0212 4BBB out 0x1b,R20
0214 .dbline 174
0214 L76:
0214 .dbline 175
0214 ; delay( 1 );
0214 01E0 ldi R16,1
0216 10E0 ldi R17,0
0218 F3DE xcall _delay
021A .dbline -2
021A L74:
021A 0E940000 xcall pop_gset2
021E .dbline 0 ; func end
021E 0895 ret
0220 .dbsym r num 20 c
0220 .dbsym r index 22 c
0220 .dbend
0220 .dbfunc e send_char _send_char fV
0220 ; ch -> R20
0220 ; index -> R22
.even
0220 _send_char::
0220 0E940000 xcall push_gset2
0224 422F mov R20,R18
0226 602F mov R22,R16
0228 .dbline -1
0228 .dbline 179
0228 ; }
0228 ;
0228 ; void send_char( uchar index, uchar ch )
0228 ; {
0228 .dbline 180
0228 ; PORTB = ~BIT( index );
0228 01E0 ldi R16,1
022A 162F mov R17,R22
022C 0E940000 xcall lsl8
0230 202E mov R2,R16
0232 2094 com R2
0234 28BA out 0x18,R2
0236 .dbline 181
0236 ; PORTA = ch;
0236 4BBB out 0x1b,R20
0238 .dbline 182
0238 ; delay(1);
0238 01E0 ldi R16,1
023A 10E0 ldi R17,0
023C E1DE xcall _delay
023E .dbline -2
023E L77:
023E 0E940000 xcall pop_gset2
0242 .dbline 0 ; func end
0242 0895 ret
0244 .dbsym r ch 20 c
0244 .dbsym r index 22 c
0244 .dbend
0244 .dbfunc e display _display fV
.even
0244 _display::
0244 .dbline -1
0244 .dbline 186
0244 ; }
0244 ;
0244 ; void display( void )
0244 ; {
0244 .dbline 187
0244 ; l_des_speed = ( rbuf[2] << 8 ) + rbuf[1];
0244 20900700 lds R2,_rbuf+1
0248 30900800 lds R3,_rbuf+2
024C 30920500 sts _l_des_speed+1,R3
0250 20920400 sts _l_des_speed,R2
0254 .dbline 188
0254 ; r_des_speed = ( rbuf[5] << 8 ) + rbuf[4];
0254 20900A00 lds R2,_rbuf+4
0258 30900B00 lds R3,_rbuf+5
025C 30920300 sts _r_des_speed+1,R3
0260 20920200 sts _r_des_speed,R2
0264 .dbline 189
0264 ; if ( rbuf[0] == 1 ){
0264 80910600 lds R24,_rbuf
0268 8130 cpi R24,1
026A 19F4 brne L83
026C .dbline 189
026C .dbline 190
026C ; send_char( 7, 0x40 ); //显示'-'
026C 20E4 ldi R18,64
026E 07E0 ldi R16,7
0270 D7DF xcall _send_char
0272 .dbline 191
0272 ; }
0272 L83:
0272 .dbline 192
0272 ; if ( ( l_des_speed > 99 ) && ( l_des_speed < 999 ) ){
0272 83E6 ldi R24,99
0274 90E0 ldi R25,0
0276 20900400 lds R2,_l_des_speed
027A 30900500 lds R3,_l_des_speed+1
027E 8215 cp R24,R2
0280 9305 cpc R25,R3
0282 88F4 brsh L85
0284 C101 movw R24,R2
0286 873E cpi R24,231
0288 E3E0 ldi R30,3
028A 9E07 cpc R25,R30
028C 60F4 brsh L85
028E .dbline 192
028E .dbline 193
028E ; send_num( 6, l_des_speed / 100 % 10 );
028E 24E6 ldi R18,100
0290 30E0 ldi R19,0
0292 8C01 movw R16,R24
0294 0E940000 xcall div16u
0298 2AE0 ldi R18,10
029A 30E0 ldi R19,0
029C 0E940000 xcall mod16u
02A0 202F mov R18,R16
02A2 06E0 ldi R16,6
02A4 9FDF xcall _send_num
02A6 .dbline 194
02A6 ; }
02A6 L85:
02A6 .dbline 195
02A6 ; send_num( 5, (l_des_speed / 10) % 10 );
02A6 2AE0 ldi R18,10
02A8 30E0 ldi R19,0
02AA 00910400 lds R16,_l_des_speed
02AE 10910500 lds R17,_l_des_speed+1
02B2 0E940000 xcall div16u
02B6 2AE0 ldi R18,10
02B8 30E0 ldi R19,0
02BA 0E940000 xcall mod16u
02BE 202F mov R18,R16
02C0 05E0 ldi R16,5
02C2 90DF xcall _send_num
02C4 .dbline 196
02C4 ; send_num( 4, l_des_speed % 10 );
02C4 2AE0 ldi R18,10
02C6 30E0 ldi R19,0
02C8 00910400 lds R16,_l_des_speed
02CC 10910500 lds R17,_l_des_speed+1
02D0 0E940000 xcall mod16u
02D4 202F mov R18,R16
02D6 04E0 ldi R16,4
02D8 85DF xcall _send_num
02DA .dbline 197
02DA ; if ( rbuf[3] == 1 ){
02DA 80910900 lds R24,_rbuf+3
02DE 8130 cpi R24,1
02E0 19F4 brne L87
02E2 .dbline 197
02E2 .dbline 198
02E2 ; send_char( 3, 0x40 ); //显示'-'
02E2 20E4 ldi R18,64
02E4 03E0 ldi R16,3
02E6 9CDF xcall _send_char
02E8 .dbline 199
02E8 ; }
02E8 L87:
02E8 .dbline 200
02E8 ; if ( ( r_des_speed > 99 ) && ( r_des_speed < 999 ) ){
02E8 83E6 ldi R24,99
02EA 90E0 ldi R25,0
02EC 20900200 lds R2,_r_des_speed
02F0 30900300 lds R3,_r_des_speed+1
02F4 8215 cp R24,R2
02F6 9305 cpc R25,R3
02F8 88F4 brsh L90
02FA C101 movw R24,R2
02FC 873E cpi R24,231
02FE E3E0 ldi R30,3
0300 9E07 cpc R25,R30
0302 60F4 brsh L90
0304 .dbline 200
0304 .dbline 201
0304 ; send_num( 2, r_des_speed / 100 % 10 );
0304 24E6 ldi R18,100
0306 30E0 ldi R19,0
0308 8C01 movw R16,R24
030A 0E940000 xcall div16u
030E 2AE0 ldi R18,10
0310 30E0 ldi R19,0
0312 0E940000 xcall mod16u
0316 202F mov R18,R16
0318 02E0 ldi R16,2
031A 64DF xcall _send_num
031C .dbline 202
031C ; }
031C L90:
031C .dbline 203
031C ; send_num( 1, (r_des_speed / 10) % 10 );
031C 2AE0 ldi R18,10
031E 30E0 ldi R19,0
0320 00910200 lds R16,_r_des_speed
0324 10910300 lds R17,_r_des_speed+1
0328 0E940000 xcall div16u
032C 2AE0 ldi R18,10
032E 30E0 ldi R19,0
0330 0E940000 xcall mod16u
0334 202F mov R18,R16
0336 01E0 ldi R16,1
0338 55DF xcall _send_num
033A .dbline 204
033A ; send_num( 0, r_des_speed % 10 );
033A 2AE0 ldi R18,10
033C 30E0 ldi R19,0
033E 00910200 lds R16,_r_des_speed
0342 10910300 lds R17,_r_des_speed+1
0346 0E940000 xcall mod16u
034A 202F mov R18,R16
034C 0027 clr R16
034E 4ADF xcall _send_num
0350 .dbline -2
0350 L78:
0350 .dbline 0 ; func end
0350 0895 ret
0352 .dbend
0352 .dbfunc e reset_ctrl _reset_ctrl fV
0352 ; i -> R16
.even
0352 _reset_ctrl::
0352 .dbline -1
0352 .dbline 208
0352 ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -