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

📄 timer2.s

📁 protues_atmeg8学习之:timer篇源代码
💻 S
字号:
	.module Timer2.C
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2/Delay.h
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 3
; /******************************************/
; //文件名:Timer2.c
; //功能: T/C2和INT0的应用
	.dbline 5
; //作者:  young
; //时间: 2006.10.9
	ldi R16,1
	ldi R17,0
	rjmp L5
L2:
	.dbline 6
L3:
	.dbline 5
	subi R16,255  ; offset = 1
	sbci R17,255
L5:
	.dbline 5
	cpi R16,118
	ldi R30,4
	cpc R17,R30
	brlo L2
	.dbline -2
	.dbline 7
; //目标MCU:ATmega8   
; //晶振:  8MHZ
L1:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_ms::
	rcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 11
; /******************************************/
; #include <iom8v.h>
; #include <macros.h>
; #include "Delay.h"
	.dbline 12
; 
	clr R20
	clr R21
	rjmp L8
L7:
	.dbline 14
	.dbline 15
	rcall _delay_1ms
	.dbline 16
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 17
L8:
	.dbline 13
; #define U8 unsigned char 
	cp R20,R22
	cpc R21,R23
	brlo L7
	.dbline -2
	.dbline 18
; #define U16 unsigned int 
; 
; U8 KeyDown;
; 
; //初始化端口
L6:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2\Timer2.C
	.dbfunc e init_port _init_port fV
	.even
_init_port::
	.dbline -1
	.dbline 20
; void init_port(void)  
; {   
	.dbline 21
;     DDRB  = 0x08; 
	ldi R24,8
	out 0x17,R24
	.dbline 22
;     PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 23
;     PORTC = 0x0F;
	ldi R24,15
	out 0x15,R24
	.dbline 24
;     DDRC  = 0xFF;
	ldi R24,255
	out 0x14,R24
	.dbline 25
;     PORTD = 0x04;
	ldi R24,4
	out 0x12,R24
	.dbline 26
;     DDRD |= 0xFF;
	in R24,0x11
	ori R24,255
	out 0x11,R24
	.dbline -2
	.dbline 27
; }  
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_int _init_int fV
	.even
_init_int::
	.dbline -1
	.dbline 31
; 
; //初始化外部中断
; void init_int(void)
; {
	.dbline 32
;     MCUCR |= 0x02;   //INT0下降沿触发
	in R24,0x35
	ori R24,2
	out 0x35,R24
	.dbline 33
; 	GICR  |= 0x40;   //打开INT0中断
	in R24,0x3b
	ori R24,64
	out 0x3b,R24
	.dbline 34
;     GIFR  |= 0x40;   //清除INT0中断标志位
	in R24,0x3a
	ori R24,64
	out 0x3a,R24
	.dbline -2
	.dbline 35
; }
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_timer2 _init_timer2 fV
	.even
_init_timer2::
	.dbline -1
	.dbline 39
; 
; //初始化T/C2
; void init_timer2(void)  
; {  
	.dbline 40
;     TCCR2 = 0x00;     //T/C2工作于定时方式,先停止T/C0
	clr R2
	out 0x25,R2
	.dbline 41
;     TCNT2 = 0x00;     //计数初始值0
	out 0x24,R2
	.dbline 42
;     OCR2  = 0x00;     //设置比较参考值		
	out 0x23,R2
	.dbline 43
;     TIMSK&= 0x3F;     //关闭TOV2中断	
	in R24,0x39
	andi R24,63
	out 0x39,R24
	.dbline -2
	.dbline 44
; }  
L12:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 48
; 
; //初始化所以硬件 
; void init_devices(void)  
; {
	.dbline 49
;     CLI();          //关闭全局中断
	cli
	.dbline 50
;     init_port();	
	rcall _init_port
	.dbline 51
;     init_int();  
	rcall _init_int
	.dbline 52
;     init_timer2();
	rcall _init_timer2
	.dbline 53
;     SEI();          //打开全局中断
	sei
	.dbline -2
	.dbline 54
; } 
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int0_fun
	.area text(rom, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2\Timer2.C
	.dbfunc e int0_fun _int0_fun fV
	.even
_int0_fun::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 59
; 
; //INT0中断函数
; #pragma interrupt_handler int0_fun:iv_INT0
; void int0_fun(void)
; {
	.dbline 60
;     KeyDown++;	
	lds R24,_KeyDown
	subi R24,255    ; addi 1
	sts _KeyDown,R24
	.dbline -2
	.dbline 61
; }
L14:
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 65
; 
; //主函数
; void main(void)  
; {
	.dbline 66
;     init_devices();  
	rcall _init_devices
	rjmp L17
L16:
	.dbline 68
;     while(1) 
;     { 
	.dbline 69
;         switch(KeyDown)
	lds R20,_KeyDown
	clr R21
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L22
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L23
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L24
	cpi R20,4
	ldi R30,0
	cpc R21,R30
	breq L25
	cpi R20,5
	ldi R30,0
	cpc R21,R30
	breq L26
	cpi R20,6
	ldi R30,0
	cpc R21,R30
	breq L27
	rjmp L19
X0:
	.dbline 70
; 	    {
L22:
	.dbline 74
; 	    case 1:	        
; 		    //打开T/C2,选择相位可调PWM模式
; 			//COM2[1:0]=3正向比较输出,系统时钟64分频			
; 			TCCR2|=(1<<WGM20)|(1<<COM21)|(1<<COM20)|(1<<CS22);			
	in R24,0x25
	ori R24,116
	out 0x25,R24
	.dbline 75
; 		    KeyDown++;
	lds R24,_KeyDown
	subi R24,255    ; addi 1
	sts _KeyDown,R24
	.dbline 76
; 		    break;
	rjmp L20
L23:
	.dbline 78
; 	    case 2:             //恒定第电平	        
;             OCR2 = 0x00; 
	clr R2
	out 0x23,R2
	.dbline 79
; 	        break;
	rjmp L20
L24:
	.dbline 81
; 	    case 3:             //恒定高电平 
; 	        OCR2 = 0xFF;
	ldi R24,255
	out 0x23,R24
	.dbline 82
; 	        break;
	rjmp L20
L25:
	.dbline 84
;         case 4:             //高低电平占空比200:56
; 	        OCR2 = 56;
	ldi R24,56
	out 0x23,R24
	.dbline 85
; 	        break;
	rjmp L20
L26:
	.dbline 87
; 	    case 5:              //高低电平占空比56:200
; 	        OCR2 = 200;
	ldi R24,200
	out 0x23,R24
	.dbline 88
; 	        break;
	rjmp L20
L27:
	.dbline 90
; 	    case 6:
; 		    TCCR2=0x00;      //关闭T/C0
	clr R2
	out 0x25,R2
	.dbline 91
; 			KeyDown=0;
	sts _KeyDown,R2
	.dbline 92
; 		    break;
	rjmp L20
L19:
	.dbline 94
; 	    default:
; 		    KeyDown=0;
	clr R2
	sts _KeyDown,R2
	.dbline 95
; 		    break;		
L20:
	.dbline 97
	lds R2,_KeyDown
	out 0x15,R2
	.dbline 98
	ldi R16,10
	ldi R17,0
	rcall _delay_ms
	.dbline 99
L17:
	.dbline 67
	rjmp L16
X1:
	.dbline -2
	.dbline 100
; 	    }	
; 	    PORTC=KeyDown;
; 		delay_ms(10);
;     }  
; } 
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\Learn\AVR\Pro_Mega8\Timer\Timer2\Timer2.C
_KeyDown::
	.blkb 1
	.dbsym e KeyDown _KeyDown c

⌨️ 快捷键说明

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