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

📄 int0.s

📁 单片机红外控制发射与接收,红外发射是一种常用的控制方式
💻 S
字号:
	.module INT0.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0/delay.h
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 5
; //ICC-AVR application builder : 2007-5-18 9:57:24
; // Target : M16
; // Crystal: 8.0000Mhz
; 
; #include <iom16v.h>
	.dbline 6
; #include <macros.h>
	nop
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nus::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 10
; #include"delay.h"
; #define uchar	unsigned char
; #define uint	unsigned int
;  
	.dbline 11
;  uchar temp=0;
	clr R20
	clr R21
	.dbline 12
; unsigned char abc[17]={0xfc,0x60,0xda,0xf2,0x66,0xb6,0xbe,0xe0,0xfe,0xf6,
	xjmp L6
L3:
	.dbline 13
	xcall _delay_1us
L4:
	.dbline 12
	subi R20,255  ; offset = 1
	sbci R21,255
L6:
	.dbline 12
	cp R20,R22
	cpc R21,R23
	brlo L3
	.dbline -2
L2:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 17
;                         0xee,0x3e,0x9c,0x7a,0x9e,0x8e,0x00};
; 
; 
; //----------------SPI初始化------------//
; void SPI_init(void)
	.dbline 19
	clr R16
	clr R17
	xjmp L11
L8:
	.dbline 19
L9:
	.dbline 19
	subi R16,255  ; offset = 1
	sbci R17,255
L11:
	.dbline 19
; {
;  DDRB&=0xbf;
	cpi R16,116
	ldi R30,4
	cpc R17,R30
	brlo L8
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 23
;  SPCR=(1<<SPE)|(1<<DORD)|(1<<MSTR)|(1<<SPR1);
; }
; //-------------------SPI发送数据-----------//
; void SPI_send(unsigned char i)
	.dbline 24
; {
	clr R20
	clr R21
	.dbline 25
;  SPDR=i;
	xjmp L16
L13:
	.dbline 26
	xcall _delay_1ms
L14:
	.dbline 25
	subi R20,255  ; offset = 1
	sbci R21,255
L16:
	.dbline 25
	cp R20,R22
	cpc R21,R23
	brlo L13
	.dbline -2
L12:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0/delay.h
_temp::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0/delay.h
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.dbsym e temp _temp c
_abc::
	.blkb 2
	.area idata
	.byte 252,96
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 2
	.area idata
	.byte 218,242
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 2
	.area idata
	.byte 'f,182
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 2
	.area idata
	.byte 190,224
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 2
	.area idata
	.byte 254,246
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 2
	.area idata
	.byte 238,62
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 2
	.area idata
	.byte 156,'z
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 2
	.area idata
	.byte 158,142
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.dbsym e abc _abc A[17:17]c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.dbfunc e SPI_init _SPI_init fV
	.even
_SPI_init::
	.dbline -1
	.dbline 18
	.dbline 19
	in R24,0x17
	andi R24,191
	out 0x17,R24
	.dbline 20
	ldi R24,114
	out 0xd,R24
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e SPI_send _SPI_send fV
;              i -> R16
	.even
_SPI_send::
	.dbline -1
	.dbline 24
	.dbline 25
	out 0xf,R16
L19:
	.dbline 26
L20:
	.dbline 26
;  while((SPSR&0x80)==0x00);
	sbis 0xe,7
	rjmp L19
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 c
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 31
; }
; 
; 
; void port_init(void)
; {
	.dbline 32
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 33
;  DDRA  = 0xFF;
	ldi R24,255
	out 0x1a,R24
	.dbline 34
;  PORTB = 0x00;
	out 0x18,R2
	.dbline 35
;  DDRB  = 0xFF;
	out 0x17,R24
	.dbline 36
;  PORTC = 0x00; //m103 output only
	out 0x15,R2
	.dbline 37
;  DDRC  = 0x00;
	out 0x14,R2
	.dbline 38
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 39
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
L22:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 4
	jmp _int0_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator\桌面\新建文~2\INT0\INT0.c
	.dbfunc e int0_isr _int0_isr fV
;              i -> R20
	.even
_int0_isr::
	xcall push_lset
	xcall push_gset1
	.dbline -1
	.dbline 44
; }
; 
; #pragma interrupt_handler int0_isr:2
; void int0_isr(void)
; {
	.dbline 47
;    uchar i;
;    
;    CLI();
	cli
	.dbline 48
;    {
	.dbline 49
;        for(i=0;i<5;i++)
	clr R20
	xjmp L27
L24:
	.dbline 50
; 	       {
	.dbline 51
; 		      delay_nus(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delay_nus
	.dbline 52
; 		      if((PIND&0X04)==0X04)
	in R24,0x10
	andi R24,4
	cpi R24,4
	brne L28
	.dbline 53
; 			        {
	.dbline 54
; 			          return;
	xjmp L23
L28:
	.dbline 56
L25:
	.dbline 49
	inc R20
L27:
	.dbline 49
	cpi R20,5
	brlo L24
L30:
	.dbline 57
L31:
	.dbline 57
; 			        }
; 		   }
; 		while((PIND&0X04)!=0X04);//等待高电平
	in R24,0x10
	andi R24,4
	cpi R24,4
	brne L30
	.dbline 58
; 		delay_nus(2900);//延时4.8ms
	ldi R16,2900
	ldi R17,11
	xcall _delay_nus
	.dbline 59
; 		for(i=0;i<8;i++)
	clr R20
	xjmp L36
X0:
	.dbline 60
; 		    { 
L37:
	.dbline 61
L38:
	.dbline 61
; 		      while((PIND&0X04)!=0X04);//等待高电平
	in R24,0x10
	andi R24,4
	cpi R24,4
	brne L37
	.dbline 62
; 		      delay_nus(480);//延时480us
	ldi R16,480
	ldi R17,1
	xcall _delay_nus
	.dbline 63
; 		      if(PIND&0X04)
	sbis 0x10,2
	rjmp L40
	.dbline 64
; 		                {
	.dbline 65
; 						  temp=temp>>1;
	lds R2,_temp
	lsr R2
	sts _temp,R2
	.dbline 66
; 			              delay_nus(200);//
	ldi R16,200
	ldi R17,0
	xcall _delay_nus
	.dbline 67
; 						  temp|=0x80;		//数据写入1	 
	lds R24,_temp
	ori R24,128
	sts _temp,R24
	.dbline 68
; 			             }
	xjmp L41
L40:
	.dbline 70
; 	            else
; 		                 {
	.dbline 71
; 						   temp=temp>>1;
	lds R2,_temp
	lsr R2
	sts _temp,R2
	.dbline 72
; 			               temp&=0x7f;   //数据写入0
	mov R24,R2
	andi R24,127
	sts _temp,R24
	.dbline 73
; 			             }
L41:
	.dbline 74
L34:
	.dbline 59
	inc R20
L36:
	.dbline 59
	cpi R20,8
	brlo L38
	.dbline 76
; 		    }
; 		
;    }
L42:
	.dbline 77
L43:
	.dbline 77
;      while((PIND&0X04)!=0X04);//等待高电平
	in R24,0x10
	andi R24,4
	cpi R24,4
	brne L42
	.dbline 78
;     delay_nus(480);//延时480us
	ldi R16,480
	ldi R17,1
	xcall _delay_nus
	.dbline 80
;   
;    if(!(PIND&0X04))
	sbic 0x10,2
	rjmp L45
	.dbline 82
; 		             
; 		 {
	.dbline 83
; 		  return;
	xjmp L23
L45:
	.dbline 93
; 	     }
; 	/*if(temp==0x06)
; 	{
; 	  PORTA=temp;
; 	  SPI_send(abc[temp]);
; 	 
; 	  
; 	}*/
; 	else
; 	{				  
	.dbline 94
; 	 PORTA=temp; 
	lds R2,_temp
	out 0x1b,R2
	.dbline 95
; 	 SPI_send(abc[temp]);
	ldi R24,<_abc
	ldi R25,>_abc
	mov R30,R2
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	xcall _SPI_send
	.dbline 97
; 	 
; 	}
	.dbline 98
;     SEI();
	sei
	.dbline -2
L23:
	xcall pop_gset1
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r i 20 c
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 103
; }
; 
; //call this routine to initialize all peripherals
; void main(void)
; {
	.dbline 105
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 106
;  port_init();
	xcall _port_init
	.dbline 107
;  SPI_init();
	xcall _SPI_init
	.dbline 108
;  MCUCR = 0x02;
	ldi R24,2
	out 0x35,R24
	.dbline 109
;  GICR  = 0x40;
	ldi R24,64
	out 0x3b,R24
	.dbline 110
;  TIMSK = 0x00; //timer interrupt sources
	clr R2
	out 0x39,R2
	.dbline 111
;  SPI_send(abc[16]);
	lds R16,_abc+16
	xcall _SPI_send
	.dbline 112
;  SEI(); //re-enable interrupts
	sei
L49:
	.dbline 115
	.dbline 118
L50:
	.dbline 114
	xjmp L49
X1:
	.dbline -2
L47:
	.dbline 0 ; func end
	ret
	.dbend

⌨️ 快捷键说明

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