📄 timer2.lis
字号:
.module Timer2.C
.area text(rom, con, rel)
0000 .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2CTC/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 ; //文件名:Timer2CTC.c
0000 ; //功能: T/C2的CTC模式的应用
0000 .dbline 5
0000 ; //作者: young
0000 ; //时间: 2006.10.9
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 ; //初始化端口
0024 4617 cp R20,R22
0026 5707 cpc R21,R23
0028 D0F3 brlo L7
002A .dbline -2
002A .dbline 18
002A ; void init_port(void)
002A ; {
002A ; DDRB = 0x08; //OC2(PB3)设为输出
002A ; PORTB = 0xFF;
002A ; PORTC = 0x00;
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
002E .dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2CTC\Timer2.C
002E .dbfunc e init_port _init_port fV
.even
002E _init_port::
002E .dbline -1
002E .dbline 15
002E .dbline 16
002E 88E0 ldi R24,8
0030 87BB out 0x17,R24
0032 .dbline 17
0032 8FEF ldi R24,255
0034 88BB out 0x18,R24
0036 .dbline 18
0036 2224 clr R2
0038 25BA out 0x15,R2
003A .dbline 19
003A ; DDRC = 0xFF;
003A 84BB out 0x14,R24
003C .dbline 20
003C ; PORTD = 0x00;
003C 22BA out 0x12,R2
003E .dbline 21
003E ; DDRD |= 0xFF;
003E 81B3 in R24,0x11
0040 8F6F ori R24,255
0042 81BB out 0x11,R24
0044 .dbline -2
0044 .dbline 22
0044 ; }
0044 L10:
0044 .dbline 0 ; func end
0044 0895 ret
0046 .dbend
0046 .dbfunc e init_timer2 _init_timer2 fV
.even
0046 _init_timer2::
0046 .dbline -1
0046 .dbline 26
0046 ;
0046 ; //初始化T/C2
0046 ; void init_timer2(void)
0046 ; {
0046 .dbline 27
0046 ; TCCR2 = 0x00; //T/C2工作于定时方式,先停止T/C2
0046 2224 clr R2
0048 25BC out 0x25,R2
004A .dbline 28
004A ; TCNT2 = 0x00; //计数初始值0
004A 24BC out 0x24,R2
004C .dbline 29
004C ; OCR2 = 0xFD; //设置比较参考值
004C 8DEF ldi R24,253
004E 83BD out 0x23,R24
0050 .dbline 30
0050 ; TIMSK|= 0x80; //打开TOV2的比较匹配中断
0050 89B7 in R24,0x39
0052 8068 ori R24,128
0054 89BF out 0x39,R24
0056 .dbline 34
0056 ; //T/C2工作于定时方式CTC(WGM2[1:0]=2),
0056 ; //比较匹配时触发OC2取反(COM2[1:0]=1),
0056 ; //系统时钟256分频(CS2[2:0]=0xC)
0056 ; TCCR2|= (1<<WGM21)|(1<<COM20)|(1<<CS22)|(1<<CS21);
0056 85B5 in R24,0x25
0058 8E61 ori R24,30
005A 85BD out 0x25,R24
005C .dbline -2
005C .dbline 35
005C ; }
005C L11:
005C .dbline 0 ; func end
005C 0895 ret
005E .dbend
005E .dbfunc e init_devices _init_devices fV
.even
005E _init_devices::
005E .dbline -1
005E .dbline 39
005E ;
005E ; //初始化所以硬件
005E ; void init_devices(void)
005E ; {
005E .dbline 40
005E ; CLI(); //关闭全局中断
005E F894 cli
0060 .dbline 41
0060 ; init_port();
0060 E6DF rcall _init_port
0062 .dbline 42
0062 ; init_timer2();
0062 F1DF rcall _init_timer2
0064 .dbline 43
0064 ; SEI(); //打开全局中断
0064 7894 sei
0066 .dbline -2
0066 .dbline 44
0066 ; }
0066 L12:
0066 .dbline 0 ; func end
0066 0895 ret
0068 .dbend
0068 .dbfunc e main _main fV
.even
0068 _main::
0068 .dbline -1
0068 .dbline 48
0068 ;
0068 ; //主函数
0068 ; void main(void)
0068 ; {
0068 .dbline 49
0068 ; init_devices();
0068 FADF rcall _init_devices
006A L14:
006A .dbline 51
006A .dbline 52
006A .dbline 53
006A L15:
006A .dbline 50
006A FFCF rjmp L14
006C X0:
006C .dbline -2
006C .dbline 54
006C ; while(1)
006C ; {
006C ; ;
006C ; }
006C ; }
006C L13:
006C .dbline 0 ; func end
006C 0895 ret
006E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -