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

📄 q1.s

📁 我学习AVR的代码例子
💻 S
字号:
	.module q1.c
	.area data(ram, con, rel)
_i::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile q1.c
	.dbsym e i _i c
	.area text(rom, con, rel)
	.dbfile q1.c
	.dbfunc e delay_2us _delay_2us fV
;           time -> R16,R17
	.even
_delay_2us::
	.dbline -1
	.dbline 14
; #include "iom16v.h"
; #define LOBYTE(a) ((BYTE)(a&0x0f))
; #define HIBYTE(a) ((BYTE)((a)>>4))
; #define _asm asm
; #define WDR() 	asm("wdr")
; #define SEI()	asm("sei")
; #define CLI()	asm("cli")
; #define NOP()	asm("nop")
; #define SLEEP() asm("sleep")
; #define led_on() (PORTA =0x00)
; #define led_off() (PORTA =0xff)
; char i=0;
; void delay_2us(int time)//微秒级延时程序
;  {     
L2:
	.dbline 16
;    do
; 	 {
	.dbline 17
; 	   time--;
	subi R16,1
	sbci R17,0
	.dbline 19
; 	   //WDR();
; 	 }	
L3:
	.dbline 20
;    while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L2
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 23
;  }	   
; void delay_ms(unsigned int time)//毫秒级延时程序
;  {
	xjmp L7
L6:
	.dbline 25
	.dbline 26
	ldi R16,500
	ldi R17,1
	xcall _delay_2us
	.dbline 27
	subi R20,1
	sbci R21,0
	.dbline 28
L7:
	.dbline 24
;    while(time!=0)
	cpi R20,0
	cpc R20,R21
	brne L6
X0:
	.dbline -2
L5:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 32
; 	 {		
; 	   delay_2us(500);
; 	   time--;
; 	 }
;    //WDR();
;  }
; void port_init(void)
;  {
	.dbline 33
;    DDRA  = 0xff;
	ldi R24,255
	out 0x1a,R24
	.dbline 34
;    PORTA  = 0x00;
	clr R2
	out 0x1b,R2
	.dbline -2
L9:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e T_init _T_init fV
	.even
_T_init::
	.dbline -1
	.dbline 37
;  }
; void T_init(void)
;  {
	.dbline 38
;    TCCR1A=0x00;
	clr R2
	out 0x2f,R2
	.dbline 39
;    TCCR1B=0x00;       //停止定时器1
	out 0x2e,R2
	.dbline 41
;    
;    TCNT1H=0xc2;
	ldi R24,194
	out 0x2d,R24
	.dbline 42
;    TCNT1L=0xf7;       //定时0.5s
	ldi R24,247
	out 0x2c,R24
	.dbline 44
;    
;    TCCR1B=0x04;       //256分频
	ldi R24,4
	out 0x2e,R24
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf
	.area text(rom, con, rel)
	.dbfile q1.c
	.dbfunc e timer1_ovf _timer1_ovf fV
	.even
_timer1_ovf::
	st -y,R2
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 49
;    
;  }
; #pragma interrupt_handler timer1_ovf:9
; void timer1_ovf(void)                    //位闪动即修改
;  {
	.dbline 50
;    TCNT1H=0xc2;
	ldi R24,194
	out 0x2d,R24
	.dbline 51
;    TCNT1L=0xf7;
	ldi R24,247
	out 0x2c,R24
	.dbline 52
;    TCCR1B=0x04;
	ldi R24,4
	out 0x2e,R24
	.dbline 53
;    if(i==1){i=0;led_on();}
	lds R24,_i
	cpi R24,1
	brne L12
	.dbline 53
	.dbline 53
	clr R2
	sts _i,R2
	.dbline 53
	out 0x1b,R2
	.dbline 53
	xjmp L13
L12:
	.dbline 54
	.dbline 54
	ldi R24,1
	sts _i,R24
	.dbline 54
	ldi R24,255
	out 0x1b,R24
	.dbline 54
L13:
	.dbline -2
L11:
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 57
;    else {i=1;led_off();}
;  }
; void main(void)
;  {
	.dbline 58
;    port_init();
	xcall _port_init
	.dbline 59
;    T_init();
	xcall _T_init
	.dbline 60
;    TIMSK=0X45;
	ldi R24,69
	out 0x39,R24
	.dbline 61
;    SEI();
	sei
	xjmp L16
L15:
	.dbline 63
	.dbline 64
	ldi R16,1000
	ldi R17,3
	xcall _delay_ms
	.dbline 68
L16:
	.dbline 62
	xjmp L15
X1:
	.dbline -2
L14:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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