📄 timer0.lis
字号:
00F2 2A96 adiw R28,10
00F4 00D0 rcall pop_gset3
00F6 .dbline 0 ; func end
00F6 0895 ret
00F8 .dbsym l num 0 A[10:10]c
00F8 .dbsym r i 22 c
00F8 .dbsym r timer 10 pc
00F8 .dbend
.area vector(rom, abs)
.org 2
0002 7CC0 rjmp _int0_fun
.area text(rom, con, rel)
00F8 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
00F8 .dbfunc e int0_fun _int0_fun fV
.even
00F8 _int0_fun::
00F8 2A92 st -y,R2
00FA 0A93 st -y,R16
00FC 1A93 st -y,R17
00FE 8A93 st -y,R24
0100 9A93 st -y,R25
0102 EA93 st -y,R30
0104 2FB6 in R2,0x3f
0106 2A92 st -y,R2
0108 .dbline -1
0108 .dbline 72
0108 ;
0108 ; //INT0中断函数
0108 ; #pragma interrupt_handler int0_fun:iv_INT0
0108 ; void int0_fun(void)
0108 ; {
0108 .dbline 73
0108 ; KeyDown++;
0108 80910100 lds R24,_KeyDown
010C 8F5F subi R24,255 ; addi 1
010E 80930100 sts _KeyDown,R24
0112 .dbline 74
0112 ; switch(KeyDown)
0112 082F mov R16,R24
0114 1127 clr R17
0116 0130 cpi R16,1
0118 E0E0 ldi R30,0
011A 1E07 cpc R17,R30
011C 29F0 breq L27
011E 0230 cpi R16,2
0120 E0E0 ldi R30,0
0122 1E07 cpc R17,R30
0124 31F0 breq L28
0126 08C0 rjmp L24
0128 X2:
0128 .dbline 75
0128 ; {
0128 L27:
0128 .dbline 77
0128 ; case 1:
0128 ; TCNT0=0x06; //计数初始值6
0128 86E0 ldi R24,6
012A 82BF out 0x32,R24
012C .dbline 78
012C ; TCCR0=0x03; //打开T/C0,系统时钟64分频
012C 83E0 ldi R24,3
012E 83BF out 0x33,R24
0130 .dbline 79
0130 ; break;
0130 0CC0 rjmp L25
0132 L28:
0132 .dbline 81
0132 ; case 2:
0132 ; TCCR0=0x00; //关闭T/C0
0132 2224 clr R2
0134 23BE out 0x33,R2
0136 .dbline 82
0136 ; break;
0136 09C0 rjmp L25
0138 L24:
0138 .dbline 84
0138 2224 clr R2
013A 20920200 sts _TimeNum+2,R2
013E 20920100 sts _TimeNum+1,R2
0142 20920000 sts _TimeNum,R2
0146 .dbline 85
0146 20920100 sts _KeyDown,R2
014A .dbline 86
014A L25:
014A .dbline -2
014A .dbline 88
014A ; default:
014A ; TimeNum[0]=TimeNum[1]=TimeNum[2]=0;//计时清零
014A ; KeyDown=0;
014A ; break;
014A ; }
014A ; }
014A L23:
014A 2990 ld R2,y+
014C 2FBE out 0x3f,R2
014E E991 ld R30,y+
0150 9991 ld R25,y+
0152 8991 ld R24,y+
0154 1991 ld R17,y+
0156 0991 ld R16,y+
0158 2990 ld R2,y+
015A .dbline 0 ; func end
015A 1895 reti
015C .dbend
.area vector(rom, abs)
.org 18
0012 AEC0 rjmp _timer0_fun
.area text(rom, con, rel)
015C .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
015C .dbfunc e timer0_fun _timer0_fun fV
.even
015C _timer0_fun::
015C 2A92 st -y,R2
015E 8A93 st -y,R24
0160 9A93 st -y,R25
0162 2FB6 in R2,0x3f
0164 2A92 st -y,R2
0166 .dbline -1
0166 .dbline 93
0166 ;
0166 ; //T/C0中断函数
0166 ; #pragma interrupt_handler timer0_fun:iv_TIMER0_OVF
0166 ; void timer0_fun(void)
0166 ; {
0166 .dbline 94
0166 ; TCNT0=0x06 ; //重装计数初始值6
0166 86E0 ldi R24,6
0168 82BF out 0x32,R24
016A .dbline 95
016A ; if(++CountNum==5)
016A 80910000 lds R24,_CountNum
016E 8F5F subi R24,255 ; addi 1
0170 282E mov R2,R24
0172 20920000 sts _CountNum,R2
0176 8530 cpi R24,5
0178 21F5 brne L32
017A .dbline 96
017A ; {
017A .dbline 97
017A ; CountNum=0; //计数到5次,计数值复位
017A 2224 clr R2
017C 20920000 sts _CountNum,R2
0180 .dbline 98
0180 ; TimeNum[2]++; //秒的百分位加1
0180 80910200 lds R24,_TimeNum+2
0184 8F5F subi R24,255 ; addi 1
0186 80930200 sts _TimeNum+2,R24
018A .dbline 99
018A ; if(TimeNum[2]==100)
018A 8436 cpi R24,100
018C 39F4 brne L35
018E .dbline 100
018E ; {
018E .dbline 101
018E ; TimeNum[2]=0;
018E 20920200 sts _TimeNum+2,R2
0192 .dbline 102
0192 ; TimeNum[1]++; //秒进位
0192 80910100 lds R24,_TimeNum+1
0196 8F5F subi R24,255 ; addi 1
0198 80930100 sts _TimeNum+1,R24
019C .dbline 103
019C ; }
019C L35:
019C .dbline 104
019C ; if(TimeNum[1]==60)
019C 80910100 lds R24,_TimeNum+1
01A0 8C33 cpi R24,60
01A2 41F4 brne L40
01A4 .dbline 105
01A4 ; {
01A4 .dbline 106
01A4 ; TimeNum[1]=0;
01A4 2224 clr R2
01A6 20920100 sts _TimeNum+1,R2
01AA .dbline 107
01AA ; TimeNum[0]++; //分进位
01AA 80910000 lds R24,_TimeNum
01AE 8F5F subi R24,255 ; addi 1
01B0 80930000 sts _TimeNum,R24
01B4 .dbline 108
01B4 ; }
01B4 L40:
01B4 .dbline 109
01B4 ; if(TimeNum[0]==60)
01B4 80910000 lds R24,_TimeNum
01B8 8C33 cpi R24,60
01BA 19F4 brne L44
01BC .dbline 110
01BC ; {
01BC .dbline 111
01BC ; TimeNum[0]=0;
01BC 2224 clr R2
01BE 20920000 sts _TimeNum,R2
01C2 .dbline 112
01C2 ; }
01C2 L44:
01C2 .dbline 113
01C2 L32:
01C2 .dbline -2
01C2 .dbline 114
01C2 ; }
01C2 ; }
01C2 L31:
01C2 2990 ld R2,y+
01C4 2FBE out 0x3f,R2
01C6 9991 ld R25,y+
01C8 8991 ld R24,y+
01CA 2990 ld R2,y+
01CC .dbline 0 ; func end
01CC 1895 reti
01CE .dbend
.area lit(rom, con, rel)
000A L47:
000A 0000 .byte 0,0
000C 0000 .byte 0,0
000E 0000 .byte 0,0
.area text(rom, con, rel)
01CE .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
01CE .dbfunc e main _main fV
01CE ; timer -> y+0
.even
01CE _main::
01CE 2697 sbiw R28,6
01D0 .dbline -1
01D0 .dbline 118
01D0 ;
01D0 ; //主函数
01D0 ; void main()
01D0 ; {
01D0 .dbline 119
01D0 ; unsigned char timer[6]={0, 0, 0, 0, 0, 0};
01D0 80E0 ldi R24,<L47
01D2 90E0 ldi R25,>L47
01D4 FE01 movw R30,R28
01D6 06E0 ldi R16,6
01D8 10E0 ldi R17,0
01DA FA93 st -y,R31
01DC EA93 st -y,R30
01DE 9A93 st -y,R25
01E0 8A93 st -y,R24
01E2 00D0 rcall asgncblk
01E4 .dbline 121
01E4 ;
01E4 ; CLI(); //先关闭全局中断
01E4 F894 cli
01E6 .dbline 122
01E6 ; Init_Port(); //初始化端口
01E6 23DF rcall _Init_Port
01E8 .dbline 123
01E8 ; Init_Int(); //初始化外部中断
01E8 2EDF rcall _Init_Int
01EA .dbline 124
01EA ; Init_Timer0(); //初始化T/C0
01EA 37DF rcall _Init_Timer0
01EC .dbline 126
01EC ;
01EC ; KeyDown=0; //初始化全局变量
01EC 2224 clr R2
01EE 20920100 sts _KeyDown,R2
01F2 .dbline 127
01F2 ; CountNum=0;
01F2 20920000 sts _CountNum,R2
01F6 .dbline 128
01F6 ; SEI(); //打开全局中断
01F6 7894 sei
01F8 20C0 rjmp L49
01FA L48:
01FA .dbline 130
01FA .dbline 131
01FA 1AE0 ldi R17,10
01FC 00910000 lds R16,_TimeNum
0200 00D0 rcall div8u
0202 0883 std y+0,R16
0204 .dbline 132
0204 1AE0 ldi R17,10
0206 00910000 lds R16,_TimeNum
020A 00D0 rcall mod8u
020C 0983 std y+1,R16
020E .dbline 133
020E 1AE0 ldi R17,10
0210 00910100 lds R16,_TimeNum+1
0214 00D0 rcall div8u
0216 0A83 std y+2,R16
0218 .dbline 134
0218 1AE0 ldi R17,10
021A 00910100 lds R16,_TimeNum+1
021E 00D0 rcall mod8u
0220 0B83 std y+3,R16
0222 .dbline 135
0222 1AE0 ldi R17,10
0224 00910200 lds R16,_TimeNum+2
0228 00D0 rcall div8u
022A 0C83 std y+4,R16
022C .dbline 136
022C 1AE0 ldi R17,10
022E 00910200 lds R16,_TimeNum+2
0232 00D0 rcall mod8u
0234 0D83 std y+5,R16
0236 .dbline 137
0236 8E01 movw R16,R28
0238 18DF rcall _Display
023A .dbline 138
023A L49:
023A .dbline 129
023A DFCF rjmp L48
023C X3:
023C .dbline -2
023C .dbline 139
023C ; while (1)
023C ; {
023C ; timer[0]=TimeNum[0]/10;
023C ; timer[1]=TimeNum[0]%10;
023C ; timer[2]=TimeNum[1]/10;
023C ; timer[3]=TimeNum[1]%10;
023C ; timer[4]=TimeNum[2]/10;
023C ; timer[5]=TimeNum[2]%10;
023C ; Display(timer); //显示时间
023C ; }
023C ; }
023C L46:
023C 2696 adiw R28,6
023E .dbline 0 ; func end
023E 0895 ret
0240 .dbsym l timer 0 A[6:6]c
0240 .dbend
.area bss(ram, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
0000 _CountNum::
0000 .blkb 1
0001 .dbsym e CountNum _CountNum c
0001 _KeyDown::
0001 .blkb 1
0002 .dbsym e KeyDown _KeyDown c
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -