📄 timer0.lis
字号:
.module Timer0.C
.area text(rom, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0/Delay.h
0000 .dbfunc e delay_1ms _delay_1ms fV
0000 ; i -> R16,R17
.even
0000 _delay_1ms::
0000 .dbline -1
0000 .dbline 3
0000 ; /******************************************/
0000 ; //文件名:Timer0.c
0000 ; //功能: T/C0和INT0的应用
0000 .dbline 5
0000 ; //作者: young
0000 ; //时间: 2006.10.1
0000 01E0 ldi R16,1
0002 10E0 ldi R17,0
0004 02C0 rjmp L5
0006 L2:
0006 .dbline 6
0006 L3:
0006 .dbline 5
0006 0F5F subi R16,255 ; offset = 1
0008 1F4F sbci R17,255
000A L5:
000A .dbline 5
000A 0637 cpi R16,118
000C E4E0 ldi R30,4
000E 1E07 cpc R17,R30
0010 D0F3 brlo L2
0012 .dbline -2
0012 .dbline 7
0012 ; //目标MCU:ATmega8
0012 ; //晶振: 8MHZ
0012 L1:
0012 .dbline 0 ; func end
0012 0895 ret
0014 .dbsym r i 16 i
0014 .dbend
0014 .dbfunc e delay_ms _delay_ms fV
0014 ; i -> R20,R21
0014 ; n -> R22,R23
.even
0014 _delay_ms::
0014 00D0 rcall push_gset2
0016 B801 movw R22,R16
0018 .dbline -1
0018 .dbline 11
0018 ; /******************************************/
0018 ; #include <iom8v.h>
0018 ; #include <macros.h>
0018 ; #include "Delay.h"
0018 .dbline 12
0018 ;
0018 4427 clr R20
001A 5527 clr R21
001C 03C0 rjmp L8
001E L7:
001E .dbline 14
001E .dbline 15
001E F0DF rcall _delay_1ms
0020 .dbline 16
0020 4F5F subi R20,255 ; offset = 1
0022 5F4F sbci R21,255
0024 .dbline 17
0024 L8:
0024 .dbline 13
0024 ; unsigned char KeyDown; //全局变量,用来记录按键按下次数
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D0F3 brlo L7
002A .dbline -2
002A .dbline 18
002A ; unsigned char CountNum; //记录T/C0中断,每中断一次是1/500S
002A ; unsigned char TimeNum[3]={0, 0, 0}; //记录中断时间,分,秒,百分秒
002A ;
002A ; //初始化端口
002A ; void Init_Port(void)
002A L6:
002A 00D0 rcall pop_gset2
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r i 20 i
002E .dbsym r n 22 i
002E .dbend
.area data(ram, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0/Delay.h
0000 _TimeNum::
0000 .blkb 2
.area idata
0000 0000 .byte 0,0
.area data(ram, con, rel)
0002 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0/Delay.h
0002 .blkb 1
.area idata
0002 00 .byte 0
.area data(ram, con, rel)
0003 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0/Delay.h
0003 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
0003 .dbsym e TimeNum _TimeNum A[3:3]c
.area text(rom, con, rel)
002E .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
002E .dbfunc e Init_Port _Init_Port fV
.even
002E _Init_Port::
002E .dbline -1
002E .dbline 19
002E ; {
002E .dbline 20
002E ; DDRB=0xFF; //设置B口为输出模式
002E 8FEF ldi R24,255
0030 87BB out 0x17,R24
0032 .dbline 21
0032 ; PORTB=0xFF; //置高电平
0032 88BB out 0x18,R24
0034 .dbline 22
0034 ; DDRC=0x7F;
0034 8FE7 ldi R24,127
0036 84BB out 0x14,R24
0038 .dbline 23
0038 ; PORTC=0x7F;
0038 85BB out 0x15,R24
003A .dbline 24
003A ; DDRD|=0x03;
003A 81B3 in R24,0x11
003C 8360 ori R24,3
003E 81BB out 0x11,R24
0040 .dbline 25
0040 ; PORTD=0xFF;
0040 8FEF ldi R24,255
0042 82BB out 0x12,R24
0044 .dbline -2
0044 .dbline 26
0044 ; }
0044 L10:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
0046 .dbfunc e Init_Int _Init_Int fV
.even
0046 _Init_Int::
0046 .dbline -1
0046 .dbline 30
0046 ;
0046 ; //初始化外部中断
0046 ; void Init_Int(void)
0046 ; {
0046 .dbline 31
0046 ; MCUCR|=0x02; //INT0下降沿触发
0046 85B7 in R24,0x35
0048 8260 ori R24,2
004A 85BF out 0x35,R24
004C .dbline 32
004C ; GICR|=0x40; //打开INT0中断
004C 8BB7 in R24,0x3b
004E 8064 ori R24,64
0050 8BBF out 0x3b,R24
0052 .dbline 33
0052 ; GIFR|=0x40; //清除INT0中断标志位
0052 8AB7 in R24,0x3a
0054 8064 ori R24,64
0056 8ABF out 0x3a,R24
0058 .dbline -2
0058 .dbline 34
0058 ; }
0058 L11:
0058 .dbline 0 ; func end
0058 0895 ret
005A .dbend
005A .dbfunc e Init_Timer0 _Init_Timer0 fV
.even
005A _Init_Timer0::
005A .dbline -1
005A .dbline 38
005A ;
005A ; //初始化T/C0
005A ; void Init_Timer0(void)
005A ; {
005A .dbline 39
005A ; TCCR0=0x00; //T/C0工作于定时方式,先停止T/C0
005A 2224 clr R2
005C 23BE out 0x33,R2
005E .dbline 40
005E ; TCNT0=0x06; //计数初始值6
005E 86E0 ldi R24,6
0060 82BF out 0x32,R24
0062 .dbline 41
0062 ; TIMSK|=(1<<TOIE0); //开放TOV0中断
0062 89B7 in R24,0x39
0064 8160 ori R24,1
0066 89BF out 0x39,R24
0068 .dbline -2
0068 .dbline 42
0068 ; }
0068 L12:
0068 .dbline 0 ; func end
0068 0895 ret
006A .dbend
.area lit(rom, con, rel)
0000 L14:
0000 3F06 .byte 63,6
0002 5B4F .byte 91,'O
0004 666D .byte 'f,'m
0006 7D07 .byte 125,7
0008 7F6F .byte 127,'o
.area text(rom, con, rel)
006A .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
006A .dbfunc e Display _Display fV
006A ; num -> y+0
006A ; i -> R22
006A ; timer -> R10,R11
.even
006A _Display::
006A 00D0 rcall push_gset3
006C 5801 movw R10,R16
006E 2A97 sbiw R28,10
0070 .dbline -1
0070 .dbline 46
0070 ;
0070 ; //显示定时时间
0070 ; void Display(unsigned char *timer)
0070 ; {
0070 .dbline 47
0070 ; unsigned char i=0;
0070 6627 clr R22
0072 .dbline 48
0072 ; unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66,
0072 80E0 ldi R24,<L14
0074 90E0 ldi R25,>L14
0076 FE01 movw R30,R28
0078 0AE0 ldi R16,10
007A 10E0 ldi R17,0
007C FA93 st -y,R31
007E EA93 st -y,R30
0080 9A93 st -y,R25
0082 8A93 st -y,R24
0084 00D0 rcall asgncblk
0086 .dbline 51
0086 ; 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
0086 ; //依次显示"00:00.00"
0086 ; for(i=0; i<6; i++)
0086 32C0 rjmp L18
0088 L15:
0088 .dbline 52
0088 ; {
0088 .dbline 53
0088 ; PORTC&=~(1<<i);
0088 01E0 ldi R16,1
008A 162F mov R17,R22
008C 00D0 rcall lsl8
008E 202E mov R2,R16
0090 2094 com R2
0092 35B2 in R3,0x15
0094 3220 and R3,R2
0096 35BA out 0x15,R3
0098 .dbline 54
0098 ; switch(i)
0098 462F mov R20,R22
009A 5527 clr R21
009C 4130 cpi R20,1
009E E0E0 ldi R30,0
00A0 5E07 cpc R21,R30
00A2 29F0 breq L22
00A4 4330 cpi R20,3
00A6 E0E0 ldi R30,0
00A8 5E07 cpc R21,R30
00AA 09F0 breq L22
00AC 0DC0 rjmp L19
00AE X0:
00AE .dbline 55
00AE ; {
00AE L22:
00AE .dbline 58
00AE ; case 1:
00AE ; case 3:
00AE ; PORTB=num[timer[i]]+0x80;
00AE E62F mov R30,R22
00B0 FF27 clr R31
00B2 EA0D add R30,R10
00B4 FB1D adc R31,R11
00B6 E081 ldd R30,z+0
00B8 FF27 clr R31
00BA CE01 movw R24,R28
00BC E80F add R30,R24
00BE F91F adc R31,R25
00C0 8081 ldd R24,z+0
00C2 8058 subi R24,128 ; addi 128
00C4 88BB out 0x18,R24
00C6 .dbline 59
00C6 ; break;
00C6 0BC0 rjmp L20
00C8 L19:
00C8 .dbline 61
00C8 ; default:
00C8 ; PORTB=num[timer[i]];
00C8 E62F mov R30,R22
00CA FF27 clr R31
00CC EA0D add R30,R10
00CE FB1D adc R31,R11
00D0 E081 ldd R30,z+0
00D2 FF27 clr R31
00D4 CE01 movw R24,R28
00D6 E80F add R30,R24
00D8 F91F adc R31,R25
00DA 2080 ldd R2,z+0
00DC 28BA out 0x18,R2
00DE .dbline 62
00DE ; break;
00DE L20:
00DE .dbline 64
00DE 01E0 ldi R16,1
00E0 10E0 ldi R17,0
00E2 98DF rcall _delay_ms
00E4 .dbline 65
00E4 85B3 in R24,0x15
00E6 8F6F ori R24,255
00E8 85BB out 0x15,R24
00EA .dbline 66
00EA L16:
00EA .dbline 51
00EA 6395 inc R22
00EC L18:
00EC .dbline 51
00EC 6630 cpi R22,6
00EE 08F4 brsh X1
00F0 CBCF rjmp L15
00F2 X1:
00F2 .dbline -2
00F2 .dbline 67
00F2 ; }
00F2 ; delay_ms(1);
00F2 ; PORTC|=0xFF;
00F2 ; }
00F2 ; }
00F2 L13:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -