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

📄 hongwai.s

📁 万能遥控器解码
💻 S
字号:
	.module hongwai.c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\实验板红外avr解码\hongwai.c
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R16,R17
	.even
_delay_nus::
	st -y,R20
	st -y,R21
	.dbline -1
	.dbline 12
; //ICC-AVR application builder : 2008-8-7 8:30:21
; // Target : M8515
; // Crystal: 4.0000Mhz
; #include <iom8515v.h>//和单片机类型相对应的头文件,选择Atmega8515做实验; 
; #include <macros.h>
; #define uchar unsigned char
; #define uint unsigned int
; #define DQ    PD2
; #define    HW   (PIND&(1<<DQ))  //数据的状态
; unsigned char IRCode[3],IRCON,flag;
; void delay_nus(unsigned int n)//n微秒延时函数 
; { 
	.dbline 14
; unsigned int i; 
; for (i=0;i<n;i++) 
	clr R20
	clr R21
	rjmp L5
L2:
	.dbline 15
;   { 
	.dbline 16
;       asm("nop"); 
	nop
	.dbline 17
;   } 
L3:
	.dbline 14
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 14
	cp R20,R16
	cpc R21,R17
	brlo L2
X0:
	.dbline -2
L1:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r i 20 i
	.dbsym r n 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R10,R11
	.even
_delay_nms::
	rcall push_xgset300C
	movw R10,R16
	.dbline -1
	.dbline 20
; } 
; void delay_nms(unsigned int n)//n毫秒延时函数 
; { 
	.dbline 22
;   unsigned int i; 
;   for (i=0;i<n;i++) //执行n次1毫秒延时 
	clr R20
	clr R21
	rjmp L10
L7:
	.dbline 23
;   delay_nus(10);  
	ldi R16,10
	ldi R17,0
	rcall _delay_nus
L8:
	.dbline 22
	subi R20,255  ; offset = 1
	sbci R21,255
L10:
	.dbline 22
	cp R20,R10
	cpc R21,R11
	brlo L7
X1:
	.dbline -2
L6:
	.dbline 0 ; func end
	rjmp pop_xgset300C
	.dbsym r i 20 i
	.dbsym r n 10 i
	.dbend
	.dbfunc e uart0_init _uart0_init fV
	.even
_uart0_init::
	.dbline -1
	.dbline 27
; }             
; /************************* UART 发送数据函数*********************************************************/
; void uart0_init(void)
; {
	.dbline 28
;  UCSRB = 0x00; //disable while setting baud rate
	clr R2
	out 0xa,R2
	.dbline 29
;  UCSRA = 0x00;
	out 0xb,R2
	.dbline 30
;  UCSRC = BIT(URSEL) | 0x26;
	ldi R24,166
	out 0x20,R24
	.dbline 31
;  UBRRL = 0x33; //set baud rate lo
	ldi R24,51
	out 0x9,R24
	.dbline 32
;  UBRRH = 0x00; //set baud rate hi
	out 0x20,R2
	.dbline 33
;  UCSRB = 0x18;
	ldi R24,24
	out 0xa,R24
	.dbline -2
L11:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e sendchar _sendchar fV
;            num -> R16
	.even
_sendchar::
	.dbline -1
	.dbline 36
; }
; void sendchar(uchar num)
;   { 	   
	.dbline 37
;       UDR=num;
	out 0xc,R16
L13:
	.dbline 38
;       while(!(UCSRA&(1<<TXC)));
L14:
	.dbline 38
	sbis 0xb,6
	rjmp L13
X2:
	.dbline 39
; 	  UCSRA |= (1<<TXC);
	sbi 0xb,6
	.dbline -2
L12:
	.dbline 0 ; func end
	ret
	.dbsym r num 16 c
	.dbend
	.dbfunc e panduan _panduan fV
	.even
_panduan::
	.dbline -1
	.dbline 43
;   }
; 
; void panduan(void)
;      {
	.dbline 44
; 	 	      IRCode[IRCON]<<=1;     //每读一次放入变量中的二进制的一个位,每次左移一位
	ldi R24,<_IRCode
	ldi R25,>_IRCode
	lds R2,_IRCON
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R2,z+0
	lsl R2
	std z+0,R2
	.dbline 45
;             if(!HW)      delay_nms(42);      //延时1107us   44	    
	sbic 0x10,2
	rjmp L17
X3:
	.dbline 45
	ldi R16,42
	ldi R17,0
	rcall _delay_nms
	rjmp L18
L17:
	.dbline 47
; 	             else
; 	                 {
	.dbline 48
; 			          IRCode[IRCON]|=0x01; //左移后最后一位写入 1
	ldi R24,<_IRCode
	ldi R25,>_IRCode
	lds R2,_IRCON
	clr R3
	add R2,R24
	adc R3,R25
	movw R30,R2
	ldd R24,z+0
	ori R24,1
	std z+0,R24
	.dbline 49
; 	                  delay_nms(89);    //延时2207us  88
	ldi R16,89
	ldi R17,0
	rcall _delay_nms
	.dbline 50
; 		             }
L18:
	.dbline 51
;                         flag++;
	lds R24,_flag
	subi R24,255    ; addi 1
	sts _flag,R24
	.dbline 52
; 					  if(flag==8) 
	cpi R24,8
	brne L19
X4:
	.dbline 53
; 						    { 
	.dbline 54
; 							    flag=0; //8为填满一个数组,计数清零
	clr R2
	sts _flag,R2
	.dbline 55
; 		                    	IRCON++;  //填满一个字节,指向下一个变量						    
	lds R24,_IRCON
	subi R24,255    ; addi 1
	sts _IRCON,R24
	.dbline 56
; 								if(IRCON==4)  IRCON=0;                  
	cpi R24,4
	brne L21
X5:
	.dbline 56
	sts _IRCON,R2
L21:
	.dbline 57
; 		                    }  					      
L19:
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int0_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\实验板红外avr解码\hongwai.c
	.dbfunc e int0_isr _int0_isr fV
;              i -> R20
	.even
_int0_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	st -y,R20
	.dbline -1
	.dbline 62
;      }
; /*****************************外部中断服务函数*****************************************/
; #pragma interrupt_handler int0_isr:iv_INT0
; void int0_isr(void)
; {
	.dbline 64
;   uchar i;
;  GICR = 0x00;    //禁止外部中断
	clr R2
	out 0x3b,R2
	.dbline 65
;  delay_nms(616);   //延时15400us   616
	ldi R16,616
	ldi R17,2
	rcall _delay_nms
	.dbline 66
;  for(i=0;i<32;i++)
	clr R20
	rjmp L27
L24:
	.dbline 67
;   {
	.dbline 68
;    panduan();
	rcall _panduan
	.dbline 69
;   }
L25:
	.dbline 66
	inc R20
L27:
	.dbline 66
	cpi R20,32
	brlo L24
X6:
	.dbline 71
;  
;  uart0_init();
	rcall _uart0_init
	.dbline 72
;    for(i=0;i<4;i++)
	clr R20
	rjmp L31
L28:
	.dbline 73
;          {
	.dbline 74
; 		 delay_nms(5000);
	ldi R16,5000
	ldi R17,19
	rcall _delay_nms
	.dbline 76
; 	//	 PORTB=IRCode[i];
;           sendchar(IRCode[i]);
	ldi R24,<_IRCode
	ldi R25,>_IRCode
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _sendchar
	.dbline 77
;         }  
L29:
	.dbline 72
	inc R20
L31:
	.dbline 72
	cpi R20,4
	brlo L28
X7:
	.dbline 78
; 	GICR = 0x40;	
	ldi R24,64
	out 0x3b,R24
	.dbline -2
L23:
	.dbline 0 ; func end
	ld R20,y+
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbsym r i 20 c
	.dbend
	.dbfunc e init_devices_int0 _init_devices_int0 fV
	.even
_init_devices_int0::
	.dbline -1
	.dbline 83
; }
; 
; /*****************外部中断设置***********************************/
; void init_devices_int0(void)
; {
	.dbline 84
;  CLI(); //disable all interrupts
	cli
	.dbline 85
;  MCUCR = 0x02;    //下降沿触发方式
	ldi R24,2
	out 0x35,R24
	.dbline 86
;  EMCUCR = 0x00;
	clr R2
	out 0x36,R2
	.dbline 87
;  GICR = 0x40;    //外部中断请求 0 使能
	ldi R24,64
	out 0x3b,R24
	.dbline 88
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L32:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 92
; }                                                                                                               
;                                 
; void main(void)//主函数 
; {
	.dbline 93
;   DDRB=0XFF;
	ldi R24,255
	out 0x17,R24
	.dbline 94
;   PORTB=0XFF;
	out 0x18,R24
	.dbline 95
;   DDRD&=~BIT(0);
	cbi 0x11,0
	.dbline 96
;   DDRD|=BIT(1);
	sbi 0x11,1
	.dbline 97
;   DDRD&=~BIT(2);//设置PD2为输入口 
	cbi 0x11,2
	.dbline 98
;   init_devices_int0();   //外部中断初始化并开外部中断   
	rcall _init_devices_int0
L34:
	.dbline 99
;  while(1);
L35:
	.dbline 99
	rjmp L34
X8:
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\DOCUME~1\Administrator.27F5F4061F03467\桌面\实验板红外avr解码\hongwai.c
_flag::
	.blkb 1
	.dbsym e flag _flag c
_IRCON::
	.blkb 1
	.dbsym e IRCON _IRCON c
_IRCode::
	.blkb 3
	.dbsym e IRCode _IRCode A[3:3]c
; }

⌨️ 快捷键说明

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