📄 jianpan.s
字号:
; {
.dbline 207
; WDR(); //this prevents a timout on enabling
wdr
.dbline 208
; WDTCR = 0x0A; //WATCHDOG ENABLED - dont forget to issue WDRs
ldi R24,10
out 0x21,R24
.dbline -2
.dbline 209
; }
L43:
.dbline 0 ; func end
ret
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 213
;
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
.dbline 215
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 216
; port_init();
xcall _port_init
.dbline 217
; timer0_init();
xcall _timer0_init
.dbline 218
; uart0_init();
xcall _uart0_init
.dbline 221
; //watchdog_init();
;
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 222
; GICR = 0x00;
out 0x3b,R2
.dbline 223
; TIMSK = 0x01; //timer interrupt sources
ldi R24,1
out 0x39,R24
.dbline 224
; SEI(); //re-enable interrupts
sei
.dbline -2
.dbline 226
; //all peripherals are now initialised
; }
L44:
.dbline 0 ; func end
ret
.dbend
.dbfunc e display _display fV
; tmp -> R20,R21
.even
_display::
xcall push_gset2
.dbline -1
.dbline 229
; //显示
; void display( void )
; {
.dbline 231
; uint tmp;
; send( 7, mode );
lds R18,_mode
ldi R16,7
xcall _send
.dbline 232
; tmp=numL;
.dbline 233
; switch( NumBitL )
lds R20,_numL
lds R21,_numL+1
lds R22,_NumBitL
clr R23
cpi R22,1
ldi R30,0
cpc R23,R30
brne X3
xjmp L53
X3:
cpi R22,2
ldi R30,0
cpc R23,R30
brne X4
xjmp L52
X4:
cpi R22,3
ldi R30,0
cpc R23,R30
brne X5
xjmp L51
X5:
cpi R22,4
ldi R30,0
cpc R23,R30
brne X6
xjmp L50
X6:
cpi R22,5
ldi R30,0
cpc R23,R30
breq L49
xjmp L46
X1:
.dbline 234
; {
L49:
.dbline 235
; case 5: send( 0, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall mod16u
mov R18,R16
clr R16
xcall _send
.dbline 236
; tmp=tmp/10;
.dbline 237
; send( 1, tmp% 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,1
xcall _send
.dbline 238
; tmp=tmp/10;
.dbline 239
; send( 2, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,2
xcall _send
.dbline 240
; tmp=tmp/10;
.dbline 241
; send( 3, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,3
xcall _send
.dbline 242
; tmp=tmp/10;
.dbline 243
; send( 4, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,4
xcall _send
.dbline 244
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline 245
; break;
xjmp L47
L50:
.dbline 246
; case 4:send( 0, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall mod16u
mov R18,R16
clr R16
xcall _send
.dbline 247
; tmp=tmp/10;
.dbline 248
; send( 1, tmp% 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,1
xcall _send
.dbline 249
; tmp/=10;
.dbline 250
; send( 2, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,2
xcall _send
.dbline 251
; tmp/=10;
.dbline 252
; send( 3, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,3
xcall _send
.dbline 253
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline 254
; break;
xjmp L47
L51:
.dbline 255
; case 3: send( 0, numL % 10 );
ldi R18,10
ldi R19,0
lds R16,_numL
lds R17,_numL+1
xcall mod16u
mov R18,R16
clr R16
xcall _send
.dbline 256
; tmp=numL/10;
.dbline 257
; send( 1, tmp% 10 );
ldi R18,10
ldi R19,0
lds R16,_numL
lds R17,_numL+1
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,1
xcall _send
.dbline 258
; tmp/=10;
.dbline 259
; send( 2, tmp % 10 );
ldi R18,10
ldi R19,0
movw R16,R20
xcall div16u
movw R20,R16
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,2
xcall _send
.dbline 260
; delay(1);
ldi R16,1
ldi R17,0
xcall _delay
.dbline 261
; break;
xjmp L47
L52:
.dbline 262
; case 2: send( 0, numL% 10 );
ldi R18,10
ldi R19,0
lds R16,_numL
lds R17,_numL+1
xcall mod16u
mov R18,R16
clr R16
xcall _send
.dbline 263
; send( 1, numL / 10 % 10 );
ldi R18,10
ldi R19,0
lds R16,_numL
lds R17,_numL+1
xcall div16u
ldi R18,10
ldi R19,0
xcall mod16u
mov R18,R16
ldi R16,1
xcall _send
.dbline 264
; delay(2);
ldi R16,2
ldi R17,0
xcall _delay
.dbline 265
; break;
xjmp L47
L53:
.dbline 266
; case 1: send( 0, numL % 10 );
ldi R18,10
ldi R19,0
lds R16,_numL
lds R17,_numL+1
xcall mod16u
mov R18,R16
clr R16
xcall _send
.dbline 267
; delay(3);
ldi R16,3
ldi R17,0
xcall _delay
.dbline 268
; break;
xjmp L47
L46:
.dbline 269
; default: delay(3);
ldi R16,3
ldi R17,0
xcall _delay
.dbline 270
; break;
L47:
.dbline 273
; }
;
; switch(NumBitH)
lds R20,_NumBitH
clr R21
cpi R20,1
ldi R30,0
cpc R21,R30
breq L58
cpi R20,2
ldi R30,0
cpc R21,R30
breq L57
xjmp L54
X2:
.dbline 274
; {
L57:
.dbline 275
; case 2: send( 5, numH% 10 );
ldi R17,10
lds R16,_numH
xcall mod8u
mov R18,R16
ldi R16,5
xcall _send
.dbline 276
; send( 6, numH / 10 % 10 );
ldi R17,10
lds R16,_numH
xcall div8u
ldi R17,10
xcall mod8u
mov R18,R16
ldi R16,6
xcall _send
.dbline 277
; delay(2);
ldi R16,2
ldi R17,0
xcall _delay
.dbline 278
; break;
xjmp L55
L58:
.dbline 279
; case 1: send(5,numH%10);
ldi R17,10
lds R16,_numH
xcall mod8u
mov R18,R16
ldi R16,5
xcall _send
.dbline 280
; delay(2);
ldi R16,2
ldi R17,0
xcall _delay
.dbline 281
; break;
xjmp L55
L54:
.dbline 282
ldi R16,3
ldi R17,0
xcall _delay
.dbline 283
L55:
.dbline -2
.dbline 285
; default: delay(3);
; break;
; }
; }
L45:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r tmp 20 i
.dbend
.dbfunc e num_bit _num_bit fc
; bit -> R20
; Val -> R16,R17
.even
_num_bit::
xcall push_gset1
.dbline -1
.dbline 288
;
; uchar num_bit( uint Val )
; {
.dbline 290
; uchar bit;
; if(Val>=10000) { bit = 5; }
cpi R16,16
ldi R30,39
cpc R17,R30
brlo L60
.dbline 290
.dbline 290
ldi R20,5
.dbline 290
xjmp L61
L60:
.dbline 291
; else if(Val>=1000) { bit = 4; }
cpi R16,232
ldi R30,3
cpc R17,R30
brlo L62
.dbline 291
.dbline 291
ldi R20,4
.dbline 291
xjmp L63
L62:
.dbline 292
; else if(Val>=100 ) { bit = 3; }
cpi R16,100
ldi R30,0
cpc R17,R30
brlo L64
.dbline 292
.dbline 292
ldi R20,3
.dbline 292
xjmp L65
L64:
.dbline 293
; else if(Val>=10 ) { bit = 2; }
cpi R16,10
ldi R30,0
cpc R17,R30
brlo L66
.dbline 293
.dbline 293
ldi R20,2
.dbline 293
xjmp L67
L66:
.dbline 294
; else if( Val ) { bit = 1; }
cpi R16,0
cpc R16,R17
breq L68
X7:
.dbline 294
.dbline 294
ldi R20,1
.dbline 294
xjmp L69
L68:
.dbline 295
; else { bit = 1; }
.dbline 295
ldi R20,1
.dbline 295
L69:
L67:
L65:
L63:
L61:
.dbline 296
; return ( bit );
mov R16,R20
.dbline -2
L59:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r bit 20 c
.dbsym r Val 16 i
.dbend
.dbfunc e init_transbuf _init_transbuf fV
; tmp -> R16
.even
_init_transbuf::
.dbline -1
.dbline 300
; }
; //
; void init_transbuf(void)
; {
.dbline 302
; uchar tmp;
; for(tmp=0;tmp<20;tmp++)
clr R16
xjmp L74
L71:
.dbline 303
ldi R24,<_trans_buf
ldi R25,>_trans_buf
mov R30,R16
clr R31
add R30,R24
adc R31,R25
ldi R24,255
std z+0,R24
L72:
.dbline 302
inc R16
L74:
.dbline 302
cpi R16,20
brlo L71
.dbline -2
.dbline 304
; trans_buf[tmp]=0xff;
; }
L70:
.dbline 0 ; func end
ret
.dbsym r tmp 16 c
.dbend
.dbfunc e edit _edit fV
; KeyIndex -> R20
; flag -> R22
; i -> R10
.even
_edit::
xcall push_gset5
.dbline -1
.dbline 307
; //
; void edit(void)
; {
.dbline 308
; uchar flag=STATE;
ldi R22,15
.dbline 310
; uchar i;
; init_transbuf();
xcall _init_transbuf
.dbline 311
; numL=0;
clr R2
clr R3
sts _numL+1,R3
sts _numL,R2
xjmp L77
L76:
.dbline 313
; while(flag!=0xff)
; {
.dbline 314
; if( !(PIND&BIT(PD2)) ) // 检测按键状态
sbic 0x10,2
rjmp L79
.dbline 315
; {
.dbline 316
; display(); //延时
xcall _display
.dbline 317
; display(); //延时
xcall _display
.dbline 318
; if( !(PIND & BIT(PD2)) ) //再次检测按键状态
sbic 0x10,2
rjmp L81
.dbline 319
; {
.dbline 320
; uchar KeyIndex = scan_key(); // 读取扫描序号
xcall _scan_key
mov R20,R16
xjmp L84
L83:
.dbline 321
.dbline 321
wdr
.dbline 321
xcall _display
.dbline 321
L84:
.dbline 321
; while( !(PIND & BIT(PD2)) ) { WDR(); display(); }; //等待按键松开
sbis 0x10,2
rjmp L83
.dbline 321
.dbline 322
clr R10
xjmp L89
L86:
.dbline 322
.dbline 322
xcall _display
.dbline 322
L87:
.dbline 322
inc R10
L89:
.dbline 322
; for( i = 0; i < 5; i ++ ) { display(); } //延时
mov R24,R10
cpi R24,5
brlo L86
.dbline 324
; //backspace
; if((KeySet[KeyIndex]==1|(KeySet[KeyIndex]==2))&&(flag==STATE))
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,1
brne L92
ldi R24,1
ldi R25,0
movw R12,R24
xjmp L93
L92:
clr R12
clr R13
L93:
ldi R24,<_KeySet
ldi R25,>_KeySet
mov R30,R20
clr R31
add R30,R24
adc R31,R25
lpm R30,Z
cpi R30,2
brne L94
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L95
L94:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -