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

📄 ac15-3.lst

📁 AVR学习资料
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0184) 	   Twi();
    0144 E884      LDI	R24,0x84
    0145 BF86      OUT	0x36,R24
(0185) 	   Wait();
    0146 B626      IN	R2,0x36
    0147 FE27      SBRS	R2,7
    0148 CFFD      RJMP	0x0146
(0186) 	   if(TestAck()!=MR_DATA_NOACK) return 0;	
    0149 B181      IN	R24,0x01
    014A 7F88      ANDI	R24,0xF8
    014B 3588      CPI	R24,0x58
    014C F011      BEQ	0x014F
    014D 2700      CLR	R16
    014E C004      RJMP	0x0153
(0187) 	   temp=TWDR;
    014F B143      IN	R20,0x03
(0188)        Stop();
    0150 E984      LDI	R24,0x94
    0151 BF86      OUT	0x36,R24
(0189) 	   return temp;
    0152 2F04      MOV	R16,R20
    0153 940E029F  CALL	pop_gset1
    0155 9508      RET
_i2c_Write:
  Wdata                --> R20
  RomAddress           --> R22
    0156 940E029A  CALL	push_gset2
    0158 2F42      MOV	R20,R18
    0159 2F60      MOV	R22,R16
(0190)       }
(0191) 	  
(0192) /******************************************
(0193)                I2C总线写一个字节
(0194) 			    返回0:写成功
(0195) 				返回非0:写失败
(0196) *******************************************/
(0197) unsigned char i2c_Write(unsigned char RomAddress,unsigned char Wdata) 
(0198) {
(0199) 	  Start();
    015A EA84      LDI	R24,0xA4
    015B BF86      OUT	0x36,R24
(0200) 	  Wait();
    015C B626      IN	R2,0x36
    015D FE27      SBRS	R2,7
    015E CFFD      RJMP	0x015C
(0201) 	  if(TestAck()!=START) return 1;
    015F B181      IN	R24,0x01
    0160 7F88      ANDI	R24,0xF8
    0161 3088      CPI	R24,0x8
    0162 F011      BEQ	0x0165
    0163 E001      LDI	R16,1
    0164 C02B      RJMP	0x0190
(0202) 	  Write8Bit(wr_device_add);
    0165 EA80      LDI	R24,0xA0
    0166 B983      OUT	0x03,R24
    0167 E884      LDI	R24,0x84
    0168 BF86      OUT	0x36,R24
(0203) 	  Wait();
    0169 B626      IN	R2,0x36
    016A FE27      SBRS	R2,7
    016B CFFD      RJMP	0x0169
(0204) 	  if(TestAck()!=MT_SLA_ACK) return 1;
    016C B181      IN	R24,0x01
    016D 7F88      ANDI	R24,0xF8
    016E 3188      CPI	R24,0x18
    016F F011      BEQ	0x0172
    0170 E001      LDI	R16,1
    0171 C01E      RJMP	0x0190
(0205) 	  Write8Bit(RomAddress);
    0172 B963      OUT	0x03,R22
    0173 E884      LDI	R24,0x84
    0174 BF86      OUT	0x36,R24
(0206) 	  Wait();
    0175 B626      IN	R2,0x36
    0176 FE27      SBRS	R2,7
    0177 CFFD      RJMP	0x0175
(0207) 	  if(TestAck()!=MT_DATA_ACK) return 1;
    0178 B181      IN	R24,0x01
    0179 7F88      ANDI	R24,0xF8
    017A 3288      CPI	R24,0x28
    017B F011      BEQ	0x017E
    017C E001      LDI	R16,1
    017D C012      RJMP	0x0190
(0208) 	  Write8Bit(Wdata);
    017E B943      OUT	0x03,R20
    017F E884      LDI	R24,0x84
    0180 BF86      OUT	0x36,R24
(0209) 	  Wait();
    0181 B626      IN	R2,0x36
    0182 FE27      SBRS	R2,7
    0183 CFFD      RJMP	0x0181
(0210) 	  if(TestAck()!=MT_DATA_ACK) return 1;	
    0184 B181      IN	R24,0x01
    0185 7F88      ANDI	R24,0xF8
    0186 3288      CPI	R24,0x28
    0187 F011      BEQ	0x018A
    0188 E001      LDI	R16,1
    0189 C006      RJMP	0x0190
(0211) 	  Stop();
    018A E984      LDI	R24,0x94
    018B BF86      OUT	0x36,R24
(0212)  	  delay_ms(10);
    018C E00A      LDI	R16,0xA
    018D E010      LDI	R17,0
    018E D0CD      RCALL	_delay_ms
(0213) 	  return 0;
    018F 2700      CLR	R16
    0190 940E028B  CALL	pop_gset2
    0192 9508      RET
_main:
  key_val              --> R10
  rd_val               --> R22
  wr_val               --> R20
    0193 9722      SBIW	R28,2
(0214) }
(0215) 
(0216) //******************************************
(0217) void main(void)				
(0218) {
(0219)  	 uchar key_val,wr_val=0,rd_val=0;	
    0194 2744      CLR	R20
    0195 2766      CLR	R22
(0220) 	 port_init();
    0196 DF60      RCALL	_port_init
(0221)     delay_ms(400);			
    0197 E900      LDI	R16,0x90
    0198 E011      LDI	R17,1
    0199 D0C2      RCALL	_delay_ms
(0222) 	InitLcd();				
    019A DF04      RCALL	_InitLcd
(0223) 	LcdWriteCommand(0x01,1); 
    019B E021      LDI	R18,1
    019C E001      LDI	R16,1
    019D DF23      RCALL	_LcdWriteCommand
(0224) 	LcdWriteCommand(0x0c,1);	 
    019E E021      LDI	R18,1
    019F E00C      LDI	R16,0xC
    01A0 DF20      RCALL	_LcdWriteCommand
(0225) 	ePutstr(0,0,str0);  
    01A1 E584      LDI	R24,0x54
    01A2 E090      LDI	R25,0
    01A3 8399      STD	Y+1,R25
    01A4 8388      STD	Y+0,R24
    01A5 2722      CLR	R18
    01A6 2700      CLR	R16
    01A7 DEAC      RCALL	_ePutstr
(0226) 	delay_ms(10);
    01A8 E00A      LDI	R16,0xA
    01A9 E010      LDI	R17,0
    01AA D0B1      RCALL	_delay_ms
(0227) 	ePutstr(0,1,str1);   
    01AB E58D      LDI	R24,0x5D
    01AC E090      LDI	R25,0
    01AD 8399      STD	Y+1,R25
    01AE 8388      STD	Y+0,R24
    01AF E021      LDI	R18,1
    01B0 2700      CLR	R16
    01B1 DEA2      RCALL	_ePutstr
(0228) 	delay_ms(10);
    01B2 E00A      LDI	R16,0xA
    01B3 E010      LDI	R17,0
    01B4 D0A7      RCALL	_delay_ms
    01B5 C0A3      RJMP	0x0259
(0229) 	/********************************************/
(0230) 		while(1)              
(0231) 		{
(0232) 		   DisplayOneChar(9,0,wr_val/100+0x30);	 
    01B6 E614      LDI	R17,0x64
    01B7 2F04      MOV	R16,R20
    01B8 940E0275  CALL	div8u
    01BA 2F80      MOV	R24,R16
    01BB 5D80      SUBI	R24,0xD0
    01BC 8388      STD	Y+0,R24
    01BD 2722      CLR	R18
    01BE E009      LDI	R16,0x9
    01BF DED3      RCALL	_DisplayOneChar
(0233) 		   delay_ms(10);
    01C0 E00A      LDI	R16,0xA
    01C1 E010      LDI	R17,0
    01C2 D099      RCALL	_delay_ms
(0234) 		   DisplayOneChar(10,0,(wr_val/10)%10+0x30); 
    01C3 E01A      LDI	R17,0xA
    01C4 2F04      MOV	R16,R20
    01C5 940E0275  CALL	div8u
    01C7 E01A      LDI	R17,0xA
    01C8 940E0273  CALL	mod8u
    01CA 2F80      MOV	R24,R16
    01CB 5D80      SUBI	R24,0xD0
    01CC 8388      STD	Y+0,R24
    01CD 2722      CLR	R18
    01CE E00A      LDI	R16,0xA
    01CF DEC3      RCALL	_DisplayOneChar
(0235) 		   delay_ms(10);
    01D0 E00A      LDI	R16,0xA
    01D1 E010      LDI	R17,0
    01D2 D089      RCALL	_delay_ms
(0236) 		   DisplayOneChar(11,0,wr_val%10+0x30);	  
    01D3 E01A      LDI	R17,0xA
    01D4 2F04      MOV	R16,R20
    01D5 940E0273  CALL	mod8u
    01D7 2F80      MOV	R24,R16
    01D8 5D80      SUBI	R24,0xD0
    01D9 8388      STD	Y+0,R24
    01DA 2722      CLR	R18
    01DB E00B      LDI	R16,0xB
    01DC DEB6      RCALL	_DisplayOneChar
(0237) 		   delay_ms(10);
    01DD E00A      LDI	R16,0xA
    01DE E010      LDI	R17,0
    01DF D07C      RCALL	_delay_ms
(0238) 	   
(0239) 		   DisplayOneChar(8,1,rd_val/100+0x30);	  
    01E0 E614      LDI	R17,0x64
    01E1 2F06      MOV	R16,R22
    01E2 940E0275  CALL	div8u
    01E4 2F80      MOV	R24,R16
    01E5 5D80      SUBI	R24,0xD0
    01E6 8388      STD	Y+0,R24
    01E7 E021      LDI	R18,1
    01E8 E008      LDI	R16,0x8
    01E9 DEA9      RCALL	_DisplayOneChar
(0240) 		   delay_ms(10);
    01EA E00A      LDI	R16,0xA
    01EB E010      LDI	R17,0
    01EC D06F      RCALL	_delay_ms
(0241) 		   DisplayOneChar(9,1,(rd_val/10%10)+0x30);	 
    01ED E01A      LDI	R17,0xA
    01EE 2F06      MOV	R16,R22
    01EF 940E0275  CALL	div8u
    01F1 E01A      LDI	R17,0xA
    01F2 940E0273  CALL	mod8u
    01F4 2F80      MOV	R24,R16
    01F5 5D80      SUBI	R24,0xD0
    01F6 8388      STD	Y+0,R24
    01F7 E021      LDI	R18,1
    01F8 E009      LDI	R16,0x9
    01F9 DE99      RCALL	_DisplayOneChar
(0242) 		   delay_ms(10);
    01FA E00A      LDI	R16,0xA
    01FB E010      LDI	R17,0
    01FC D05F      RCALL	_delay_ms
(0243) 		   DisplayOneChar(10,1,rd_val%10+0x30);	  
    01FD E01A      LDI	R17,0xA
    01FE 2F06      MOV	R16,R22
    01FF 940E0273  CALL	mod8u
    0201 2F80      MOV	R24,R16
    0202 5D80      SUBI	R24,0xD0
    0203 8388      STD	Y+0,R24
    0204 E021      LDI	R18,1
    0205 E00A      LDI	R16,0xA
    0206 DE8C      RCALL	_DisplayOneChar
(0244) 		   delay_ms(10);
    0207 E00A      LDI	R16,0xA
    0208 E010      LDI	R17,0
    0209 D052      RCALL	_delay_ms
(0245) 		   
(0246) 		   key_val=scan_key();	
    020A DEF9      RCALL	_scan_key
    020B 2EA0      MOV	R10,R16
(0247) 		   switch(key_val)		
    020C 2CCA      MOV	R12,R10
    020D 24DD      CLR	R13
    020E 01C6      MOVW	R24,R12
    020F 3B8F      CPI	R24,0xBF
    0210 E0E0      LDI	R30,0
    0211 079E      CPC	R25,R30
    0212 F111      BEQ	0x0235
    0213 EB8F      LDI	R24,0xBF
    0214 158C      CP	R24,R12
    0215 059D      CPC	R25,R13
    0216 F034      BLT	0x021D
    0217 01C6      MOVW	R24,R12
    0218 378F      CPI	R24,0x7F
    0219 E0E0      LDI	R30,0
    021A 079E      CPC	R25,R30
    021B F111      BEQ	0x023E
    021C C029      RJMP	0x0246
    021D 01C6      MOVW	R24,R12
    021E 3D8F      CPI	R24,0xDF
    021F E0E0      LDI	R30,0
    0220 079E      CPC	R25,R30
    0221 F071      BEQ	0x0230
    0222 3D8F      CPI	R24,0xDF
    0223 E0E0      LDI	R30,0
    0224 079E      CPC	R25,R30
    0225 F104      BLT	0x0246
    0226 01C6      MOVW	R24,R12
    0227 3E8F      CPI	R24,0xEF
    0228 E0E0      LDI	R30,0
    0229 079E      CPC	R25,R30
    022A F009      BEQ	0x022C
    022B C01A      RJMP	0x0246
(0248) 	   	   {				
(0249) 	   	   	case 0xef:if(wr_val<255)wr_val++;break;	
    022C 3F4F      CPI	R20,0xFF
    022D F4C0      BCC	0x0246
    022E 9543      INC	R20
    022F C016      RJMP	0x0246
(0250) 	   		case 0xdf:if(wr_val>0)wr_val--;break;	
    0230 2422      CLR	R2
    0231 1624      CP	R2,R20
    0232 F498      BCC	0x0246
    0233 954A      DEC	R20
    0234 C011      RJMP	0x0246
(0251) 	   		case 0xbf:i2c_Write(10,wr_val); 
    0235 2F24      MOV	R18,R20
    0236 E00A      LDI	R16,0xA
    0237 DF1E      RCALL	_i2c_Write
(0252) 				 DisplayOneChar(15,0,0xef);break;
    0238 EE8F      LDI	R24,0xEF
    0239 8388      STD	Y+0,R24
    023A 2722      CLR	R18
    023B E00F      LDI	R16,0xF
    023C DE56      RCALL	_DisplayOneChar
    023D C008      RJMP	0x0246
(0253) 	   		case 0x7f:rd_val=i2c_Read(10); 
    023E E00A      LDI	R16,0xA
    023F DEC6      RCALL	_i2c_Read
    0240 2F60      MOV	R22,R16
(0254) 			     DisplayOneChar(15,1,0xef);break;
    0241 EE8F      LDI	R24,0xEF
    0242 8388      STD	Y+0,R24
    0243 E021      LDI	R18,1
    0244 E00F      LDI	R16,0xF
    0245 DE4D      RCALL	_DisplayOneChar
(0255) 	   		default:break;		
(0256) 	   		}				
(0257) 			delay_ms(200); 
    0246 EC08      LDI	R16,0xC8
    0247 E010      LDI	R17,0
    0248 D013      RCALL	_delay_ms
(0258) 			DisplayOneChar(15,0,0x20);delay_ms(10); 
    0249 E280      LDI	R24,0x20
    024A 8388      STD	Y+0,R24
    024B 2722      CLR	R18
    024C E00F      LDI	R16,0xF
    024D DE45      RCALL	_DisplayOneChar
    024E E00A      LDI	R16,0xA
    024F E010      LDI	R17,0
    0250 D00B      RCALL	_delay_ms
(0259) 			DisplayOneChar(15,1,0x20);delay_ms(10); 
    0251 E280      LDI	R24,0x20
    0252 8388      STD	Y+0,R24
    0253 E021      LDI	R18,1
    0254 E00F      LDI	R16,0xF
    0255 DE3D      RCALL	_DisplayOneChar
    0256 E00A      LDI	R16,0xA
    0257 E010      LDI	R17,0
    0258 D003      RCALL	_delay_ms
    0259 CF5C      RJMP	0x01B6
    025A 9622      ADIW	R28,2
    025B 9508      RET
_delay_ms:
  time                 --> R20
    025C 940E029C  CALL	push_gset1
    025E 01A8      MOVW	R20,R16
(0260) 					
(0261)   		 }				
(0262) 	
(0263) }
(0264) 		   
(0265) /*********************延时time*1ms子函数*********************/
(0266) void delay_ms(unsigned int time)
(0267) 	 {
    025F C005      RJMP	0x0265
(0268) 	  while(time!=0)
(0269) 	  	  {		
(0270) 		   delay_us(1000);
    0260 EE08      LDI	R16,0xE8
    0261 E013      LDI	R17,3
    0262 D008      RCALL	_delay_us
(0271) 		   time--;
    0263 5041      SUBI	R20,1
    0264 4050      SBCI	R21,0
    0265 3040      CPI	R20,0
    0266 0745      CPC	R20,R21
    0267 F7C1      BNE	0x0260
    0268 940E029F  CALL	pop_gset1
    026A 9508      RET
(0272) 		  }
(0273) 	 }
(0274) 	 					
(0275) /********************延时子函数*********************/
(0276) void delay_us(int time)
(0277) 	 {     
(0278)   	  do
(0279) 	  	{
(0280) 		 time--;
_delay_us:
  time                 --> R16
    026B 5001      SUBI	R16,1
    026C 4010      SBCI	R17,0
(0281) 		}	
(0282)   	  while (time>1);
FILE: <library>
    026D E081      LDI	R24,1
    026E E090      LDI	R25,0
    026F 1780      CP	R24,R16
    0270 0791      CPC	R25,R17
    0271 F3CC      BLT	0x026B
    0272 9508      RET
mod8u:
    0273 9468      BSET	6
    0274 C001      RJMP	xdiv8u
div8u:
    0275 94E8      BCLR	6
xdiv8u:
    0276 932A      ST	R18,-Y
    0277 92FA      ST	R15,-Y
    0278 92EA      ST	R14,-Y
    0279 24FF      CLR	R15
    027A 24EE      CLR	R14
    027B E120      LDI	R18,0x10
    027C 0F00      LSL	R16
    027D 1CFF      ROL	R15
    027E 1CEE      ROL	R14
    027F 16E1      CP	R14,R17
    0280 F010      BCS	0x0283
    0281 1AE1      SUB	R14,R17
    0282 9503      INC	R16
    0283 952A      DEC	R18
    0284 F7B9      BNE	0x027C
    0285 F40E      BRTC	0x0287
    0286 2D0E      MOV	R16,R14
    0287 90E9      LD	R14,Y+
    0288 90F9      LD	R15,Y+
    0289 9129      LD	R18,Y+
    028A 9508      RET
pop_gset2:
    028B E0E2      LDI	R30,2
    028C 940C02A0  JMP	pop
pop_gset3:
    028E E0E4      LDI	R30,4
    028F 940C02A0  JMP	pop
pop_gset5:
    0291 27EE      CLR	R30
    0292 940C02A0  JMP	pop
push_gset5:
    0294 92FA      ST	R15,-Y
    0295 92EA      ST	R14,-Y
push_gset4:
    0296 92DA      ST	R13,-Y
    0297 92CA      ST	R12,-Y
push_gset3:
    0298 92BA      ST	R11,-Y
    0299 92AA      ST	R10,-Y
push_gset2:
    029A 937A      ST	R23,-Y
    029B 936A      ST	R22,-Y
push_gset1:
    029C 935A      ST	R21,-Y
    029D 934A      ST	R20,-Y
    029E 9508      RET
pop_gset1:
    029F E0E1      LDI	R30,1
pop:
    02A0 9149      LD	R20,Y+
    02A1 9159      LD	R21,Y+
    02A2 FDE0      SBRC	R30,0
    02A3 9508      RET
    02A4 9169      LD	R22,Y+
    02A5 9179      LD	R23,Y+
    02A6 FDE1      SBRC	R30,1
    02A7 9508      RET
    02A8 90A9      LD	R10,Y+
    02A9 90B9      LD	R11,Y+
    02AA FDE2      SBRC	R30,2
    02AB 9508      RET
    02AC 90C9      LD	R12,Y+
    02AD 90D9      LD	R13,Y+
    02AE FDE3      SBRC	R30,3
    02AF 9508      RET
    02B0 90E9      LD	R14,Y+
    02B1 90F9      LD	R15,Y+
    02B2 9508      RET

⌨️ 快捷键说明

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