📄 time.lis
字号:
.module time.c
.area data(ram, con, rel)
0000 _sound::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile D:\ICC-AVR\Pc_At\time.c
0001 .dbsym s sound _sound c
.area text(rom, con, rel)
0000 .dbfile D:\ICC-AVR\Pc_At\time.c
0000 .dbfunc s timer0_init _timer0_init fI
.even
0000 _timer0_init::
0000 .dbline -1
0000 .dbline 10
; #include<iom103.h>
; unsigned char second;
; unsigned char minute;
; unsigned char hour;
; unsigned char time[9];
; unsigned char sound=0;
; extern unsigned char keytime;
; extern unsigned char keypad(void);
; void timer0_init(void)
; {
0000 .dbline 11
; TCCR0 = 0x00; //stop
0000 2224 clr R2
0002 23BE out 0x33,R2
0004 .dbline 12
; ASSR = 0x08; //set async mode
0004 88E0 ldi R24,8
0006 80BF out 0x30,R24
0008 .dbline 13
; TCNT0 = 0x00; //set count
0008 22BE out 0x32,R2
000A .dbline 14
; TCCR0 = 0x05; //start timer
000A 85E0 ldi R24,5
000C 83BF out 0x33,R24
000E .dbline -2
000E .dbline 15
; }
000E L1:
000E .dbline 0 ; func end
000E 0895 ret
.area vector(rom, abs)
.org 64
0040 0C940800 jmp _timer0_ovf_isr
.area text(rom, con, rel)
0010 .dbfile D:\ICC-AVR\Pc_At\time.c
0010 .dbfunc s timer0_ovf_isr _timer0_ovf_isr fI
.even
0010 _timer0_ovf_isr::
0010 2A92 st -y,R2
0012 8A93 st -y,R24
0014 9A93 st -y,R25
0016 2FB6 in R2,0x3f
0018 2A92 st -y,R2
001A .dbline -1
001A .dbline 18
; #pragma interrupt_handler timer0_ovf_isr:17
; void timer0_ovf_isr(void)
; {
001A .dbline 19
; TCNT0 = 0x00; //reload counter value
001A 2224 clr R2
001C 22BE out 0x32,R2
001E .dbline 20
; keytime++;
001E 80910000 lds R24,_keytime
0022 8F5F subi R24,255 ; addi 1
0024 80930000 sts _keytime,R24
0028 .dbline 21
; if(second>=59)
0028 80910D00 lds R24,_second
002C 8B33 cpi R24,59
002E D8F0 brlo L3
0030 .dbline 22
; {
0030 .dbline 23
; second=0;
0030 20920D00 sts _second,R2
0034 .dbline 24
; if(minute>=59)
0034 80910C00 lds R24,_minute
0038 8B33 cpi R24,59
003A 78F0 brlo L5
003C .dbline 25
; {
003C .dbline 26
; minute=0;
003C 20920C00 sts _minute,R2
0040 .dbline 27
; if(hour>=23)
0040 80910B00 lds R24,_hour
0044 8731 cpi R24,23
0046 18F0 brlo L7
0048 .dbline 28
; {
0048 .dbline 29
; hour=0;
0048 20920B00 sts _hour,R2
004C .dbline 30
; }
004C 11C0 xjmp L4
004E L7:
004E .dbline 32
; else
; {
004E .dbline 33
; hour++;
004E 80910B00 lds R24,_hour
0052 8F5F subi R24,255 ; addi 1
0054 80930B00 sts _hour,R24
0058 .dbline 34
; }
0058 .dbline 35
; }
0058 0BC0 xjmp L4
005A L5:
005A .dbline 37
; else
; {
005A .dbline 38
; minute++;
005A 80910C00 lds R24,_minute
005E 8F5F subi R24,255 ; addi 1
0060 80930C00 sts _minute,R24
0064 .dbline 39
; }
0064 .dbline 40
; }
0064 05C0 xjmp L4
0066 L3:
0066 .dbline 42
; else
; {
0066 .dbline 43
; second++;
0066 80910D00 lds R24,_second
006A 8F5F subi R24,255 ; addi 1
006C 80930D00 sts _second,R24
0070 .dbline 44
; }
0070 L4:
0070 .dbline 45
; if((PIND&0b00100000)==0) sound=1;
0070 8599 sbic 0x10,5
0072 03C0 rjmp L9
0074 .dbline 45
0074 81E0 ldi R24,1
0076 80930000 sts _sound,R24
007A L9:
007A .dbline 46
; if (minute==0)
007A 20900C00 lds R2,_minute
007E 2220 tst R2
0080 61F4 brne L11
0082 .dbline 47
; {
0082 .dbline 48
; if (sound==0)
0082 20900000 lds R2,_sound
0086 2220 tst R2
0088 21F4 brne L13
008A .dbline 49
; TIMSK|=0x40;
008A 87B7 in R24,0x37
008C 8064 ori R24,64
008E 87BF out 0x37,R24
0090 0AC0 xjmp L12
0092 L13:
0092 .dbline 51
; else
; TIMSK&=0xbf;
0092 87B7 in R24,0x37
0094 8F7B andi R24,191
0096 87BF out 0x37,R24
0098 .dbline 52
; }
0098 06C0 xjmp L12
009A L11:
009A .dbline 54
009A .dbline 55
009A 87B7 in R24,0x37
009C 8F7B andi R24,191
009E 87BF out 0x37,R24
00A0 .dbline 56
00A0 2224 clr R2
00A2 20920000 sts _sound,R2
00A6 .dbline 57
00A6 L12:
00A6 .dbline -2
00A6 .dbline 58
; else
; {
; TIMSK&=0xbf;
; sound=0;
; }
; }
00A6 L2:
00A6 2990 ld R2,y+
00A8 2FBE out 0x3f,R2
00AA 9991 ld R25,y+
00AC 8991 ld R24,y+
00AE 2990 ld R2,y+
00B0 .dbline 0 ; func end
00B0 1895 reti
00B2 .dbfunc s timetoasc _timetoasc fI
; temp -> R20
; i -> R22
.even
00B2 _timetoasc::
00B2 0E940000 xcall push_gset2
00B6 2497 sbiw R28,4
00B8 .dbline -1
00B8 .dbline 60
; void timetoasc(void)
; {
00B8 .dbline 63
; unsigned char i;
; unsigned char temp;
; temp=hour;
00B8 40910B00 lds R20,_hour
00BC .dbline 64
; for(i=0;i<2;i++)
00BC 6627 clr R22
00BE 17C0 xjmp L19
00C0 L16:
00C0 .dbline 65
00C0 .dbline 66
00C0 262E mov R2,R22
00C2 3324 clr R3
00C4 E1E0 ldi R30,1
00C6 F0E0 ldi R31,0
00C8 E219 sub R30,R2
00CA F309 sbc R31,R3
00CC 80E0 ldi R24,<_time
00CE 90E0 ldi R25,>_time
00D0 E80F add R30,R24
00D2 F91F adc R31,R25
00D4 1AE0 ldi R17,10
00D6 042F mov R16,R20
00D8 0E940000 xcall mod8u
00DC 802F mov R24,R16
00DE 805D subi R24,208 ; addi 48
00E0 8083 std z+0,R24
00E2 .dbline 67
00E2 1AE0 ldi R17,10
00E4 042F mov R16,R20
00E6 0E940000 xcall div8u
00EA 402F mov R20,R16
00EC .dbline 68
00EC L17:
00EC .dbline 64
00EC 6395 inc R22
00EE L19:
00EE .dbline 64
00EE 6230 cpi R22,2
00F0 38F3 brlo L16
00F2 .dbline 69
; {
; time[1-i]=temp%10+0x30;
; temp=temp/10;
; }
; time[2]=':';
00F2 8AE3 ldi R24,58
00F4 80930400 sts _time+2,R24
00F8 .dbline 70
; temp=minute;
00F8 40910C00 lds R20,_minute
00FC .dbline 71
; for(i=0;i<2;i++)
00FC 6627 clr R22
00FE 17C0 xjmp L24
0100 L21:
0100 .dbline 72
0100 .dbline 73
0100 262E mov R2,R22
0102 3324 clr R3
0104 E4E0 ldi R30,4
0106 F0E0 ldi R31,0
0108 E219 sub R30,R2
010A F309 sbc R31,R3
010C 80E0 ldi R24,<_time
010E 90E0 ldi R25,>_time
0110 E80F add R30,R24
0112 F91F adc R31,R25
0114 1AE0 ldi R17,10
0116 042F mov R16,R20
0118 0E940000 xcall mod8u
011C 802F mov R24,R16
011E 805D subi R24,208 ; addi 48
0120 8083 std z+0,R24
0122 .dbline 74
0122 1AE0 ldi R17,10
0124 042F mov R16,R20
0126 0E940000 xcall div8u
012A 402F mov R20,R16
012C .dbline 75
012C L22:
012C .dbline 71
012C 6395 inc R22
012E L24:
012E .dbline 71
012E 6230 cpi R22,2
0130 38F3 brlo L21
0132 .dbline 76
; {
; time[4-i]=temp%10+0x30;
; temp=temp/10;
; }
; time[5]=':';
0132 8AE3 ldi R24,58
0134 80930700 sts _time+5,R24
0138 .dbline 77
; temp=second;
0138 40910D00 lds R20,_second
013C .dbline 78
; for(i=0;i<2;i++)
013C 6627 clr R22
013E 17C0 xjmp L29
0140 L26:
0140 .dbline 79
0140 .dbline 80
0140 262E mov R2,R22
0142 3324 clr R3
0144 E7E0 ldi R30,7
0146 F0E0 ldi R31,0
0148 E219 sub R30,R2
014A F309 sbc R31,R3
014C 80E0 ldi R24,<_time
014E 90E0 ldi R25,>_time
0150 E80F add R30,R24
0152 F91F adc R31,R25
0154 1AE0 ldi R17,10
0156 042F mov R16,R20
0158 0E940000 xcall mod8u
015C 802F mov R24,R16
015E 805D subi R24,208 ; addi 48
0160 8083 std z+0,R24
0162 .dbline 81
0162 1AE0 ldi R17,10
0164 042F mov R16,R20
0166 0E940000 xcall div8u
016A 402F mov R20,R16
016C .dbline 82
016C L27:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -