📄 timer0.lst
字号:
__text_start:
__start:
001D E5CF LDI R28,0x5F
001E E0D4 LDI R29,4
001F BFCD OUT 0x3D,R28
0020 BFDE OUT 0x3E,R29
0021 51C0 SUBI R28,0x10
0022 40D0 SBCI R29,0
0023 EA0A LDI R16,0xAA
0024 8308 STD Y+0,R16
0025 2400 CLR R0
0026 E6E3 LDI R30,0x63
0027 E0F0 LDI R31,0
0028 E010 LDI R17,0
0029 36E5 CPI R30,0x65
002A 07F1 CPC R31,R17
002B F011 BEQ 0x002E
002C 9201 ST R0,Z+
002D CFFB RJMP 0x0029
002E 8300 STD Z+0,R16
002F E3E6 LDI R30,0x36
0030 E0F0 LDI R31,0
0031 E6A0 LDI R26,0x60
0032 E0B0 LDI R27,0
0033 E010 LDI R17,0
0034 33E9 CPI R30,0x39
0035 07F1 CPC R31,R17
0036 F021 BEQ 0x003B
0037 95C8 LPM
0038 9631 ADIW R30,1
0039 920D ST R0,X+
003A CFF9 RJMP 0x0034
003B D0E8 RCALL _main
_exit:
003C CFFF RJMP _exit
FILE: F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Delay.h
(0001) //延时1MS
(0002) void delay_1ms(void)
(0003) {
(0004) unsigned int i;
(0005) for(i=1;i<(unsigned int)(1144-2);i++)
_delay_1ms:
i --> R16
003D E001 LDI R16,1
003E E010 LDI R17,0
003F C002 RJMP 0x0042
0040 5F0F SUBI R16,0xFF
0041 4F1F SBCI R17,0xFF
0042 3706 CPI R16,0x76
0043 E0E4 LDI R30,4
0044 071E CPC R17,R30
0045 F3D0 BCS 0x0040
(0006) ;
(0007) }
0046 9508 RET
_delay_ms:
i --> R20
n --> R22
0047 D148 RCALL push_gset2
0048 01B8 MOVW R22,R16
(0008)
(0009) //延时nMS
(0010) void delay_ms(unsigned int n)
(0011) {
(0012) unsigned int i=0;
0049 2744 CLR R20
004A 2755 CLR R21
004B C003 RJMP 0x004F
(0013) while(i<n)
(0014) {
(0015) delay_1ms();
004C DFF0 RCALL _delay_1ms
(0016) i++;
004D 5F4F SUBI R20,0xFF
004E 4F5F SBCI R21,0xFF
004F 1746 CP R20,R22
0050 0757 CPC R21,R23
0051 F3D0 BCS 0x004C
(0017) }
(0018) }
0052 D122 RCALL pop_gset2
0053 9508 RET
FILE: F:\Learn\AVR\Pro_Mega8\Timer\Timer0\Timer0.C
(0001) /******************************************/
(0002) //文件名:Timer0.c
(0003) //功能: T/C0和INT0的应用
(0004) //作者: young
(0005) //时间: 2006.10.1
(0006) //目标MCU:ATmega8
(0007) //晶振: 8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010) #include <macros.h>
(0011) #include "Delay.h"
(0012)
(0013) unsigned char KeyDown; //全局变量,用来记录按键按下次数
(0014) unsigned char CountNum; //记录T/C0中断,每中断一次是1/500S
(0015) unsigned char TimeNum[3]={0, 0, 0}; //记录中断时间,分,秒,百分秒
(0016)
(0017) //初始化端口
(0018) void Init_Port(void)
(0019) {
(0020) DDRB=0xFF; //设置B口为输出模式
_Init_Port:
0054 EF8F LDI R24,0xFF
0055 BB87 OUT 0x17,R24
(0021) PORTB=0xFF; //置高电平
0056 BB88 OUT 0x18,R24
(0022) DDRC=0x7F;
0057 E78F LDI R24,0x7F
0058 BB84 OUT 0x14,R24
(0023) PORTC=0x7F;
0059 BB85 OUT 0x15,R24
(0024) DDRD|=0x03;
005A B381 IN R24,0x11
005B 6083 ORI R24,3
005C BB81 OUT 0x11,R24
(0025) PORTD=0xFF;
005D EF8F LDI R24,0xFF
005E BB82 OUT 0x12,R24
(0026) }
005F 9508 RET
(0027)
(0028) //初始化外部中断
(0029) void Init_Int(void)
(0030) {
(0031) MCUCR|=0x02; //INT0下降沿触发
_Init_Int:
0060 B785 IN R24,0x35
0061 6082 ORI R24,2
0062 BF85 OUT 0x35,R24
(0032) GICR|=0x40; //打开INT0中断
0063 B78B IN R24,0x3B
0064 6480 ORI R24,0x40
0065 BF8B OUT 0x3B,R24
(0033) GIFR|=0x40; //清除INT0中断标志位
0066 B78A IN R24,0x3A
0067 6480 ORI R24,0x40
0068 BF8A OUT 0x3A,R24
(0034) }
0069 9508 RET
(0035)
(0036) //初始化T/C0
(0037) void Init_Timer0(void)
(0038) {
(0039) TCCR0=0x00; //T/C0工作于定时方式,先停止T/C0
_Init_Timer0:
006A 2422 CLR R2
006B BE23 OUT 0x33,R2
(0040) TCNT0=0x06; //计数初始值6
006C E086 LDI R24,6
006D BF82 OUT 0x32,R24
(0041) TIMSK|=(1<<TOIE0); //开放TOV0中断
006E B789 IN R24,0x39
006F 6081 ORI R24,1
0070 BF89 OUT 0x39,R24
(0042) }
0071 9508 RET
_Display:
num --> Y+0
i --> R22
timer --> R10
0072 D120 RCALL push_gset3
0073 0158 MOVW R10,R16
0074 972A SBIW R28,0xA
(0043)
(0044) //显示定时时间
(0045) void Display(unsigned char *timer)
(0046) {
(0047) unsigned char i=0;
0075 2766 CLR R22
(0048) unsigned char num[10]={0x3F, 0x06, 0x5B, 0x4F, 0x66,
0076 E286 LDI R24,0x26
0077 E090 LDI R25,0
0078 01FE MOVW R30,R28
0079 E00A LDI R16,0xA
007A E010 LDI R17,0
007B 93FA ST R31,-Y
007C 93EA ST R30,-Y
007D 939A ST R25,-Y
007E 938A ST R24,-Y
007F D11C RCALL asgncblk
(0049) 0x6D, 0x7D, 0x07, 0x7F, 0x6F};
(0050) //依次显示"00:00.00"
(0051) for(i=0; i<6; i++)
0080 C032 RJMP 0x00B3
(0052) {
(0053) PORTC&=~(1<<i);
0081 E001 LDI R16,1
0082 2F16 MOV R17,R22
0083 D112 RCALL lsl8
0084 2E20 MOV R2,R16
0085 9420 COM R2
0086 B235 IN R3,0x15
0087 2032 AND R3,R2
0088 BA35 OUT 0x15,R3
(0054) switch(i)
0089 2F46 MOV R20,R22
008A 2755 CLR R21
008B 3041 CPI R20,1
008C E0E0 LDI R30,0
008D 075E CPC R21,R30
008E F029 BEQ 0x0094
008F 3043 CPI R20,3
0090 E0E0 LDI R30,0
0091 075E CPC R21,R30
0092 F009 BEQ 0x0094
0093 C00D RJMP 0x00A1
(0055) {
(0056) case 1:
(0057) case 3:
(0058) PORTB=num[timer[i]]+0x80;
0094 2FE6 MOV R30,R22
0095 27FF CLR R31
0096 0DEA ADD R30,R10
0097 1DFB ADC R31,R11
0098 81E0 LDD R30,Z+0
0099 27FF CLR R31
009A 01CE MOVW R24,R28
009B 0FE8 ADD R30,R24
009C 1FF9 ADC R31,R25
009D 8180 LDD R24,Z+0
009E 5880 SUBI R24,0x80
009F BB88 OUT 0x18,R24
(0059) break;
00A0 C00B RJMP 0x00AC
(0060) default:
(0061) PORTB=num[timer[i]];
00A1 2FE6 MOV R30,R22
00A2 27FF CLR R31
00A3 0DEA ADD R30,R10
00A4 1DFB ADC R31,R11
00A5 81E0 LDD R30,Z+0
00A6 27FF CLR R31
00A7 01CE MOVW R24,R28
00A8 0FE8 ADD R30,R24
00A9 1FF9 ADC R31,R25
00AA 8020 LDD R2,Z+0
00AB BA28 OUT 0x18,R2
(0062) break;
(0063) }
(0064) delay_ms(1);
00AC E001 LDI R16,1
00AD E010 LDI R17,0
00AE DF98 RCALL _delay_ms
(0065) PORTC|=0xFF;
00AF B385 IN R24,0x15
00B0 6F8F ORI R24,0xFF
00B1 BB85 OUT 0x15,R24
00B2 9563 INC R22
00B3 3066 CPI R22,6
00B4 F408 BCC 0x00B6
00B5 CFCB RJMP 0x0081
(0066) }
(0067) }
00B6 962A ADIW R28,0xA
00B7 D0BF RCALL pop_gset3
00B8 9508 RET
_int0_fun:
00B9 922A ST R2,-Y
00BA 930A ST R16,-Y
00BB 931A ST R17,-Y
00BC 938A ST R24,-Y
00BD 939A ST R25,-Y
00BE 93EA ST R30,-Y
00BF B62F IN R2,0x3F
00C0 922A ST R2,-Y
(0068)
(0069) //INT0中断函数
(0070) #pragma interrupt_handler int0_fun:iv_INT0
(0071) void int0_fun(void)
(0072) {
(0073) KeyDown++;
00C1 91800064 LDS R24,_KeyDown
00C3 5F8F SUBI R24,0xFF
00C4 93800064 STS _KeyDown,R24
(0074) switch(KeyDown)
00C6 2F08 MOV R16,R24
00C7 2711 CLR R17
00C8 3001 CPI R16,1
00C9 E0E0 LDI R30,0
00CA 071E CPC R17,R30
00CB F029 BEQ 0x00D1
00CC 3002 CPI R16,2
00CD E0E0 LDI R30,0
00CE 071E CPC R17,R30
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -