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

📄 timer2.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 36E1      CPI	R30,0x61
    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 D04C      RCALL	_main
_exit:
    0032 CFFF      RJMP	_exit
FILE: F:\Learn\AVR\Pro_Mega8\Timer\Timer2\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 D09C      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 D078      RCALL	pop_gset2
    0049 9508      RET
FILE: F:\Learn\AVR\Pro_Mega8\Timer\Timer2\Timer2.C
(0001) /******************************************/
(0002) //文件名:Timer2.c
(0003) //功能: T/C2和INT0的应用
(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) #define U8 unsigned char 
(0014) #define U16 unsigned int 
(0015) 
(0016) U8 KeyDown;
(0017) 
(0018) //初始化端口
(0019) void init_port(void)  
(0020) {   
(0021)     DDRB  = 0x08; 
_init_port:
    004A E088      LDI	R24,0x8
    004B BB87      OUT	0x17,R24
(0022)     PORTB = 0xFF;
    004C EF8F      LDI	R24,0xFF
    004D BB88      OUT	0x18,R24
(0023)     PORTC = 0x0F;
    004E E08F      LDI	R24,0xF
    004F BB85      OUT	0x15,R24
(0024)     DDRC  = 0xFF;
    0050 EF8F      LDI	R24,0xFF
    0051 BB84      OUT	0x14,R24
(0025)     PORTD = 0x04;
    0052 E084      LDI	R24,4
    0053 BB82      OUT	0x12,R24
(0026)     DDRD |= 0xFF;
    0054 B381      IN	R24,0x11
    0055 6F8F      ORI	R24,0xFF
    0056 BB81      OUT	0x11,R24
(0027) }  
    0057 9508      RET
(0028) 
(0029) //初始化外部中断
(0030) void init_int(void)
(0031) {
(0032)     MCUCR |= 0x02;   //INT0下降沿触发
_init_int:
    0058 B785      IN	R24,0x35
    0059 6082      ORI	R24,2
    005A BF85      OUT	0x35,R24
(0033) 	GICR  |= 0x40;   //打开INT0中断
    005B B78B      IN	R24,0x3B
    005C 6480      ORI	R24,0x40
    005D BF8B      OUT	0x3B,R24
(0034)     GIFR  |= 0x40;   //清除INT0中断标志位
    005E B78A      IN	R24,0x3A
    005F 6480      ORI	R24,0x40
    0060 BF8A      OUT	0x3A,R24
(0035) }
    0061 9508      RET
(0036) 
(0037) //初始化T/C2
(0038) void init_timer2(void)  
(0039) {  
(0040)     TCCR2 = 0x00;     //T/C2工作于定时方式,先停止T/C0
_init_timer2:
    0062 2422      CLR	R2
    0063 BC25      OUT	0x25,R2
(0041)     TCNT2 = 0x00;     //计数初始值0
    0064 BC24      OUT	0x24,R2
(0042)     OCR2  = 0x00;     //设置比较参考值		
    0065 BC23      OUT	0x23,R2
(0043)     TIMSK&= 0x3F;     //关闭TOV2中断	
    0066 B789      IN	R24,0x39
    0067 738F      ANDI	R24,0x3F
    0068 BF89      OUT	0x39,R24
(0044) }  
    0069 9508      RET
(0045) 
(0046) //初始化所以硬件 
(0047) void init_devices(void)  
(0048) {
(0049)     CLI();          //关闭全局中断
_init_devices:
    006A 94F8      BCLR	7
(0050)     init_port();	
    006B DFDE      RCALL	_init_port
(0051)     init_int();  
    006C DFEB      RCALL	_init_int
(0052)     init_timer2();
    006D DFF4      RCALL	_init_timer2
(0053)     SEI();          //打开全局中断
    006E 9478      BSET	7
(0054) } 
    006F 9508      RET
_int0_fun:
    0070 938A      ST	R24,-Y
    0071 939A      ST	R25,-Y
    0072 B78F      IN	R24,0x3F
    0073 938A      ST	R24,-Y
(0055) 
(0056) //INT0中断函数
(0057) #pragma interrupt_handler int0_fun:iv_INT0
(0058) void int0_fun(void)
(0059) {
(0060)     KeyDown++;	
    0074 91800060  LDS	R24,_KeyDown
    0076 5F8F      SUBI	R24,0xFF
    0077 93800060  STS	_KeyDown,R24
(0061) }
    0079 9189      LD	R24,Y+
    007A BF8F      OUT	0x3F,R24
    007B 9199      LD	R25,Y+
    007C 9189      LD	R24,Y+
    007D 9518      RETI
(0062) 
(0063) //主函数
(0064) void main(void)  
(0065) {
(0066)     init_devices();  
_main:
    007E DFEB      RCALL	_init_devices
    007F C03F      RJMP	0x00BF
(0067)     while(1) 
(0068)     { 
(0069)         switch(KeyDown)
    0080 91400060  LDS	R20,_KeyDown
    0082 2755      CLR	R21
    0083 3041      CPI	R20,1
    0084 E0E0      LDI	R30,0
    0085 075E      CPC	R21,R30
    0086 F0A9      BEQ	0x009C
    0087 3042      CPI	R20,2
    0088 E0E0      LDI	R30,0
    0089 075E      CPC	R21,R30
    008A F0D1      BEQ	0x00A5
    008B 3043      CPI	R20,3
    008C E0E0      LDI	R30,0
    008D 075E      CPC	R21,R30
    008E F0C9      BEQ	0x00A8
    008F 3044      CPI	R20,4
    0090 E0E0      LDI	R30,0
    0091 075E      CPC	R21,R30
    0092 F0C1      BEQ	0x00AB
    0093 3045      CPI	R20,5
    0094 E0E0      LDI	R30,0
    0095 075E      CPC	R21,R30
    0096 F0B9      BEQ	0x00AE
    0097 3046      CPI	R20,6
    0098 E0E0      LDI	R30,0
    0099 075E      CPC	R21,R30
    009A F0B1      BEQ	0x00B1
    009B C01A      RJMP	0x00B6
(0070) 	    {
(0071) 	    case 1:	        
(0072) 		    //打开T/C2,选择相位可调PWM模式
(0073) 			//COM2[1:0]=3正向比较输出,系统时钟64分频			
(0074) 			TCCR2|=(1<<WGM20)|(1<<COM21)|(1<<COM20)|(1<<CS22);			
    009C B585      IN	R24,0x25
    009D 6784      ORI	R24,0x74
    009E BD85      OUT	0x25,R24
(0075) 		    KeyDown++;
    009F 91800060  LDS	R24,_KeyDown
    00A1 5F8F      SUBI	R24,0xFF
    00A2 93800060  STS	_KeyDown,R24
(0076) 		    break;
    00A4 C014      RJMP	0x00B9
(0077) 	    case 2:             //恒定第电平	        
(0078)             OCR2 = 0x00; 
    00A5 2422      CLR	R2
    00A6 BC23      OUT	0x23,R2
(0079) 	        break;
    00A7 C011      RJMP	0x00B9
(0080) 	    case 3:             //恒定高电平 
(0081) 	        OCR2 = 0xFF;
    00A8 EF8F      LDI	R24,0xFF
    00A9 BD83      OUT	0x23,R24
(0082) 	        break;
    00AA C00E      RJMP	0x00B9
(0083)         case 4:             //高低电平占空比200:56
(0084) 	        OCR2 = 56;
    00AB E388      LDI	R24,0x38
    00AC BD83      OUT	0x23,R24
(0085) 	        break;
    00AD C00B      RJMP	0x00B9
(0086) 	    case 5:              //高低电平占空比56:200
(0087) 	        OCR2 = 200;
    00AE EC88      LDI	R24,0xC8
    00AF BD83      OUT	0x23,R24
(0088) 	        break;
    00B0 C008      RJMP	0x00B9
(0089) 	    case 6:
(0090) 		    TCCR2=0x00;      //关闭T/C0
    00B1 2422      CLR	R2
    00B2 BC25      OUT	0x25,R2
(0091) 			KeyDown=0;
    00B3 92200060  STS	_KeyDown,R2
(0092) 		    break;
    00B5 C003      RJMP	0x00B9
(0093) 	    default:
(0094) 		    KeyDown=0;
    00B6 2422      CLR	R2
    00B7 92200060  STS	_KeyDown,R2
(0095) 		    break;		
(0096) 	    }	
(0097) 	    PORTC=KeyDown;
    00B9 90200060  LDS	R2,_KeyDown
    00BB BA25      OUT	0x15,R2
(0098) 		delay_ms(10);
    00BC E00A      LDI	R16,0xA
    00BD E010      LDI	R17,0
    00BE DF7E      RCALL	_delay_ms
    00BF CFC0      RJMP	0x0080
(0099)     }  
(0100) } 
FILE: <library>
    00C0 9508      RET
pop_gset2:
    00C1 E0E2      LDI	R30,2
    00C2 C004      RJMP	pop
push_gset1:
    00C3 935A      ST	R21,-Y
    00C4 934A      ST	R20,-Y
    00C5 9508      RET
pop_gset1:
    00C6 E0E1      LDI	R30,1
pop:
    00C7 9149      LD	R20,Y+
    00C8 9159      LD	R21,Y+
    00C9 FDE0      SBRC	R30,0
    00CA 9508      RET
    00CB 9169      LD	R22,Y+
    00CC 9179      LD	R23,Y+
    00CD FDE1      SBRC	R30,1
    00CE 9508      RET
    00CF 90A9      LD	R10,Y+
    00D0 90B9      LD	R11,Y+
    00D1 FDE2      SBRC	R30,2
    00D2 9508      RET
    00D3 90C9      LD	R12,Y+
    00D4 90D9      LD	R13,Y+
    00D5 FDE3      SBRC	R30,3
    00D6 9508      RET
    00D7 90E9      LD	R14,Y+
    00D8 90F9      LD	R15,Y+
    00D9 9508      RET
push_gset2:
    00DA 937A      ST	R23,-Y
    00DB 936A      ST	R22,-Y
    00DC CFE6      RJMP	push_gset1

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -