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

📄 ac15-3.s

📁 AVR学习资料
💻 S
📖 第 1 页 / 共 2 页
字号:
	ldi R24,164
	out 0x36,R24
	.dbline 179
L42:
	.dbline 179
L43:
	.dbline 179
; 	   Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L42
	.dbline 179
	.dbline 179
	.dbline 180
; 	   if (TestAck()!=RE_START)  return 0;
	in R24,0x1
	andi R24,248
	cpi R24,16
	breq L45
	.dbline 180
	clr R16
	xjmp L26
L45:
	.dbline 181
; 	   Write8Bit(rd_device_add);
	.dbline 181
	ldi R24,161
	out 0x3,R24
	.dbline 181
	ldi R24,132
	out 0x36,R24
	.dbline 181
	.dbline 181
	.dbline 182
L47:
	.dbline 182
L48:
	.dbline 182
; 	   Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L47
	.dbline 182
	.dbline 182
	.dbline 183
; 	   if(TestAck()!=MR_SLA_ACK)  return 0;
	in R24,0x1
	andi R24,248
	cpi R24,64
	breq L50
	.dbline 183
	clr R16
	xjmp L26
L50:
	.dbline 184
; 	   Twi();
	ldi R24,132
	out 0x36,R24
	.dbline 185
L52:
	.dbline 185
L53:
	.dbline 185
; 	   Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L52
	.dbline 185
	.dbline 185
	.dbline 186
; 	   if(TestAck()!=MR_DATA_NOACK) return 0;	
	in R24,0x1
	andi R24,248
	cpi R24,88
	breq L55
	.dbline 186
	clr R16
	xjmp L26
L55:
	.dbline 187
; 	   temp=TWDR;
	in R20,0x3
	.dbline 188
;        Stop();
	ldi R24,148
	out 0x36,R24
	.dbline 189
; 	   return temp;
	mov R16,R20
	.dbline -2
L26:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r temp 20 c
	.dbsym r RomAddress 16 c
	.dbend
	.dbfunc e i2c_Write _i2c_Write fc
;          Wdata -> R20
;     RomAddress -> R22
	.even
_i2c_Write::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 198
;       }
; 	  
; /******************************************
;                I2C总线写一个字节
; 			    返回0:写成功
; 				返回非0:写失败
; *******************************************/
; unsigned char i2c_Write(unsigned char RomAddress,unsigned char Wdata) 
; {
	.dbline 199
; 	  Start();
	ldi R24,164
	out 0x36,R24
	.dbline 200
L58:
	.dbline 200
L59:
	.dbline 200
; 	  Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L58
	.dbline 200
	.dbline 200
	.dbline 201
; 	  if(TestAck()!=START) return 1;
	in R24,0x1
	andi R24,248
	cpi R24,8
	breq L61
	.dbline 201
	ldi R16,1
	xjmp L57
L61:
	.dbline 202
; 	  Write8Bit(wr_device_add);
	.dbline 202
	ldi R24,160
	out 0x3,R24
	.dbline 202
	ldi R24,132
	out 0x36,R24
	.dbline 202
	.dbline 202
	.dbline 203
L63:
	.dbline 203
L64:
	.dbline 203
; 	  Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L63
	.dbline 203
	.dbline 203
	.dbline 204
; 	  if(TestAck()!=MT_SLA_ACK) return 1;
	in R24,0x1
	andi R24,248
	cpi R24,24
	breq L66
	.dbline 204
	ldi R16,1
	xjmp L57
L66:
	.dbline 205
; 	  Write8Bit(RomAddress);
	.dbline 205
	out 0x3,R22
	.dbline 205
	ldi R24,132
	out 0x36,R24
	.dbline 205
	.dbline 205
	.dbline 206
L68:
	.dbline 206
L69:
	.dbline 206
; 	  Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L68
	.dbline 206
	.dbline 206
	.dbline 207
; 	  if(TestAck()!=MT_DATA_ACK) return 1;
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L71
	.dbline 207
	ldi R16,1
	xjmp L57
L71:
	.dbline 208
; 	  Write8Bit(Wdata);
	.dbline 208
	out 0x3,R20
	.dbline 208
	ldi R24,132
	out 0x36,R24
	.dbline 208
	.dbline 208
	.dbline 209
L73:
	.dbline 209
L74:
	.dbline 209
; 	  Wait();
	in R2,0x36
	sbrs R2,7
	rjmp L73
	.dbline 209
	.dbline 209
	.dbline 210
; 	  if(TestAck()!=MT_DATA_ACK) return 1;	
	in R24,0x1
	andi R24,248
	cpi R24,40
	breq L76
	.dbline 210
	ldi R16,1
	xjmp L57
L76:
	.dbline 211
; 	  Stop();
	ldi R24,148
	out 0x36,R24
	.dbline 212
;  	  delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 213
; 	  return 0;
	clr R16
	.dbline -2
L57:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r Wdata 20 c
	.dbsym r RomAddress 22 c
	.dbend
	.dbfunc e main _main fV
;        key_val -> R10
;         rd_val -> R22
;         wr_val -> R20
	.even
_main::
	sbiw R28,2
	.dbline -1
	.dbline 218
; }
; 
; //******************************************
; void main(void)				
; {
	.dbline 219
;  	 uchar key_val,wr_val=0,rd_val=0;	
	clr R20
	.dbline 219
	clr R22
	.dbline 220
; 	 port_init();
	xcall _port_init
	.dbline 221
;     delay_ms(400);			
	ldi R16,400
	ldi R17,1
	xcall _delay_ms
	.dbline 222
; 	InitLcd();				
	xcall _InitLcd
	.dbline 223
; 	LcdWriteCommand(0x01,1); 
	ldi R18,1
	ldi R16,1
	xcall _LcdWriteCommand
	.dbline 224
; 	LcdWriteCommand(0x0c,1);	 
	ldi R18,1
	ldi R16,12
	xcall _LcdWriteCommand
	.dbline 225
; 	ePutstr(0,0,str0);  
	ldi R24,<_str0
	ldi R25,>_str0
	std y+1,R25
	std y+0,R24
	clr R18
	clr R16
	xcall _ePutstr
	.dbline 226
; 	delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 227
; 	ePutstr(0,1,str1);   
	ldi R24,<_str1
	ldi R25,>_str1
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _ePutstr
	.dbline 228
; 	delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	xjmp L80
L79:
	.dbline 231
; 	/********************************************/
; 		while(1)              
; 		{
	.dbline 232
; 		   DisplayOneChar(9,0,wr_val/100+0x30);	 
	ldi R17,100
	mov R16,R20
	xcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,9
	xcall _DisplayOneChar
	.dbline 233
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 234
; 		   DisplayOneChar(10,0,(wr_val/10)%10+0x30); 
	ldi R17,10
	mov R16,R20
	xcall div8u
	ldi R17,10
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,10
	xcall _DisplayOneChar
	.dbline 235
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 236
; 		   DisplayOneChar(11,0,wr_val%10+0x30);	  
	ldi R17,10
	mov R16,R20
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,11
	xcall _DisplayOneChar
	.dbline 237
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 239
; 	   
; 		   DisplayOneChar(8,1,rd_val/100+0x30);	  
	ldi R17,100
	mov R16,R22
	xcall div8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,8
	xcall _DisplayOneChar
	.dbline 240
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 241
; 		   DisplayOneChar(9,1,(rd_val/10%10)+0x30);	 
	ldi R17,10
	mov R16,R22
	xcall div8u
	ldi R17,10
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,9
	xcall _DisplayOneChar
	.dbline 242
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 243
; 		   DisplayOneChar(10,1,rd_val%10+0x30);	  
	ldi R17,10
	mov R16,R22
	xcall mod8u
	mov R24,R16
	subi R24,208    ; addi 48
	std y+0,R24
	ldi R18,1
	ldi R16,10
	xcall _DisplayOneChar
	.dbline 244
; 		   delay_ms(10);
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 246
; 		   
; 		   key_val=scan_key();	
	xcall _scan_key
	mov R10,R16
	.dbline 247
; 		   switch(key_val)		
	mov R12,R10
	clr R13
	movw R24,R12
	cpi R24,191
	ldi R30,0
	cpc R25,R30
	breq L91
	ldi R24,191
	cp R24,R12
	cpc R25,R13
	brlt L94
L93:
	movw R24,R12
	cpi R24,127
	ldi R30,0
	cpc R25,R30
	breq L92
	xjmp L83
L94:
	movw R24,R12
	cpi R24,223
	ldi R30,0
	cpc R25,R30
	breq L88
	cpi R24,223
	ldi R30,0
	cpc R25,R30
	brlt L83
L95:
	movw R24,R12
	cpi R24,239
	ldi R30,0
	cpc R25,R30
	breq L85
	xjmp L83
X0:
	.dbline 248
; 	   	   {				
L85:
	.dbline 249
; 	   	   	case 0xef:if(wr_val<255)wr_val++;break;	
	cpi R20,255
	brsh L83
	.dbline 249
	inc R20
	.dbline 249
	xjmp L83
L88:
	.dbline 250
; 	   		case 0xdf:if(wr_val>0)wr_val--;break;	
	clr R2
	cp R2,R20
	brsh L83
	.dbline 250
	dec R20
	.dbline 250
	xjmp L83
L91:
	.dbline 251
; 	   		case 0xbf:i2c_Write(10,wr_val); 
	mov R18,R20
	ldi R16,10
	xcall _i2c_Write
	.dbline 252
; 				 DisplayOneChar(15,0,0xef);break;
	ldi R24,239
	std y+0,R24
	clr R18
	ldi R16,15
	xcall _DisplayOneChar
	.dbline 252
	xjmp L83
L92:
	.dbline 253
; 	   		case 0x7f:rd_val=i2c_Read(10); 
	ldi R16,10
	xcall _i2c_Read
	mov R22,R16
	.dbline 254
; 			     DisplayOneChar(15,1,0xef);break;
	ldi R24,239
	std y+0,R24
	ldi R18,1
	ldi R16,15
	xcall _DisplayOneChar
	.dbline 254
	.dbline 255
; 	   		default:break;		
L83:
	.dbline 257
	ldi R16,200
	ldi R17,0
	xcall _delay_ms
	.dbline 258
	ldi R24,32
	std y+0,R24
	clr R18
	ldi R16,15
	xcall _DisplayOneChar
	.dbline 258
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 259
	ldi R24,32
	std y+0,R24
	ldi R18,1
	ldi R16,15
	xcall _DisplayOneChar
	.dbline 259
	ldi R16,10
	ldi R17,0
	xcall _delay_ms
	.dbline 261
L80:
	.dbline 230
	xjmp L79
X1:
	.dbline -2
L78:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r key_val 10 c
	.dbsym r rd_val 22 c
	.dbsym r wr_val 20 c
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	xcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 267
; 	   		}				
; 			delay_ms(200); 
; 			DisplayOneChar(15,0,0x20);delay_ms(10); 
; 			DisplayOneChar(15,1,0x20);delay_ms(10); 
; 					
;   		 }				
; 	
; }
; 		   
; /*********************延时time*1ms子函数*********************/
; void delay_ms(unsigned int time)
; 	 {
	xjmp L98
L97:
	.dbline 269
	.dbline 270
	ldi R16,1000
	ldi R17,3
	xcall _delay_us
	.dbline 271
	subi R20,1
	sbci R21,0
	.dbline 272
L98:
	.dbline 268
; 	  while(time!=0)
	cpi R20,0
	cpc R20,R21
	brne L97
X2:
	.dbline -2
L96:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 277
; 	  	  {		
; 		   delay_us(1000);
; 		   time--;
; 		  }
; 	 }
; 	 					
; /********************延时子函数*********************/
; void delay_us(int time)
; 	 {     
L101:
	.dbline 279
;   	  do
; 	  	{
	.dbline 280
; 		 time--;
	subi R16,1
	sbci R17,0
	.dbline 281
; 		}	
L102:
	.dbline 282
;   	  while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlt L101
	.dbline -2
L100:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 I
	.dbend

⌨️ 快捷键说明

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