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

📄 timer2ctc.lst

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