📄 ac15-2.s
字号:
; {
.dbline 269
; TCNT1H = 0xF3; //setup
ldi R24,243
out 0x2d,R24
.dbline 270
; TCNT1L = 0xCB;
ldi R24,203
out 0x2c,R24
.dbline 271
; TCCR1B = 0x04; //start Timer
ldi R24,4
out 0x2e,R24
.dbline -2
L67:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; key_val -> R22
.even
_main::
sbiw R28,2
.dbline -1
.dbline 275
; }
; //******************************************
; void main(void)
; {
.dbline 277
; uchar key_val;
; init_devices();
xcall _init_devices
.dbline 278
; Delay_nms(400);
ldi R16,400
ldi R17,1
xcall _Delay_nms
.dbline 279
; InitLcd();
xcall _InitLcd
.dbline 280
; LcdWriteCommand(0x01,1);
ldi R18,1
ldi R16,1
xcall _LcdWriteCommand
.dbline 281
; LcdWriteCommand(0x0c,1);
ldi R18,1
ldi R16,12
xcall _LcdWriteCommand
.dbline 282
; ePutstr(0,0,str0);
ldi R24,<_str0
ldi R25,>_str0
std y+1,R25
std y+0,R24
clr R18
clr R16
xcall _ePutstr
.dbline 283
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 284
; ePutstr(0,1,str1);
ldi R24,<_str1
ldi R25,>_str1
std y+1,R25
std y+0,R24
ldi R18,1
clr R16
xcall _ePutstr
.dbline 285
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
xjmp L70
L69:
.dbline 288
; /********************************************/
; while(1)
; {
.dbline 289
; DisplayOneChar(6,0,(time1.hour/10)+0x30);
ldi R17,10
lds R16,_time1
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,6
xcall _DisplayOneChar
.dbline 290
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 291
; DisplayOneChar(7,0,(time1.hour%10)+0x30);
ldi R17,10
lds R16,_time1
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,7
xcall _DisplayOneChar
.dbline 292
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 293
; DisplayOneChar(9,0,(time1.min/10)+0x30);
ldi R17,10
lds R16,_time1+1
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,9
xcall _DisplayOneChar
.dbline 294
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 295
; DisplayOneChar(10,0,(time1.min%10)+0x30);
ldi R17,10
lds R16,_time1+1
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,10
xcall _DisplayOneChar
.dbline 296
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 297
; DisplayOneChar(12,0,(time1.sec/10)+0x30);
ldi R17,10
lds R16,_time1+2
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,12
xcall _DisplayOneChar
.dbline 298
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 299
; DisplayOneChar(13,0,(time1.sec%10)+0x30);
ldi R17,10
lds R16,_time1+2
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
clr R18
ldi R16,13
xcall _DisplayOneChar
.dbline 300
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 302
;
; DisplayOneChar(7,1,(time2.hour/10)+0x30);
ldi R17,10
lds R16,_time2
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
ldi R16,7
xcall _DisplayOneChar
.dbline 303
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 304
; DisplayOneChar(8,1,(time2.hour%10)+0x30);
ldi R17,10
lds R16,_time2
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
ldi R16,8
xcall _DisplayOneChar
.dbline 305
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 306
; DisplayOneChar(10,1,(time2.min/10)+0x30);
ldi R17,10
lds R16,_time2+1
xcall div8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
ldi R16,10
xcall _DisplayOneChar
.dbline 307
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 308
; DisplayOneChar(11,1,(time2.min%10)+0x30);
ldi R17,10
lds R16,_time2+1
xcall mod8u
mov R24,R16
subi R24,208 ; addi 48
std y+0,R24
ldi R18,1
ldi R16,11
xcall _DisplayOneChar
.dbline 309
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 311
;
; key_val=scan_key();
xcall _scan_key
mov R22,R16
.dbline 313
;
; switch(key_val)
mov R20,R22
clr R21
cpi R20,223
ldi R30,0
cpc R21,R30
brne X2
xjmp L89
X2:
ldi R24,223
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L108
L107:
cpi R20,127
ldi R30,0
cpc R21,R30
brne X3
xjmp L100
X3:
cpi R20,127
ldi R30,0
cpc R21,R30
brge X4
xjmp L79
X4:
L109:
cpi R20,191
ldi R30,0
cpc R21,R30
brne X5
xjmp L92
X5:
xjmp L79
L108:
cpi R20,247
ldi R30,0
cpc R21,R30
brne X6
xjmp L105
X6:
ldi R24,247
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L111
L110:
cpi R20,239
ldi R30,0
cpc R21,R30
breq L81
xjmp L79
L111:
cpi R20,251
ldi R30,0
cpc R21,R30
brne X7
xjmp L103
X7:
xjmp L79
X0:
.dbline 314
; {
L81:
.dbline 315
; case 0xef:time1.min++;
lds R24,_time1+1
subi R24,255 ; addi 1
sts _time1+1,R24
.dbline 316
; if(time1.min>59){time1.min=0;
ldi R24,59
lds R2,_time1+1
cp R24,R2
brlo X8
xjmp L79
X8:
.dbline 316
.dbline 316
clr R2
sts _time1+1,R2
.dbline 317
; if(time1.hour<23)time1.hour++;
lds R24,_time1
cpi R24,23
brlo X9
xjmp L79
X9:
.dbline 317
subi R24,255 ; addi 1
sts _time1,R24
.dbline 318
; }break;
.dbline 318
xjmp L79
L89:
.dbline 319
; case 0xdf:time1.hour++;if(time1.hour>23)time1.hour=0;break; //加法调整"时"
lds R24,_time1
subi R24,255 ; addi 1
sts _time1,R24
.dbline 319
ldi R24,23
lds R2,_time1
cp R24,R2
brlo X10
xjmp L79
X10:
.dbline 319
clr R2
sts _time1,R2
.dbline 319
xjmp L79
L92:
.dbline 320
; case 0xbf:time2.min++;
lds R24,_time2+1
subi R24,255 ; addi 1
sts _time2+1,R24
.dbline 321
; if(time2.min>59){time2.min=0;
ldi R24,59
lds R2,_time2+1
cp R24,R2
brlo X11
xjmp L79
X11:
.dbline 321
.dbline 321
clr R2
sts _time2+1,R2
.dbline 322
; if(time2.hour<23)time2.hour++;
lds R24,_time2
cpi R24,23
brlo X12
xjmp L79
X12:
.dbline 322
subi R24,255 ; addi 1
sts _time2,R24
.dbline 323
; }break;
.dbline 323
xjmp L79
L100:
.dbline 324
; case 0x7f:time2.hour++;if(time2.hour>23)time2.hour=0;break;
lds R24,_time2
subi R24,255 ; addi 1
sts _time2,R24
.dbline 324
ldi R24,23
lds R2,_time2
cp R24,R2
brsh L79
.dbline 324
clr R2
sts _time2,R2
.dbline 324
xjmp L79
L103:
.dbline 327
;
; //*************************
; case 0xfb:wr_24c01(11,time2.hour);
lds R18,_time2
ldi R16,11
xcall _wr_24c01
.dbline 328
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 329
; wr_24c01(12,time2.min);
lds R18,_time2+1
ldi R16,12
xcall _wr_24c01
.dbline 330
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 331
; DisplayOneChar(13,1,0x57);
ldi R24,87
std y+0,R24
ldi R18,1
ldi R16,13
xcall _DisplayOneChar
.dbline 332
; Delay_nms(10);break;
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 332
xjmp L79
L105:
.dbline 333
; case 0xf7:time2.hour=rd_24c01(11);
ldi R16,11
xcall _rd_24c01
sts _time2,R16
.dbline 334
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 335
; time2.min=rd_24c01(12);
ldi R16,12
xcall _rd_24c01
sts _time2+1,R16
.dbline 336
; Delay_nms(10);
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 337
; DisplayOneChar(13,1,0x52);
ldi R24,82
std y+0,R24
ldi R18,1
ldi R16,13
xcall _DisplayOneChar
.dbline 338
; Delay_nms(10);break;
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 338
.dbline 339
; default:break;
L79:
.dbline 341
ldi R16,300
ldi R17,1
xcall _Delay_nms
.dbline 342
ldi R24,32
std y+0,R24
ldi R18,1
ldi R16,13
xcall _DisplayOneChar
.dbline 343
ldi R16,10
ldi R17,0
xcall _Delay_nms
.dbline 345
L70:
.dbline 287
xjmp L69
X1:
.dbline -2
L68:
adiw R28,2
.dbline 0 ; func end
ret
.dbsym r key_val 22 c
.dbend
.area vector(rom, abs)
.org 32
jmp _timer1_ovf_isr
.area text(rom, con, rel)
.dbfile d:\MYDOCU~1\ac15-2\ac15-2.c
.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
.even
_timer1_ovf_isr::
st -y,R2
st -y,R3
st -y,R24
st -y,R25
in R2,0x3f
st -y,R2
.dbline -1
.dbline 350
; }
; Delay_nms(300);
; DisplayOneChar(13,1,0x20);
; Delay_nms(10);
;
; }
; }
; /*********************定时器T1中断子函数************************/
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 352
; //TIMER1 has overflowed
; TCNT1H = 0xF3; //reload counter high value
ldi R24,243
out 0x2d,R24
.dbline 353
; TCNT1L = 0xCB; //reload counter low value
ldi R24,203
out 0x2c,R24
.dbline 354
; if(++time1.dida>=10){time1.dida=0;time1.sec++;}//计时
lds R24,_time1+3
subi R24,255 ; addi 1
mov R2,R24
sts _time1+3,R2
cpi R24,10
brlo L113
.dbline 354
.dbline 354
clr R2
sts _time1+3,R2
.dbline 354
lds R24,_time1+2
subi R24,255 ; addi 1
sts _time1+2,R24
.dbline 354
L113:
.dbline 355
; if(time1.sec>=60){time1.sec=0;time1.min++;}
lds R24,_time1+2
cpi R24,60
brlo L118
.dbline 355
.dbline 355
clr R2
sts _time1+2,R2
.dbline 355
lds R24,_time1+1
subi R24,255 ; addi 1
sts _time1+1,R24
.dbline 355
L118:
.dbline 356
; if(time1.min>=60){time1.min=0;time1.hour++;}
lds R24,_time1+1
cpi R24,60
brlo L123
.dbline 356
.dbline 356
clr R2
sts _time1+1,R2
.dbline 356
lds R24,_time1
subi R24,255 ; addi 1
sts _time1,R24
.dbline 356
L123:
.dbline 357
; if(time1.hour>=24){time1.hour=0;}
lds R24,_time1
cpi R24,24
brlo L127
.dbline 357
.dbline 357
clr R2
sts _time1,R2
.dbline 357
L127:
.dbline 359
; //-------------------
; if((time1.hour==time2.hour)&&(time1.min==time2.min))LED_0;
lds R2,_time2
lds R3,_time1
cp R3,R2
brne L129
lds R2,_time2+1
lds R3,_time1+1
cp R3,R2
brne L129
.dbline 359
cbi 0x18,7
xjmp L130
L129:
.dbline 360
sbi 0x18,7
L130:
.dbline -2
L112:
ld R2,y+
out 0x3f,R2
ld R25,y+
ld R24,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbend
.dbfunc e init_devices _init_devices fV
.even
_init_devices::
.dbline -1
.dbline 364
; else LED_1;
; }
; /**********************器件初始化***********************/
; void init_devices(void)
; {
.dbline 366
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 367
; port_init();
xcall _port_init
.dbline 368
; timer1_init();
xcall _timer1_init
.dbline 369
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 370
; GICR = 0x00;
out 0x3b,R2
.dbline 371
; TIMSK = 0x04; //timer interrupt sources
ldi R24,4
out 0x39,R24
.dbline 372
; SEI(); //re-enable interrupts
sei
.dbline -2
L133:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile d:\MYDOCU~1\ac15-2\ac15-2.c
_cnt::
.blkb 1
.dbsym e cnt _cnt c
_com_data::
.blkb 1
.dbsym e com_data _com_data c
_time2::
.blkb 4
.dbstruct 0 4 date
.dbfield 0 hour c
.dbfield 1 min c
.dbfield 2 sec c
.dbfield 3 dida c
.dbend
.dbsym e time2 _time2 S[date]
_time1::
.blkb 4
.dbsym e time1 _time1 S[date]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -