📄 timer2ctc.lst
字号:
__start:
__text_start:
0013 E5CF LDI R28,0x5F
0014 E0D4 LDI R29,4
0015 BFCD OUT 0x3D,R28
0016 BFDE OUT 0x3E,R29
0017 51C0 SUBI R28,0x10
0018 40D0 SBCI R29,0
0019 EA0A LDI R16,0xAA
001A 8308 STD Y+0,R16
001B 2400 CLR R0
001C E6E0 LDI R30,0x60
001D E0F0 LDI R31,0
001E E010 LDI R17,0
001F 36E0 CPI R30,0x60
0020 07F1 CPC R31,R17
0021 F011 BEQ 0x0024
0022 9201 ST R0,Z+
0023 CFFB RJMP 0x001F
0024 8300 STD Z+0,R16
0025 E2E6 LDI R30,0x26
0026 E0F0 LDI R31,0
0027 E6A0 LDI R26,0x60
0028 E0B0 LDI R27,0
0029 E010 LDI R17,0
002A 32E6 CPI R30,0x26
002B 07F1 CPC R31,R17
002C F021 BEQ 0x0031
002D 95C8 LPM
002E 9631 ADIW R30,1
002F 920D ST R0,X+
0030 CFF9 RJMP 0x002A
0031 D035 RCALL _main
_exit:
0032 CFFF RJMP _exit
FILE: F:\Learn\AVR\Pro_Mega8\Timer\Timer2CTC\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
0033 E001 LDI R16,1
0034 E010 LDI R17,0
0035 C002 RJMP 0x0038
0036 5F0F SUBI R16,0xFF
0037 4F1F SBCI R17,0xFF
0038 3706 CPI R16,0x76
0039 E0E4 LDI R30,4
003A 071E CPC R17,R30
003B F3D0 BCS 0x0036
(0006) ;
(0007) }
003C 9508 RET
_delay_ms:
i --> R20
n --> R22
003D D045 RCALL push_gset2
003E 01B8 MOVW R22,R16
(0008)
(0009) //延时nMS
(0010) void delay_ms(unsigned int n)
(0011) {
(0012) unsigned int i=0;
003F 2744 CLR R20
0040 2755 CLR R21
0041 C003 RJMP 0x0045
(0013) while(i<n)
(0014) {
(0015) delay_1ms();
0042 DFF0 RCALL _delay_1ms
(0016) i++;
0043 5F4F SUBI R20,0xFF
0044 4F5F SBCI R21,0xFF
0045 1746 CP R20,R22
0046 0757 CPC R21,R23
0047 F3D0 BCS 0x0042
(0017) }
(0018) }
0048 D021 RCALL pop_gset2
0049 9508 RET
FILE: F:\Learn\AVR\Pro_Mega8\Timer\Timer2CTC\Timer2.C
(0001) /******************************************/
(0002) //文件名:Timer2CTC.c
(0003) //功能: T/C2的CTC模式的应用
(0004) //作者: young
(0005) //时间: 2006.10.9
(0006) //目标MCU:ATmega8
(0007) //晶振: 8MHZ
(0008) /******************************************/
(0009) #include <iom8v.h>
(0010) #include <macros.h>
(0011) #include "Delay.h"
(0012)
(0013) //初始化端口
(0014) void init_port(void)
(0015) {
(0016) DDRB = 0x08; //OC2(PB3)设为输出
_init_port:
004A E088 LDI R24,0x8
004B BB87 OUT 0x17,R24
(0017) PORTB = 0xFF;
004C EF8F LDI R24,0xFF
004D BB88 OUT 0x18,R24
(0018) PORTC = 0x00;
004E 2422 CLR R2
004F BA25 OUT 0x15,R2
(0019) DDRC = 0xFF;
0050 BB84 OUT 0x14,R24
(0020) PORTD = 0x00;
0051 BA22 OUT 0x12,R2
(0021) DDRD |= 0xFF;
0052 B381 IN R24,0x11
0053 6F8F ORI R24,0xFF
0054 BB81 OUT 0x11,R24
(0022) }
0055 9508 RET
(0023)
(0024) //初始化T/C2
(0025) void init_timer2(void)
(0026) {
(0027) TCCR2 = 0x00; //T/C2工作于定时方式,先停止T/C2
_init_timer2:
0056 2422 CLR R2
0057 BC25 OUT 0x25,R2
(0028) TCNT2 = 0x00; //计数初始值0
0058 BC24 OUT 0x24,R2
(0029) OCR2 = 0xFD; //设置比较参考值
0059 EF8D LDI R24,0xFD
005A BD83 OUT 0x23,R24
(0030) TIMSK|= 0x80; //打开TOV2的比较匹配中断
005B B789 IN R24,0x39
005C 6880 ORI R24,0x80
005D BF89 OUT 0x39,R24
(0031) //T/C2工作于定时方式CTC(WGM2[1:0]=2),
(0032) //比较匹配时触发OC2取反(COM2[1:0]=1),
(0033) //系统时钟256分频(CS2[2:0]=0xC)
(0034) TCCR2|= (1<<WGM21)|(1<<COM20)|(1<<CS22)|(1<<CS21);
005E B585 IN R24,0x25
005F 618E ORI R24,0x1E
0060 BD85 OUT 0x25,R24
(0035) }
0061 9508 RET
(0036)
(0037) //初始化所以硬件
(0038) void init_devices(void)
(0039) {
(0040) CLI(); //关闭全局中断
_init_devices:
0062 94F8 BCLR 7
(0041) init_port();
0063 DFE6 RCALL _init_port
(0042) init_timer2();
0064 DFF1 RCALL _init_timer2
(0043) SEI(); //打开全局中断
0065 9478 BSET 7
(0044) }
0066 9508 RET
(0045)
(0046) //主函数
(0047) void main(void)
(0048) {
(0049) init_devices();
_main:
0067 DFFA RCALL _init_devices
(0050) while(1)
0068 CFFF RJMP 0x0068
(0051) {
(0052) ;
(0053) }
(0054) }
FILE: <library>
0069 9508 RET
pop_gset2:
006A E0E2 LDI R30,2
006B C004 RJMP pop
push_gset1:
006C 935A ST R21,-Y
006D 934A ST R20,-Y
006E 9508 RET
pop_gset1:
006F E0E1 LDI R30,1
pop:
0070 9149 LD R20,Y+
0071 9159 LD R21,Y+
0072 FDE0 SBRC R30,0
0073 9508 RET
0074 9169 LD R22,Y+
0075 9179 LD R23,Y+
0076 FDE1 SBRC R30,1
0077 9508 RET
0078 90A9 LD R10,Y+
0079 90B9 LD R11,Y+
007A FDE2 SBRC R30,2
007B 9508 RET
007C 90C9 LD R12,Y+
007D 90D9 LD R13,Y+
007E FDE3 SBRC R30,3
007F 9508 RET
0080 90E9 LD R14,Y+
0081 90F9 LD R15,Y+
0082 9508 RET
push_gset2:
0083 937A ST R23,-Y
0084 936A ST R22,-Y
0085 CFE6 RJMP push_gset1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -