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

📄 cw1.s

📁 实现无线控制功能
💻 S
📖 第 1 页 / 共 3 页
字号:
	.dbline 114
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 115
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 116
;  TIMSK = 0x40; //timer interrupt sources
	ldi R24,64
	out 0x39,R24
	.dbline 117
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e decode _decode fc
;              j -> R10
;              i -> R12
;           data -> y+0
;           flag -> R10
;        pin_var -> R14
	.even
_decode::
	xcall push_gset5
	sbiw R28,4
	.dbline -1
	.dbline 121
;  //all peripherals are now initialized
; }
; uchar decode(void)
;      {
	.dbline 123
; 	   uchar pin_var,i;
; 	   uchar flag=0;
	clr R10
	.dbline 125
; 	   signed char j;
; 	   ulong data=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	std z+0,R20
	std z+1,R21
	std z+2,R22
	std z+3,R23
	.dbline 126
; 	   count1=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _count1+1,R21
	sts _count1,R20
	sts _count1+2+1,R23
	sts _count1+2,R22
	.dbline 127
; 	   DDRA&=~(1<<wuxian_js);PORTA|=(1<<wuxian_js);
	cbi 0x1a,3
	.dbline 127
	sbi 0x1b,3
	xjmp L34
L33:
	.dbline 129
; 	   while(1)
; 	       {
	.dbline 130
; 		    if(count1>250){return(0xff);}
	ldi R20,250
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_count1+2
	lds R5,_count1+2+1
	lds R2,_count1
	lds R3,_count1+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L36
	.dbline 130
	.dbline 130
	ldi R16,255
	xjmp L32
L36:
	.dbline 131
; 		    pin_var=PINA&(1<<wuxian_js);
	in R24,0x19
	andi R24,8
	mov R14,R24
	.dbline 132
; 			if(flag==1){break;}
	mov R24,R10
	cpi R24,1
	breq X1
	xjmp L41
X1:
	.dbline 132
	.dbline 132
	xjmp L35
L40:
	.dbline 134
; 			while(pin_var==0)
; 			     {
	.dbline 135
; 				   count=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _count+1,R21
	sts _count,R20
	sts _count+2+1,R23
	sts _count+2,R22
	.dbline 136
; 				   if(count1>250){return(0xff);}
	ldi R20,250
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_count1+2
	lds R5,_count1+2+1
	lds R2,_count1
	lds R3,_count1+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L46
	.dbline 136
	.dbline 136
	ldi R16,255
	xjmp L32
L45:
	.dbline 138
; 				   while(1)
; 				   {
	.dbline 139
; 				     pin_var=PINA&(1<<wuxian_js);if(count1>250){return(0xff);}
	in R24,0x19
	andi R24,8
	mov R14,R24
	.dbline 139
	ldi R20,250
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_count1+2
	lds R5,_count1+2+1
	lds R2,_count1
	lds R3,_count1+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L48
	.dbline 139
	.dbline 139
	ldi R16,255
	xjmp L32
L48:
	.dbline 140
; 					 if(pin_var!=0)
	tst R14
	breq L50
	.dbline 141
; 					 {
	.dbline 142
; 				        if((count>130)&&(count<155))  {flag=1;break;}
	ldi R20,130
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_count+2
	lds R5,_count+2+1
	lds R2,_count
	lds R3,_count+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L52
	ldi R20,155
	ldi R21,0
	ldi R22,0
	ldi R23,0
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh L52
	.dbline 142
	.dbline 142
	clr R10
	inc R10
	.dbline 142
	xjmp L42
L52:
	.dbline 143
; 					    else  {flag=0;break;}
	.dbline 143
	clr R10
	.dbline 143
	xjmp L42
L50:
	.dbline 145
L46:
	.dbline 137
	xjmp L45
X0:
	.dbline 146
	xjmp L42
L41:
	.dbline 133
	tst R14
	brne X2
	xjmp L40
X2:
L42:
	.dbline 148
; 					 }	
; 				   }	
; 				   break;
; 				 }
; 				 if(flag==1) break;
	mov R24,R10
	cpi R24,1
	brne L54
	.dbline 148
	xjmp L35
L54:
	.dbline 149
L34:
	.dbline 128
	xjmp L33
L35:
	.dbline 151
; 			} 
; 			      
; 				   for(i=0;i<24;i++)
	clr R12
	xjmp L59
L56:
	.dbline 152
; 				       {
	.dbline 154
; 					      
; 					      count=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _count+1,R21
	sts _count,R20
	sts _count+2+1,R23
	sts _count+2,R22
	.dbline 155
; 						  data<<=1;                       //数据左移
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	lsl R2
	rol R3
	rol R4
	rol R5
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	xjmp L61
L60:
	.dbline 157
; 					      while (1)           //高位计数 
;                             {   
	.dbline 158
; 							   pin_var=PINA&(1<<wuxian_js);
	in R24,0x19
	andi R24,8
	mov R14,R24
	.dbline 159
; 							   if(pin_var==0) {break;}
	tst R24
	brne L63
	.dbline 159
	.dbline 159
	xjmp L62
L63:
	.dbline 160
; 							   if(count>200)  return 0xff; 
	ldi R20,200
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_count+2
	lds R5,_count+2+1
	lds R2,_count
	lds R3,_count+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L65
	.dbline 160
	ldi R16,255
	xjmp L32
L65:
	.dbline 161
L61:
	.dbline 156
	xjmp L60
L62:
	.dbline 162
; 							 }
; 							 if(count>1&&count<8)  data+=0;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_count+2
	lds R5,_count+2+1
	lds R2,_count
	lds R3,_count+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L67
	ldi R20,8
	ldi R21,0
	ldi R22,0
	ldi R23,0
	cp R2,R20
	cpc R3,R21
	cpc R4,R22
	cpc R5,R23
	brsh L67
	.dbline 162
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
	xjmp L68
L67:
	.dbline 164
; 							 else //if(count>13&&count<15)    
; 							  data|=1;
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	or R2,R20
	or R3,R21
	or R4,R22
	or R5,R23
	movw R30,R28
	std z+0,R2
	std z+1,R3
	std z+2,R4
	std z+3,R5
L68:
	.dbline 166
;                             
; 							 count=0;
	ldi R20,0
	ldi R21,0
	ldi R22,0
	ldi R23,0
	sts _count+1,R21
	sts _count,R20
	sts _count+2+1,R23
	sts _count+2,R22
	xjmp L70
L69:
	.dbline 168
; 			              while(1)
; 			                {
	.dbline 169
;     			             WDR();
	wdr
	.dbline 170
; 				             pin_var=PINA&(1<<wuxian_js);
	in R24,0x19
	andi R24,8
	mov R14,R24
	.dbline 171
; 				             if(pin_var!=0){break;}
	tst R24
	breq L72
	.dbline 171
	.dbline 171
	xjmp L71
L72:
	.dbline 172
; 				             if(count>200)
	ldi R20,200
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_count+2
	lds R5,_count+2+1
	lds R2,_count
	lds R3,_count+1
	cp R20,R2
	cpc R21,R3
	cpc R22,R4
	cpc R23,R5
	brsh L74
	.dbline 173
;     			               {
	.dbline 174
;         			              return(0xff);
	ldi R16,255
	xjmp L32
L74:
	.dbline 176
L70:
	.dbline 167
	xjmp L69
L71:
	.dbline 177
L57:
	.dbline 151
	inc R12
L59:
	.dbline 151
	mov R24,R12
	cpi R24,24
	brsh X3
	xjmp L56
X3:
	.dbline 178
;     			               }
; 			                } 
; 					   }	
; 			if(i==24)
	cpi R24,24
	brne L76
	.dbline 179
; 			   {		   
	.dbline 180
; 				for(j=2;j>=0;j--)
	ldi R24,2
	mov R10,R24
	xjmp L81
L78:
	.dbline 181
	.dbline 182
	ldi R24,<_code
	ldi R25,>_code
	mov R30,R10
	clr R31
	sbrc R30,7
	com R31
	add R30,R24
	adc R31,R25
	movw R26,R28
	ld R2,x+
	ld R3,x+
	ld R4,x+
	ld R5,x
	std z+0,R2
	.dbline 183
	ldi R24,8
	ldi R25,0
	movw R30,R28
	ldd R2,z+0
	ldd R3,z+1
	ldd R4,z+2
	ldd R5,z+3
	st -y,R24
	movw R16,R2
	movw R18,R4
	xcall lsr32
	movw R30,R28
	std z+0,R16
	std z+1,R17
	std z+2,R18
	std z+3,R19
	.dbline 184
L79:
	.dbline 180
	dec R10
L81:
	.dbline 180
	mov R24,R10
	cpi R24,0
	brge L78
	.dbline 185
; 				   {
; 				     code[j]=data;
; 					 data>>=8;
; 				   }  
; 			  }	   
L76:
	.dbline 186
; 		 return 1;	 	   		 
	ldi R16,1
	.dbline -2
L32:
	adiw R28,4
	xcall pop_gset5
	.dbline 0 ; func end
	ret
	.dbsym r j 10 C
	.dbsym r i 12 c
	.dbsym l data 0 l
	.dbsym r flag 10 c
	.dbsym r pin_var 14 c
	.dbend
	.dbfunc e ana_decode _ana_decode fV
;        key_var -> R20
;       code_buf -> y+0
;           flag -> R22
;              i -> R20
	.even
_ana_decode::
	xcall push_gset2
	sbiw R28,7
	.dbline -1
	.dbline 190
; 	 }
; 	 
; 	void ana_decode(void)
;    {
	.dbline 192
; 	uchar key_var;
; 	uchar i,flag=0;
	clr R22
	.dbline 194
; 	uchar  code_buf[7];
; 	DDRC&=~(1<<study_key);PORTC|=(1<<study_key);
	cbi 0x14,1
	.dbline 194
	sbi 0x15,1
	.dbline 195
; 	key_var=PINC&(1<<study_key);
	in R20,0x13
	andi R20,2
	.dbline 196
; 	if(key_var==0)
	breq X6
	xjmp L83
X6:
	.dbline 197
; 	   {
	xjmp L86
X4:
	.dbline 199
; 	      while(1)
; 		     {
L88:
	.dbline 201
; 	          while(1)
;     		   {
	.dbline 202
;     		       flag=decode();
	xcall _decode
	mov R22,R16
	.dbline 203
; 				   if(flag==1)  {flag=0;break;}
	cpi R16,1
	brne L91
	.dbline 203
	.dbline 203
	clr R22
	.dbline 203
	xjmp L90
L91:
	.dbline 204
L89:
	.dbline 200
	xjmp L88
L90:
	.dbline 205
	clr R20
	xjmp L96
L93:
	.dbline 205
	.dbline 205
	ldi R24,<_code
	ldi R25,>_code
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	ldi R24,<_code1
	ldi R25,>_code1
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 205
L94:
	.dbline 205
	inc R20
L96:
	.dbline 205
;     		   }
; 			   for(i=0;i<2;++i){code1[i]=code[i];}
	cpi R20,2
	brlo L93
	xjmp L98
L97:
	.dbline 207
; 			   while(1)
;     		   {
	.dbline 208
;     		       flag=decode();
	xcall _decode
	mov R22,R16
	.dbline 209
; 				   if(flag==1)  {flag=0;break;}
	cpi R16,1
	brne L100
	.dbline 209
	.dbline 209
	clr R22
	.dbline 209
	xjmp L99
L100:
	.dbline 211
L98:
	.dbline 206
	xjmp L97
L99:
	.dbline 212
	clr R20
	xjmp L105
L102:
	.dbline 212
	.dbline 212
	ldi R24,<_code

⌨️ 快捷键说明

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