📄 ac15-4.s
字号:
; Wait();
in R2,0x36
sbrs R2,7
rjmp L68
.dbline 218
.dbline 218
.dbline 219
; if(TestAck()!=MT_DATA_ACK) return 1;
in R24,0x1
andi R24,248
cpi R24,40
breq L71
.dbline 219
ldi R16,1
xjmp L57
L71:
.dbline 220
; Write8Bit(Wdata);
.dbline 220
out 0x3,R20
.dbline 220
ldi R24,132
out 0x36,R24
.dbline 220
.dbline 220
.dbline 221
L73:
.dbline 221
L74:
.dbline 221
; Wait();
in R2,0x36
sbrs R2,7
rjmp L73
.dbline 221
.dbline 221
.dbline 222
; if(TestAck()!=MT_DATA_ACK) return 1;
in R24,0x1
andi R24,248
cpi R24,40
breq L76
.dbline 222
ldi R16,1
xjmp L57
L76:
.dbline 223
; Stop();
ldi R24,148
out 0x36,R24
.dbline 224
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 225
; return 0;
clr R16
.dbline -2
L57:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r Wdata 20 c
.dbsym r RomAddress 22 c
.dbend
.dbfunc e timer1_init _timer1_init fV
.even
_timer1_init::
.dbline -1
.dbline 230
; }
;
; /*****************定时器1初始化*************/
; void timer1_init(void)
; {
.dbline 231
; TCNT1H = 0xF3; //setup
ldi R24,243
out 0x2d,R24
.dbline 232
; TCNT1L = 0xCB;
ldi R24,203
out 0x2c,R24
.dbline 233
; TCCR1B = 0x04; //start Timer
ldi R24,4
out 0x2e,R24
.dbline -2
L78:
.dbline 0 ; func end
ret
.dbend
.dbfunc e main _main fV
; key_val -> R22
.even
_main::
sbiw R28,2
.dbline -1
.dbline 238
; }
;
; //******************************************
; void main(void)
; {
.dbline 240
; uchar key_val;
; init_devices();
xcall _init_devices
.dbline 241
; delay_ms(400);
ldi R16,400
ldi R17,1
xcall _delay_ms
.dbline 242
; InitLcd();
xcall _InitLcd
.dbline 243
; LcdWriteCommand(0x01,1);
ldi R18,1
ldi R16,1
xcall _LcdWriteCommand
.dbline 244
; LcdWriteCommand(0x0c,1);
ldi R18,1
ldi R16,12
xcall _LcdWriteCommand
.dbline 245
; 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 246
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 247
; 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 248
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
xjmp L81
L80:
.dbline 251
; /********************************************/
; while(1)
; {
.dbline 252
; 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 253
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 254
; 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 255
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 256
; 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 257
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 258
; 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 259
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 260
; 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 261
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 262
; 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 263
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 265
;
; 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 266
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 267
; 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 268
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 269
; 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 270
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 271
; 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 272
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 273
; key_val=scan_key();
xcall _scan_key
mov R22,R16
.dbline 274
; switch(key_val)
mov R20,R22
clr R21
cpi R20,223
ldi R30,0
cpc R21,R30
brne X2
xjmp L100
X2:
ldi R24,223
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L119
L118:
cpi R20,127
ldi R30,0
cpc R21,R30
brne X3
xjmp L111
X3:
cpi R20,127
ldi R30,0
cpc R21,R30
brge X4
xjmp L90
X4:
L120:
cpi R20,191
ldi R30,0
cpc R21,R30
brne X5
xjmp L103
X5:
xjmp L90
L119:
cpi R20,247
ldi R30,0
cpc R21,R30
brne X6
xjmp L116
X6:
ldi R24,247
ldi R25,0
cp R24,R20
cpc R25,R21
brlt L122
L121:
cpi R20,239
ldi R30,0
cpc R21,R30
breq L92
xjmp L90
L122:
cpi R20,251
ldi R30,0
cpc R21,R30
brne X7
xjmp L114
X7:
xjmp L90
X0:
.dbline 275
; {
L92:
.dbline 276
; case 0xef:time1.min++;
lds R24,_time1+1
subi R24,255 ; addi 1
sts _time1+1,R24
.dbline 277
; if(time1.min>59){time1.min=0;
ldi R24,59
lds R2,_time1+1
cp R24,R2
brlo X8
xjmp L90
X8:
.dbline 277
.dbline 277
clr R2
sts _time1+1,R2
.dbline 278
; if(time1.hour<23)time1.hour++;
lds R24,_time1
cpi R24,23
brlo X9
xjmp L90
X9:
.dbline 278
subi R24,255 ; addi 1
sts _time1,R24
.dbline 279
; }break;
.dbline 279
xjmp L90
L100:
.dbline 280
; case 0xdf:time1.hour++;if(time1.hour>23)time1.hour=0;break;
lds R24,_time1
subi R24,255 ; addi 1
sts _time1,R24
.dbline 280
ldi R24,23
lds R2,_time1
cp R24,R2
brlo X10
xjmp L90
X10:
.dbline 280
clr R2
sts _time1,R2
.dbline 280
xjmp L90
L103:
.dbline 282
;
; case 0xbf:time2.min++;
lds R24,_time2+1
subi R24,255 ; addi 1
sts _time2+1,R24
.dbline 283
; if(time2.min>59){time2.min=0;
ldi R24,59
lds R2,_time2+1
cp R24,R2
brlo X11
xjmp L90
X11:
.dbline 283
.dbline 283
clr R2
sts _time2+1,R2
.dbline 284
; if(time2.hour<23)time2.hour++;
lds R24,_time2
cpi R24,23
brlo X12
xjmp L90
X12:
.dbline 284
subi R24,255 ; addi 1
sts _time2,R24
.dbline 285
; }break;
.dbline 285
xjmp L90
L111:
.dbline 286
; case 0x7f:time2.hour++;if(time2.hour>23)time2.hour=0;break;
lds R24,_time2
subi R24,255 ; addi 1
sts _time2,R24
.dbline 286
ldi R24,23
lds R2,_time2
cp R24,R2
brsh L90
.dbline 286
clr R2
sts _time2,R2
.dbline 286
xjmp L90
L114:
.dbline 289
;
; //*************************
; case 0xfb:i2c_Write(11,time2.hour);
lds R18,_time2
ldi R16,11
xcall _i2c_Write
.dbline 290
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 291
; i2c_Write(12,time2.min);
lds R18,_time2+1
ldi R16,12
xcall _i2c_Write
.dbline 292
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 293
; DisplayOneChar(13,1,0x57);
ldi R24,87
std y+0,R24
ldi R18,1
ldi R16,13
xcall _DisplayOneChar
.dbline 294
; delay_ms(10);break;
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 294
xjmp L90
L116:
.dbline 295
; case 0xf7:time2.hour=i2c_Read(11);
ldi R16,11
xcall _i2c_Read
sts _time2,R16
.dbline 296
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 297
; time2.min=i2c_Read(12);
ldi R16,12
xcall _i2c_Read
sts _time2+1,R16
.dbline 298
; delay_ms(10);
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 299
; DisplayOneChar(13,1,0x52);
ldi R24,82
std y+0,R24
ldi R18,1
ldi R16,13
xcall _DisplayOneChar
.dbline 300
; delay_ms(10);break;
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 300
.dbline 301
; default:break;
L90:
.dbline 303
ldi R16,300
ldi R17,1
xcall _delay_ms
.dbline 304
ldi R24,32
std y+0,R24
ldi R18,1
ldi R16,13
xcall _DisplayOneChar
.dbline 305
ldi R16,10
ldi R17,0
xcall _delay_ms
.dbline 307
L81:
.dbline 250
xjmp L80
X1:
.dbline -2
L79:
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-4\ac15-4.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 312
; }
; delay_ms(300);
; DisplayOneChar(13,1,0x20);
; delay_ms(10);
;
; }
; }
; /***********************定时器T1中断子函数**********************/
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
.dbline 314
; //TIMER1 has overflowed
; TCNT1H = 0xF3; //reload counter high value
ldi R24,243
out 0x2d,R24
.dbline 315
; TCNT1L = 0xCB; //reload counter low value
ldi R24,203
out 0x2c,R24
.dbline 316
; 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 L124
.dbline 316
.dbline 316
clr R2
sts _time1+3,R2
.dbline 316
lds R24,_time1+2
subi R24,255 ; addi 1
sts _time1+2,R24
.dbline 316
L124:
.dbline 317
; if(time1.sec>=60){time1.sec=0;time1.min++;}
lds R24,_time1+2
cpi R24,60
brlo L129
.dbline 317
.dbline 317
clr R2
sts _time1+2,R2
.dbline 317
lds R24,_time1+1
subi R24,255 ; addi 1
sts _time1+1,R24
.dbline 317
L129:
.dbline 318
; if(time1.min>=60){time1.min=0;time1.hour++;}
lds R24,_time1+1
cpi R24,60
brlo L134
.dbline 318
.dbline 318
clr R2
sts _time1+1,R2
.dbline 318
lds R24,_time1
subi R24,255 ; addi 1
sts _time1,R24
.dbline 318
L134:
.dbline 319
; if(time1.hour>=24){time1.hour=0;}
lds R24,_time1
cpi R24,24
brlo L138
.dbline 319
.dbline 319
clr R2
sts _time1,R2
.dbline 319
L138:
.dbline 321
; //-------------------
; if((time1.hour==time2.hour)&&(time1.min==time2.min))LED_0;
lds R2,_time2
lds R3,_time1
cp R3,R2
brne L140
lds R2,_time2+1
lds R3,_time1+1
cp R3,R2
brne L140
.dbline 321
cbi 0x18,7
xjmp L141
L140:
.dbline 322
sbi 0x18,7
L141:
.dbline -2
L123:
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 326
; else LED_1;
; }
; /*********************************************/
; void init_devices(void)
; {
.dbline 328
; //stop errant interrupts until set up
; CLI(); //disable all interrupts
cli
.dbline 329
; port_init();
xcall _port_init
.dbline 330
; timer1_init();
xcall _timer1_init
.dbline 331
; MCUCR = 0x00;
clr R2
out 0x35,R2
.dbline 332
; GICR = 0x00;
out 0x3b,R2
.dbline 333
; TIMSK = 0x04; //timer interrupt sources
ldi R24,4
out 0x39,R24
.dbline 334
; SEI(); //re-enable interrupts
sei
.dbline -2
L144:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_ms _delay_ms fV
; time -> R20,R21
.even
_delay_ms::
xcall push_gset1
movw R20,R16
.dbline -1
.dbline 340
; //all peripherals are now initialized
; }
;
; /*******************器件初始化********************/
; void delay_ms(unsigned int time)
; {
xjmp L147
L146:
.dbline 342
.dbline 343
ldi R16,1000
ldi R17,3
xcall _delay_us
.dbline 344
subi R20,1
sbci R21,0
.dbline 345
L147:
.dbline 341
; while(time!=0)
cpi R20,0
cpc R20,R21
brne L146
X13:
.dbline -2
L145:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r time 20 i
.dbend
.dbfunc e delay_us _delay_us fV
; time -> R16,R17
.even
_delay_us::
.dbline -1
.dbline 350
; {
; delay_us(1000);
; time--;
; }
; }
;
; /*****************廷时子函数************************/
; void delay_us(int time)
; {
L150:
.dbline 352
; do
; {
.dbline 353
; time--;
subi R16,1
sbci R17,0
.dbline 354
; }
L151:
.dbline 355
; while (time>1);
ldi R24,1
ldi R25,0
cp R24,R16
cpc R25,R17
brlt L150
.dbline -2
L149:
.dbline 0 ; func end
ret
.dbsym r time 16 I
.dbend
.area bss(ram, con, rel)
.dbfile d:\MYDOCU~1\ac15-4\ac15-4.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 + -