📄 timer.s
字号:
.module Timer.C
.area text(rom, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
.area data(ram, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
_CurSongTim::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
.blkb 1
.area idata
.byte 0
.area data(ram, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
.dbsym e CurSongTim _CurSongTim A[3:3]c
_TotalSongTim::
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
.blkb 2
.area idata
.byte 0,0
.area data(ram, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
.dbsym e TotalSongTim _TotalSongTim A[4:4]c
.area text(rom, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
.dbfunc e timer0_init _timer0_init fV
.even
_timer0_init::
.dbline -1
.dbline 18
; //TIMER0 initialize - prescale:8
; // WGM: Normal
; // desired value: 10KHz
; // actual value: 10.000KHz (0.0%)
; # include "iom16v.h"
; # include "LCDFun.h"
; # include "macros.h"
;
; extern void DisplayNumChar(unsigned char l,unsigned char h,unsigned char ll,unsigned char ShowBit);
; extern void PrintOneASCII(uchar h,uchar l,uchar Asc);
; extern unsigned char SWRecordLyric,SWPlayTime; //歌词开关,时间开关
;
;
; unsigned char CurSongTim[3]={0,0,0,}; //当前歌曲的播放时间 分:秒:百秒
; unsigned char TotalSongTim[4]={0,0,0,0,}; //当前歌曲的播放时间 时:分:秒:百秒
;
; void timer0_init(void)
; {
.dbline 19
; CLI(); //disable all interrupts
cli
.dbline 20
; ;
.dbline 21
; TCCR0 = 0x00; //stop
clr R2
out 0x33,R2
.dbline 22
; TCNT0 = 0xB2; //set count
ldi R24,178
out 0x32,R24
.dbline 23
; OCR0 = 0x4E; //set compare
ldi R24,78
out 0x3c,R24
.dbline 24
; TCCR0 = 0x05; //start timer
ldi R24,5
out 0x33,R24
.dbline 25
; ;
.dbline 26
; MCUCR = 0x00;
out 0x35,R2
.dbline 27
; GICR = 0x00;
out 0x3b,R2
.dbline 28
; TIMSK = 0x01; //timer interrupt sources
ldi R24,1
out 0x39,R24
.dbline 29
; SEI(); //re-enable interrupts
sei
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.area vector(rom, abs)
.org 36
jmp _timer0_ovf_isr
.area text(rom, con, rel)
.dbfile D:\学习\AVRpro\Mega16程序\TestLCD\Timer.C
.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
.even
_timer0_ovf_isr::
st -y,R0
st -y,R1
st -y,R2
st -y,R3
st -y,R4
st -y,R5
st -y,R6
st -y,R7
st -y,R8
st -y,R9
st -y,R16
st -y,R17
st -y,R18
st -y,R19
st -y,R24
st -y,R25
st -y,R26
st -y,R27
st -y,R30
st -y,R31
in R0,0x3f
st -y,R0
sbiw R28,3
.dbline -1
.dbline 34
; }
;
; #pragma interrupt_handler timer0_ovf_isr:iv_TIM0_OVF
; void timer0_ovf_isr(void)
; {
.dbline 35
; TCNT0 = 0xB2; //reload counter value
ldi R24,178
out 0x32,R24
.dbline 37
; //时钟处理
; CurSongTim[2]++;TotalSongTim[3]++;
lds R24,_CurSongTim+2
subi R24,255 ; addi 1
sts _CurSongTim+2,R24
.dbline 37
lds R24,_TotalSongTim+3
subi R24,255 ; addi 1
sts _TotalSongTim+3,R24
.dbline 38
; if(CurSongTim[2]>=100) //百分秒溢出
lds R24,_CurSongTim+2
cpi R24,100
brlo L5
X0:
.dbline 39
; {
.dbline 40
; CurSongTim[2]=0;
clr R2
sts _CurSongTim+2,R2
.dbline 41
; CurSongTim[1]++;
lds R24,_CurSongTim+1
subi R24,255 ; addi 1
sts _CurSongTim+1,R24
.dbline 43
;
; if(CurSongTim[1]>=60) //秒溢出
cpi R24,60
brlo L10
X1:
.dbline 44
; {
.dbline 45
; CurSongTim[1]=0;
sts _CurSongTim+1,R2
.dbline 46
; CurSongTim[0]+=1;
lds R24,_CurSongTim
subi R24,255 ; addi 1
sts _CurSongTim,R24
.dbline 49
; //分处理:
; //分处理结束
; }
L10:
.dbline 51
; //秒处理:
; if(SWPlayTime)
lds R2,_SWPlayTime
tst R2
breq L14
X2:
.dbline 52
; {
.dbline 53
; DisplayNumChar(6,88,CurSongTim[0],2); //显示当前歌曲播放时间 分
ldi R24,2
std y+2,R24
lds R2,_CurSongTim
std y+0,R2
ldi R18,88
ldi R16,6
xcall _DisplayNumChar
.dbline 54
; PrintOneASCII(6,104,':');
ldi R24,58
std y+0,R24
ldi R18,104
ldi R16,6
xcall _PrintOneASCII
.dbline 55
; DisplayNumChar(6,112,CurSongTim[1],2); //显示当前歌曲播放时间 秒
ldi R24,2
std y+2,R24
lds R2,_CurSongTim+1
std y+0,R2
ldi R18,112
ldi R16,6
xcall _DisplayNumChar
.dbline 56
; }
L14:
.dbline 58
; //秒处理结束
; }
L5:
.dbline 59
; if(TotalSongTim[3]>=100) //百分秒溢出
lds R24,_TotalSongTim+3
cpi R24,100
brsh X8
xjmp L17
X8:
X3:
.dbline 60
; {
.dbline 61
; TotalSongTim[3]=0;
clr R2
sts _TotalSongTim+3,R2
.dbline 62
; TotalSongTim[2]++;
lds R24,_TotalSongTim+2
subi R24,255 ; addi 1
sts _TotalSongTim+2,R24
.dbline 64
;
; if(TotalSongTim[2]>=60) //秒溢出
cpi R24,60
brlo L22
X4:
.dbline 65
; {
.dbline 66
; TotalSongTim[2]=0;
sts _TotalSongTim+2,R2
.dbline 67
; TotalSongTim[1]+=1;
lds R24,_TotalSongTim+1
subi R24,255 ; addi 1
sts _TotalSongTim+1,R24
.dbline 69
; //分处理:
; }
L22:
.dbline 71
; //秒处理:
; if(SWPlayTime)
lds R2,_SWPlayTime
tst R2
breq L27
X5:
.dbline 72
; {
.dbline 73
; DisplayNumChar(7,64,TotalSongTim[0],2); //显示全部歌曲播放时间 小时
ldi R24,2
std y+2,R24
lds R2,_TotalSongTim
std y+0,R2
ldi R18,64
ldi R16,7
xcall _DisplayNumChar
.dbline 74
; PrintOneASCII(7,80,':');
ldi R24,58
std y+0,R24
ldi R18,80
ldi R16,7
xcall _PrintOneASCII
.dbline 75
; DisplayNumChar(7,88,TotalSongTim[1],2); //显示全部歌曲播放时间 分
ldi R24,2
std y+2,R24
lds R2,_TotalSongTim+1
std y+0,R2
ldi R18,88
ldi R16,7
xcall _DisplayNumChar
.dbline 76
; PrintOneASCII(7,104,':');
ldi R24,58
std y+0,R24
ldi R18,104
ldi R16,7
xcall _PrintOneASCII
.dbline 77
; DisplayNumChar(7,112,TotalSongTim[2],2); //显示全部歌曲播放时间 分
ldi R24,2
std y+2,R24
lds R2,_TotalSongTim+2
std y+0,R2
ldi R18,112
ldi R16,7
xcall _DisplayNumChar
.dbline 78
; }
L27:
.dbline 80
; //秒处理结束
; if(TotalSongTim[1]>=60) //分溢出
lds R24,_TotalSongTim+1
cpi R24,60
brlo L31
X6:
.dbline 81
; {
.dbline 82
; TotalSongTim[1]=0;
clr R2
sts _TotalSongTim+1,R2
.dbline 83
; TotalSongTim[0]+=1;
lds R24,_TotalSongTim
subi R24,255 ; addi 1
sts _TotalSongTim,R24
.dbline 86
; //小时处理:
;
; if(TotalSongTim[0]>=24) //小时溢出
cpi R24,24
brlo L35
X7:
.dbline 87
; {
.dbline 88
; TotalSongTim[0]=0;
sts _TotalSongTim,R2
.dbline 89
; }
L35:
.dbline 90
; }
L31:
.dbline 91
; }
L17:
.dbline -2
L2:
.dbline 0 ; func end
adiw R28,3
ld R0,y+
out 0x3f,R0
ld R31,y+
ld R30,y+
ld R27,y+
ld R26,y+
ld R25,y+
ld R24,y+
ld R19,y+
ld R18,y+
ld R17,y+
ld R16,y+
ld R9,y+
ld R8,y+
ld R7,y+
ld R6,y+
ld R5,y+
ld R4,y+
ld R3,y+
ld R2,y+
ld R1,y+
ld R0,y+
reti
.dbend
; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -