📄 time_8515.s
字号:
andi R24,#0x0F
subi R24,208 ; addi 48
sts _buf_time+25,R24
.dbline 298
;
; buf_time[23] = (buf_read[2] & 0x0f) + '0'; //时的低位
lds R24,_buf_read+2
andi R24,15
subi R24,208 ; addi 48
sts _buf_time+23,R24
.dbline 299
; buf_time[22] = (buf_read[2] >> 4 ) + '0'; //时的高位
lds R24,_buf_read+2
swap R24
andi R24,#0x0F
subi R24,208 ; addi 48
sts _buf_time+22,R24
.dbline 301
;
; buf_time[14] = (buf_read[3] & 0x0f) + '0'; //日的低位
lds R24,_buf_read+3
andi R24,15
subi R24,208 ; addi 48
sts _buf_time+14,R24
.dbline 302
; buf_time[13] = (buf_read[3] >> 4 ) + '0'; //日的高位
lds R24,_buf_read+3
swap R24
andi R24,#0x0F
subi R24,208 ; addi 48
sts _buf_time+13,R24
.dbline 304
;
; buf_time[11] = (buf_read[4] & 0x0f) + '0'; //月的高位
lds R24,_buf_read+4
andi R24,15
subi R24,208 ; addi 48
sts _buf_time+11,R24
.dbline 305
; buf_time[10] = (buf_read[4] >> 4 ) + '0'; //月的高位
lds R24,_buf_read+4
swap R24
andi R24,#0x0F
subi R24,208 ; addi 48
sts _buf_time+10,R24
.dbline 307
;
; buf_time[8] = (buf_read[6] & 0x0f) + '0'; //年的高位
lds R24,_buf_read+6
andi R24,15
subi R24,208 ; addi 48
sts _buf_time+8,R24
.dbline 308
; buf_time[7] = (buf_read[6] >> 4 ) + '0'; //年的高位
lds R24,_buf_read+6
swap R24
andi R24,#0x0F
subi R24,208 ; addi 48
sts _buf_time+7,R24
.dbline -2
L53:
.dbline 0 ; func end
ret
.dbend
.area lit(rom, con, rel)
L77:
.byte 32,32,189,241,204,236,181,196,200,213,198,218,202,199,163,186
L78:
.byte 32,32,181,177,199,176,181,196,202,177,188,228,202,199,163,186
.area text(rom, con, rel)
.dbfile E:\iccavr代码\实验19_其他芯片使用_8515\time_8515.c
.dbfunc e out_data_pc232 _out_data_pc232 fV
; time2 -> y+16
; time1 -> y+0
; i -> R20
.even
_out_data_pc232::
rcall push_gset1
sbiw R28,32
.dbline -1
.dbline 318
; }
; /********************************************************
; 子程序名: out_data_pc232()
; 功 能: 串口发送时间数据到PC,
; 输入参数: /
; 输出参数: /
; 描 述: 包括"当前的温度是:xxx.xx摄氏度",此程序借助LCD的显示缓冲区
; ********************************************************/
; void out_data_pc232(void)
; {
.dbline 320
; uchar i;
; uchar time1[16]=" 今天的日期是:";
ldi R24,<L77
ldi R25,>L77
movw R30,R28
ldi R16,16
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 321
; uchar time2[16]=" 当前的时间是:";
ldi R24,<L78
ldi R25,>L78
movw R30,R28
adiw R30,16
ldi R16,16
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 323
;
; for(i=0;i<16;i++) //向串口发送数据
clr R20
rjmp L82
L79:
.dbline 324
.dbline 325
movw R24,R28
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _write_pc232
.dbline 326
L80:
.dbline 323
inc R20
L82:
.dbline 323
cpi R20,16
brlo L79
.dbline 327
; {
; write_pc232(time1[i]);
; }
; write_pc232('2'); //年
ldi R16,50
rcall _write_pc232
.dbline 328
; write_pc232('0');
ldi R16,48
rcall _write_pc232
.dbline 329
; write_pc232(buf_time[7]);
lds R16,_buf_time+7
rcall _write_pc232
.dbline 330
; write_pc232(buf_time[8]);
lds R16,_buf_time+8
rcall _write_pc232
.dbline 331
; write_pc232('-');
ldi R16,45
rcall _write_pc232
.dbline 332
; write_pc232(buf_time[10]); //月
lds R16,_buf_time+10
rcall _write_pc232
.dbline 333
; write_pc232(buf_time[11]);
lds R16,_buf_time+11
rcall _write_pc232
.dbline 334
; write_pc232('-');
ldi R16,45
rcall _write_pc232
.dbline 335
; write_pc232(buf_time[13]); //日
lds R16,_buf_time+13
rcall _write_pc232
.dbline 336
; write_pc232(buf_time[14]);
lds R16,_buf_time+14
rcall _write_pc232
.dbline 338
;
; for(i=0;i<16;i++) //向串口发送数据
clr R20
rjmp L92
L89:
.dbline 339
.dbline 340
movw R24,R28
adiw R24,16
mov R30,R20
clr R31
add R30,R24
adc R31,R25
ldd R16,z+0
rcall _write_pc232
.dbline 341
L90:
.dbline 338
inc R20
L92:
.dbline 338
cpi R20,16
brlo L89
.dbline 342
; {
; write_pc232(time2[i]);
; }
; write_pc232(buf_time[22]); //时
lds R16,_buf_time+22
rcall _write_pc232
.dbline 343
; write_pc232(buf_time[23]);
lds R16,_buf_time+23
rcall _write_pc232
.dbline 344
; write_pc232(':');
ldi R16,58
rcall _write_pc232
.dbline 345
; write_pc232(buf_time[25]); //分
lds R16,_buf_time+25
rcall _write_pc232
.dbline 346
; write_pc232(buf_time[26]);
lds R16,_buf_time+26
rcall _write_pc232
.dbline 347
; write_pc232(':');
ldi R16,58
rcall _write_pc232
.dbline 348
; write_pc232(buf_time[28]); //秒
lds R16,_buf_time+28
rcall _write_pc232
.dbline 349
; write_pc232(buf_time[29]);
lds R16,_buf_time+29
rcall _write_pc232
.dbline 351
;
; write_pc232('\n');
ldi R16,10
rcall _write_pc232
.dbline 352
; write_pc232('\r'); //显示回车换行
ldi R16,13
rcall _write_pc232
.dbline -2
L76:
adiw R28,32
rcall pop_gset1
.dbline 0 ; func end
ret
.dbsym l time2 16 A[16:16]c
.dbsym l time1 0 A[16:16]c
.dbsym r i 20 c
.dbend
.area lit(rom, con, rel)
L100:
.byte 32,32,32,32,'w,'e,'l,'c,'o,'m,'e,33,32,32,32,32
.byte 32,32,'w,'w,'w,46,'i,'t,'s,'n,46,'c,'n,33,32,32
.byte 0
.area text(rom, con, rel)
.dbfile E:\iccavr代码\实验19_其他芯片使用_8515\time_8515.c
.dbfunc e main _main fV
; buf_logo -> y+0
; data_old -> R20
.even
_main::
sbiw R28,33
.dbline -1
.dbline 356
; }
; //*****************主程序**********************************
; void main (void)
; {
.dbline 358
; uchar data_old;
; uchar buf_logo[]=" welcome! www.itsn.cn! ";
ldi R24,<L100
ldi R25,>L100
movw R30,R28
ldi R16,33
ldi R17,0
st -y,R31
st -y,R30
st -y,R25
st -y,R24
rcall asgncblk
.dbline 360
;
; mcu_Init(); //单片机初始化
rcall _mcu_Init
.dbline 361
; usart_Init(); //串口初始化
rcall _usart_Init
.dbline 362
; init_lcd(); //lcd初始化
rcall _init_lcd
.dbline 364
;
; write_pc232('o'); //测试串口
ldi R16,111
rcall _write_pc232
.dbline 365
; write_pc232('k'); //测试串口
ldi R16,107
rcall _write_pc232
.dbline 366
; write_pc232('\n');
ldi R16,10
rcall _write_pc232
.dbline 367
; write_pc232('\r'); //显示回车换行
ldi R16,13
rcall _write_pc232
.dbline 369
;
; display_lcd(buf_logo); //显示LOGO
movw R16,R28
rcall _display_lcd
.dbline 370
; spk (1000); //上电蜂鸣器长响
ldi R16,232
rcall _spk
.dbline 371
; DelaymS(2000); //长延迟
ldi R16,2000
ldi R17,7
rcall _DelaymS
.dbline 372
; display_lcd(buf_time); //开始工作,LCD刷新显示一屏
ldi R16,<_buf_time
ldi R17,>_buf_time
rcall _display_lcd
.dbline 373
; spk (100); //开始工作,蜂鸣器短响
ldi R16,100
rcall _spk
.dbline 376
;
; //---------此段测试1302是否已经写过内容了,若写过就不再重新写。
; read_DS1302(); //读时间
rcall _read_DS1302
.dbline 377
; if(buf_read[0] & 0x80)
lds R2,_buf_read
sbrs R2,7
rjmp L101
.dbline 378
; {
.dbline 379
; write_DS1302(); //写入需要的初始时间值,
rcall _write_DS1302
.dbline 380
; }
L101:
.dbline 383
; //------------------
;
; DelaymS(1); //延迟
ldi R16,1
ldi R17,0
rcall _DelaymS
.dbline 384
; read_DS1302(); //读时间
rcall _read_DS1302
.dbline 385
; data_old = buf_read[0]; //提取旧时钟的秒数值
lds R20,_buf_read
rjmp L104
L103:
.dbline 387
; while(1) //无限循环执行,此程序保证了一秒钟更新一次串口数据,更新一次LCD显示。
; {
.dbline 388
; DelaymS(10); //延迟
ldi R16,10
ldi R17,0
rcall _DelaymS
.dbline 389
; read_DS1302(); //读时间
rcall _read_DS1302
.dbline 390
; if (data_old == buf_read[0])
lds R2,_buf_read
cp R20,R2
brne L106
.dbline 391
; {
.dbline 392
; DelaymS(10); //延迟
ldi R16,10
ldi R17,0
rcall _DelaymS
.dbline 393
; }
rjmp L107
L106:
.dbline 395
; else
; {
.dbline 396
; data_conversion(); //将读出的数据分开,分别装入显存
rcall _data_conversion
.dbline 397
; display_lcd(buf_time); //刷新显示一屏
ldi R16,<_buf_time
ldi R17,>_buf_time
rcall _display_lcd
.dbline 398
; out_data_pc232(); //串口将时间数据送PC
rcall _out_data_pc232
.dbline 399
; data_old = buf_read[0]; //更新时钟的秒数值
lds R20,_buf_read
.dbline 400
; }
L107:
.dbline 401
L104:
.dbline 386
rjmp L103
X0:
.dbline -2
L99:
adiw R28,33
.dbline 0 ; func end
ret
.dbsym l buf_logo 0 A[33:33]c
.dbsym r data_old 20 c
.dbend
.area bss(ram, con, rel)
.dbfile E:\iccavr代码\实验19_其他芯片使用_8515\time_8515.c
_buf_read::
.blkb 8
.dbsym e buf_read _buf_read A[8:8]c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -