📄 timer.lis
字号:
0074 1081 ldd R17,z+0
0076 0AE0 ldi R16,10
0078 00D0 rcall mpy8s
007A E62F mov R30,R22
007C F72F mov R31,R23
007E 2080 ldd R2,z+0
0080 201A sub R2,R16
0082 E42F mov R30,R20
0084 F52F mov R31,R21
0086 2182 std z+1,R2
0088 .dbline 35
0088 ; p2[2]=p1[1]/10;
0088 1AE0 ldi R17,10
008A E62F mov R30,R22
008C F72F mov R31,R23
008E 0181 ldd R16,z+1
0090 00D0 rcall div8u
0092 E42F mov R30,R20
0094 F52F mov R31,R21
0096 0283 std z+2,R16
0098 .dbline 36
0098 ; p2[3]=p1[1]-p2[2]*10;
0098 E42F mov R30,R20
009A F52F mov R31,R21
009C 1281 ldd R17,z+2
009E 0AE0 ldi R16,10
00A0 00D0 rcall mpy8s
00A2 E62F mov R30,R22
00A4 F72F mov R31,R23
00A6 2180 ldd R2,z+1
00A8 201A sub R2,R16
00AA E42F mov R30,R20
00AC F52F mov R31,R21
00AE 2382 std z+3,R2
00B0 .dbline -2
00B0 .dbline 37
00B0 ; }
00B0 L15:
00B0 00D0 rcall pop_gset2
00B2 .dbline 0 ; func end
00B2 0895 ret
00B4 .dbsym r p2 20 pc
00B4 .dbsym r p1 22 pc
00B4 .dbend
00B4 .dbfunc e Init_IO _Init_IO fV
.even
00B4 _Init_IO::
00B4 .dbline -1
00B4 .dbline 40
00B4 ;
00B4 ; void Init_IO(void) //初始化I/O口
00B4 ; {DDRA=0xff; //设置A口为推挽1输出
00B4 .dbline 40
00B4 8FEF ldi R24,255
00B6 8ABB out 0x1a,R24
00B8 .dbline 41
00B8 ; PORTA=0xff;
00B8 8BBB out 0x1b,R24
00BA .dbline 42
00BA ; DDRC=0xff; //设置C口为推挽1输出;
00BA 84BB out 0x14,R24
00BC .dbline 43
00BC ; PORTC=0xff;
00BC 85BB out 0x15,R24
00BE .dbline -2
00BE .dbline 44
00BE ; }
00BE L16:
00BE .dbline 0 ; func end
00BE 0895 ret
00C0 .dbend
00C0 .dbfunc e main _main fV
00C0 ; Load -> <dead>
.even
00C0 _main::
00C0 .dbline -1
00C0 .dbline 47
00C0 ;
00C0 ; void main(void)
00C0 ; {uchar Load;
00C0 .dbline 48
00C0 ; Init_IO(); //初始化I/O口
00C0 F9DF rcall _Init_IO
00C2 .dbline 49
00C2 ; PORTA=0xff; //点亮以测试所有的数码管
00C2 8FEF ldi R24,255
00C4 8BBB out 0x1b,R24
00C6 .dbline 50
00C6 ; PORTC=0x00;
00C6 2224 clr R2
00C8 25BA out 0x15,R2
00CA .dbline 51
00CA ; DelayMs(3000); //延时
00CA 08EB ldi R16,3000
00CC 1BE0 ldi R17,11
00CE 98DF rcall _DelayMs
00D0 .dbline 52
00D0 ; PORTC=0xff; //熄灭所有的数码管
00D0 8FEF ldi R24,255
00D2 85BB out 0x15,R24
00D4 .dbline 53
00D4 ; TCCR0=0x04; //T/C0工作于定时方式,系统时钟256分频
00D4 84E0 ldi R24,4
00D6 83BF out 0x33,R24
00D8 .dbline 54
00D8 ; TCNT0=0x06; //计数初始值6
00D8 86E0 ldi R24,6
00DA 82BF out 0x32,R24
00DC 08C0 rjmp L19
00DE L18:
00DE .dbline 56
00DE .dbline 56
00DE 20E0 ldi R18,<_Data
00E0 30E0 ldi R19,>_Data
00E2 00E0 ldi R16,<_Timer
00E4 10E0 ldi R17,>_Timer
00E6 B9DF rcall _Process
00E8 .dbline 57
00E8 00E0 ldi R16,<_Data
00EA 10E0 ldi R17,>_Data
00EC 9ADF rcall _Display
00EE .dbline 58
00EE L19:
00EE .dbline 55
00EE F7CF rjmp L18
00F0 X2:
00F0 .dbline -2
00F0 .dbline 59
00F0 ; while(1)
00F0 ; {Process(Timer,Data); //计数值处理
00F0 ; Display(Data); //动态扫描显示
00F0 ; }
00F0 ; }
00F0 L17:
00F0 .dbline 0 ; func end
00F0 0895 ret
00F2 .dbsym l Load 1 c
00F2 .dbend
.area vector(rom, abs)
.org 18
0012 79C0 rjmp _Timer0
.area text(rom, con, rel)
00F2 .dbfile C:\DOCUME~1\Administrator\桌面\张军\AVR\AVR单片机系统开发实例稿\第二章\第二章程序\定时计数器的C语言编程\基于TC0的时钟设计\Timer.C
00F2 .dbfunc e Timer0 _Timer0 fV
.even
00F2 _Timer0::
00F2 2A92 st -y,R2
00F4 8A93 st -y,R24
00F6 9A93 st -y,R25
00F8 2FB6 in R2,0x3f
00FA 2A92 st -y,R2
00FC .dbline -1
00FC .dbline 64
00FC ;
00FC ; //********************T/C0中断服务函数********************//
00FC ; #pragma interrupt_handler Timer0:10
00FC ; void Timer0(void)
00FC ; {CNT++; //中断次数累加
00FC .dbline 64
00FC 80910E00 lds R24,_CNT
0100 8F5F subi R24,255 ; addi 1
0102 80930E00 sts _CNT,R24
0106 .dbline 65
0106 ; if(CNT==125)
0106 8D37 cpi R24,125
0108 C1F4 brne L22
010A .dbline 66
010A ; {CNT=0; //计数到125次,计数值复位
010A .dbline 66
010A 2224 clr R2
010C 20920E00 sts _CNT,R2
0110 .dbline 67
0110 ; Timer[1]++; //秒加1
0110 80911000 lds R24,_Timer+1
0114 8F5F subi R24,255 ; addi 1
0116 80931000 sts _Timer+1,R24
011A .dbline 68
011A ; if(Timer[1]==60)
011A 8C33 cpi R24,60
011C 39F4 brne L25
011E .dbline 69
011E ; {Timer[1]=0;
011E .dbline 69
011E 20921000 sts _Timer+1,R2
0122 .dbline 70
0122 ; Timer[0]++;} //分进位
0122 80910F00 lds R24,_Timer
0126 8F5F subi R24,255 ; addi 1
0128 80930F00 sts _Timer,R24
012C .dbline 70
012C L25:
012C .dbline 71
012C ; if(Timer[0]==60)
012C 80910F00 lds R24,_Timer
0130 8C33 cpi R24,60
0132 19F4 brne L29
0134 .dbline 72
0134 2224 clr R2
0136 20920F00 sts _Timer,R2
013A L29:
013A .dbline 72
013A L22:
013A .dbline -2
013A .dbline 73
013A ; Timer[0]=0;} //计数到达最高位,计数复位
013A ; }
013A L21:
013A 2990 ld R2,y+
013C 2FBE out 0x3f,R2
013E 9991 ld R25,y+
0140 8991 ld R24,y+
0142 2990 ld R2,y+
0144 .dbline 0 ; func end
0144 1895 reti
0146 .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -