⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer2.lis

📁 protues_atmeg8学习之:timer篇源代码
💻 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 + -