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

📄 io.s

📁 这是关于AVR单片机学习的初步开发
💻 S
字号:
	.module io.c
	.area text(rom, con, rel)
	.dbfile E:\wu\单片机教学\IO实验程序\io.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 9
; //ICC-AVR application builder : 2005-3-1 6:11:41
; // Target : M8
; // Crystal: 11.059Mhz
; 
; #include <iom8v.h>
; #include <macros.h>
; 
; void port_init(void)
; {
	.dbline 10
;  PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 11
;  DDRB  = 0x00;
	clr R2
	out 0x17,R2
	.dbline 12
;  PORTC = 0x7F; //m103 output only
	ldi R24,127
	out 0x15,R24
	.dbline 13
;  DDRC  = 0x20;
	ldi R24,32
	out 0x14,R24
	.dbline 14
;  PORTD = 0xFF;
	ldi R24,255
	out 0x12,R24
	.dbline 15
;  DDRD  = 0xFF;
	out 0x11,R24
	.dbline -2
	.dbline 16
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 20
; 
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
	.dbline 22
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 23
;  port_init();
	rcall _port_init
	.dbline 25
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 26
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 27
;  TIMSK = 0x00; //timer interrupt sources
	out 0x39,R2
	.dbline 28
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
	.dbline 30
;  //all peripherals are now initialised
; }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay _delay fV
;              k -> R20,R21
;              i -> R22,R23
;              j -> R10,R11
;           time -> R16
	.even
_delay::
	rcall push_gset3
	.dbline -1
	.dbline 33
; 
; void delay(char time)//延时函数,单位延时0.25s。
; {	unsigned int i,j,k;
	.dbline 34
; 	for(k=0;k<time;k++)
	clr R20
	clr R21
	rjmp L7
L4:
	.dbline 35
; 		for(i=0;i<1500;i++)
	clr R22
	clr R23
	rjmp L11
L8:
	.dbline 36
	clr R10
	clr R11
	rjmp L15
L12:
	.dbline 36
L13:
	.dbline 36
	movw R24,R10
	adiw R24,1
	movw R10,R24
L15:
	.dbline 36
	movw R24,R10
	cpi R24,100
	ldi R30,0
	cpc R25,R30
	brlo L12
L9:
	.dbline 35
	subi R22,255  ; offset = 1
	sbci R23,255
L11:
	.dbline 35
	cpi R22,220
	ldi R30,5
	cpc R23,R30
	brlo L8
L5:
	.dbline 34
	subi R20,255  ; offset = 1
	sbci R21,255
L7:
	.dbline 34
	mov R2,R16
	clr R3
	cp R20,R2
	cpc R21,R3
	brlo L4
	.dbline -2
	.dbline 37
; 			for(j=0;j<100;j++);
; }
L3:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r k 20 i
	.dbsym r i 22 i
	.dbsym r j 10 i
	.dbsym r time 16 c
	.dbend
	.area lit(rom, con, rel)
L17:
	.byte 63,6
	.byte 91,'O
	.byte 'f,'f
	.byte 125,7
	.byte 127
	.area text(rom, con, rel)
	.dbfile E:\wu\单片机教学\IO实验程序\io.c
	.dbfunc e main _main fV
;            led -> y+0
;           data -> R20
;              i -> R22
	.even
_main::
	sbiw R28,9
	.dbline -1
	.dbline 40
; 
; void main(void)
; {
	.dbline 43
;  char i;
;  char data;
;  char led[9] = {0x3F,0x06, 0x5B, 0x4F, 0x66 ,0x66, 0x7D, 0x07, 0x7F};  	   	   			  			 //数码管码值
	ldi R24,<L17
	ldi R25,>L17
	movw R30,R28
	ldi R16,9
	ldi R17,0
	st -y,R31
	st -y,R30
	st -y,R25
	st -y,R24
	rcall asgncblk
	.dbline 44
;  init_devices();
	rcall _init_devices
	rjmp L19
L18:
	.dbline 47
;  
;  while (1)
;  {		if((PINB &0x10)==0)		  			 //数码管任务;
	.dbline 47
	sbic 0x16,4
	rjmp L21
	.dbline 48
;  		{	PORTC &= ~0x20;	 					 //PC5清零
	.dbline 48
	cbi 0x15,5
	.dbline 49
; 			data = (PINB & 0x0F)>>1;			 //取PB1~PB3的数据;
	in R20,0x16
	andi R20,15
	lsr R20
	.dbline 50
; 			PORTD = led[data];					 //查表输出数码管值;			
	movw R24,R28
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	out 0x12,R2
	.dbline 51
; 		}
	rjmp L22
L21:
	.dbline 53
; 		else	  								 //跑马灯任务;
; 		{	if((PINB & 0x08) == 0 )				 //只亮一个灯
	.dbline 53
	sbic 0x16,3
	rjmp L23
	.dbline 54
; 			{	data = (PINB & 0x06)>>1;		 //取PB1、PB2的数据;
	.dbline 54
	in R20,0x16
	andi R20,6
	lsr R20
	.dbline 55
; 				for(i=0;i<8;i++)				 //低位到高位
	clr R22
	rjmp L28
L25:
	.dbline 56
	.dbline 56
	ldi R16,1
	mov R17,R22
	rcall lsl8
	mov R2,R16
	com R2
	out 0x12,R2
	.dbline 57
	mov R16,R20
	rcall _delay
	.dbline 58
L26:
	.dbline 55
	inc R22
L28:
	.dbline 55
	cpi R22,8
	brlo L25
	.dbline 59
; 				{	PORTD = ~(1<<i);
; 					delay(data);				 //延时
; 				}
; 				for(i=0;i<8;i++)				 //高位到低位
	clr R22
	rjmp L32
L29:
	.dbline 60
	.dbline 60
	mov R18,R22
	clr R19
	ldi R16,128
	ldi R17,0
	rcall asr16
	movw R2,R16
	com R2
	com R3
	out 0x12,R2
	.dbline 61
	mov R16,R20
	rcall _delay
	.dbline 62
L30:
	.dbline 59
	inc R22
L32:
	.dbline 59
	cpi R22,8
	brlo L29
	.dbline 63
; 				{	PORTD = ~(0x80>>i);
; 						delay(data);
; 				}
; 			}
	rjmp L24
L23:
	.dbline 65
; 			else 					   			 //亮两个灯
; 			{	data = (PINB & 0x06)>>1;		 //同上
	.dbline 65
	in R20,0x16
	andi R20,6
	lsr R20
	.dbline 67
; 				
; 				for(i=0;i<8;i++)
	clr R22
	rjmp L36
L33:
	.dbline 68
	.dbline 68
	ldi R16,3
	mov R17,R22
	rcall lsl8
	mov R2,R16
	com R2
	out 0x12,R2
	.dbline 69
	mov R16,R20
	rcall _delay
	.dbline 70
L34:
	.dbline 67
	inc R22
L36:
	.dbline 67
	cpi R22,8
	brlo L33
	.dbline 71
; 				{	PORTD = ~(3<<i);
; 						delay(data);
; 				}
; 				for(i=0;i<8;i++)
	clr R22
	rjmp L40
L37:
	.dbline 72
	.dbline 72
	mov R18,R22
	clr R19
	ldi R16,192
	ldi R17,0
	rcall asr16
	movw R2,R16
	com R2
	com R3
	out 0x12,R2
	.dbline 73
	mov R16,R20
	rcall _delay
	.dbline 74
L38:
	.dbline 71
	inc R22
L40:
	.dbline 71
	cpi R22,8
	brlo L37
	.dbline 75
; 				{	PORTD = ~(0xC0>>i);
; 						delay(data);
; 				}					
; 			}			
L24:
	.dbline 76
; 		}
L22:
	.dbline 77
L19:
	.dbline 46
	rjmp L18
X0:
	.dbline -2
	.dbline 78
;  }
; }
L16:
	adiw R28,9
	.dbline 0 ; func end
	ret
	.dbsym l led 0 A[9:9]c
	.dbsym r data 20 c
	.dbsym r i 22 c
	.dbend

⌨️ 快捷键说明

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