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

📄 ac15-4.lst

📁 AVR学习资料
💻 LST
📖 第 1 页 / 共 3 页
字号:
(0176) 			   如果读失败返回0
(0177) *******************************************/
(0178) unsigned char i2c_Read(unsigned char RomAddress) 
(0179)       {
(0180) 	   unsigned char temp;
(0181) 	   Start();
    0110 EA84      LDI	R24,0xA4
    0111 BF86      OUT	0x36,R24
(0182) 	   Wait();
    0112 B626      IN	R2,0x36
    0113 FE27      SBRS	R2,7
    0114 CFFD      RJMP	0x0112
(0183) 	   if (TestAck()!=START) return 0;	   
    0115 B181      IN	R24,0x01
    0116 7F88      ANDI	R24,0xF8
    0117 3088      CPI	R24,0x8
    0118 F011      BEQ	0x011B
    0119 2700      CLR	R16
    011A C040      RJMP	0x015B
(0184) 	   Write8Bit(wr_device_add);
    011B EA80      LDI	R24,0xA0
    011C B983      OUT	0x03,R24
    011D E884      LDI	R24,0x84
    011E BF86      OUT	0x36,R24
(0185) 	   Wait(); 
    011F B626      IN	R2,0x36
    0120 FE27      SBRS	R2,7
    0121 CFFD      RJMP	0x011F
(0186) 	   if (TestAck()!=MT_SLA_ACK) return 0;
    0122 B181      IN	R24,0x01
    0123 7F88      ANDI	R24,0xF8
    0124 3188      CPI	R24,0x18
    0125 F011      BEQ	0x0128
    0126 2700      CLR	R16
    0127 C033      RJMP	0x015B
(0187) 	   Write8Bit(RomAddress);
    0128 B903      OUT	0x03,R16
    0129 E884      LDI	R24,0x84
    012A BF86      OUT	0x36,R24
(0188) 	   Wait();
    012B B626      IN	R2,0x36
    012C FE27      SBRS	R2,7
    012D CFFD      RJMP	0x012B
(0189) 	   if (TestAck()!=MT_DATA_ACK) return 0;
    012E B181      IN	R24,0x01
    012F 7F88      ANDI	R24,0xF8
    0130 3288      CPI	R24,0x28
    0131 F011      BEQ	0x0134
    0132 2700      CLR	R16
    0133 C027      RJMP	0x015B
(0190) 	   Start();
    0134 EA84      LDI	R24,0xA4
    0135 BF86      OUT	0x36,R24
(0191) 	   Wait();
    0136 B626      IN	R2,0x36
    0137 FE27      SBRS	R2,7
    0138 CFFD      RJMP	0x0136
(0192) 	   if (TestAck()!=RE_START)  return 0;
    0139 B181      IN	R24,0x01
    013A 7F88      ANDI	R24,0xF8
    013B 3180      CPI	R24,0x10
    013C F011      BEQ	0x013F
    013D 2700      CLR	R16
    013E C01C      RJMP	0x015B
(0193) 	   Write8Bit(rd_device_add);
    013F EA81      LDI	R24,0xA1
    0140 B983      OUT	0x03,R24
    0141 E884      LDI	R24,0x84
    0142 BF86      OUT	0x36,R24
(0194) 	   Wait();
    0143 B626      IN	R2,0x36
    0144 FE27      SBRS	R2,7
    0145 CFFD      RJMP	0x0143
(0195) 	   if(TestAck()!=MR_SLA_ACK)  return 0;
    0146 B181      IN	R24,0x01
    0147 7F88      ANDI	R24,0xF8
    0148 3480      CPI	R24,0x40
    0149 F011      BEQ	0x014C
    014A 2700      CLR	R16
    014B C00F      RJMP	0x015B
(0196) 	   Twi();
    014C E884      LDI	R24,0x84
    014D BF86      OUT	0x36,R24
(0197) 	   Wait();
    014E B626      IN	R2,0x36
    014F FE27      SBRS	R2,7
    0150 CFFD      RJMP	0x014E
(0198) 	   if(TestAck()!=MR_DATA_NOACK) return 0;	
    0151 B181      IN	R24,0x01
    0152 7F88      ANDI	R24,0xF8
    0153 3588      CPI	R24,0x58
    0154 F011      BEQ	0x0157
    0155 2700      CLR	R16
    0156 C004      RJMP	0x015B
(0199) 	   temp=TWDR;
    0157 B143      IN	R20,0x03
(0200)        Stop();
    0158 E984      LDI	R24,0x94
    0159 BF86      OUT	0x36,R24
(0201) 	   return temp;
    015A 2F04      MOV	R16,R20
    015B 940E03A4  CALL	pop_gset1
    015D 9508      RET
_i2c_Write:
  Wdata                --> R20
  RomAddress           --> R22
    015E 940E039F  CALL	push_gset2
    0160 2F42      MOV	R20,R18
    0161 2F60      MOV	R22,R16
(0202)       }
(0203) 	  
(0204) /******************************************
(0205)                I2C总线写一个字节
(0206) 			    返回0:写成功
(0207) 				返回非0:写失败
(0208) *******************************************/
(0209) unsigned char i2c_Write(unsigned char RomAddress,unsigned char Wdata) 
(0210) {
(0211) 	  Start();
    0162 EA84      LDI	R24,0xA4
    0163 BF86      OUT	0x36,R24
(0212) 	  Wait();
    0164 B626      IN	R2,0x36
    0165 FE27      SBRS	R2,7
    0166 CFFD      RJMP	0x0164
(0213) 	  if(TestAck()!=START) return 1;
    0167 B181      IN	R24,0x01
    0168 7F88      ANDI	R24,0xF8
    0169 3088      CPI	R24,0x8
    016A F011      BEQ	0x016D
    016B E001      LDI	R16,1
    016C C02B      RJMP	0x0198
(0214) 	  Write8Bit(wr_device_add);
    016D EA80      LDI	R24,0xA0
    016E B983      OUT	0x03,R24
    016F E884      LDI	R24,0x84
    0170 BF86      OUT	0x36,R24
(0215) 	  Wait();
    0171 B626      IN	R2,0x36
    0172 FE27      SBRS	R2,7
    0173 CFFD      RJMP	0x0171
(0216) 	  if(TestAck()!=MT_SLA_ACK) return 1;
    0174 B181      IN	R24,0x01
    0175 7F88      ANDI	R24,0xF8
    0176 3188      CPI	R24,0x18
    0177 F011      BEQ	0x017A
    0178 E001      LDI	R16,1
    0179 C01E      RJMP	0x0198
(0217) 	  Write8Bit(RomAddress);
    017A B963      OUT	0x03,R22
    017B E884      LDI	R24,0x84
    017C BF86      OUT	0x36,R24
(0218) 	  Wait();
    017D B626      IN	R2,0x36
    017E FE27      SBRS	R2,7
    017F CFFD      RJMP	0x017D
(0219) 	  if(TestAck()!=MT_DATA_ACK) return 1;
    0180 B181      IN	R24,0x01
    0181 7F88      ANDI	R24,0xF8
    0182 3288      CPI	R24,0x28
    0183 F011      BEQ	0x0186
    0184 E001      LDI	R16,1
    0185 C012      RJMP	0x0198
(0220) 	  Write8Bit(Wdata);
    0186 B943      OUT	0x03,R20
    0187 E884      LDI	R24,0x84
    0188 BF86      OUT	0x36,R24
(0221) 	  Wait();
    0189 B626      IN	R2,0x36
    018A FE27      SBRS	R2,7
    018B CFFD      RJMP	0x0189
(0222) 	  if(TestAck()!=MT_DATA_ACK) return 1;	
    018C B181      IN	R24,0x01
    018D 7F88      ANDI	R24,0xF8
    018E 3288      CPI	R24,0x28
    018F F011      BEQ	0x0192
    0190 E001      LDI	R16,1
    0191 C006      RJMP	0x0198
(0223) 	  Stop();
    0192 E984      LDI	R24,0x94
    0193 BF86      OUT	0x36,R24
(0224)  	  delay_ms(10);
    0194 E00A      LDI	R16,0xA
    0195 E010      LDI	R17,0
    0196 D1CA      RCALL	_delay_ms
(0225) 	  return 0;
    0197 2700      CLR	R16
    0198 940E0390  CALL	pop_gset2
    019A 9508      RET
(0226) }
(0227) 
(0228) /*****************定时器1初始化*************/
(0229) void timer1_init(void)
(0230) {
(0231)  TCNT1H = 0xF3; //setup
_timer1_init:
    019B EF83      LDI	R24,0xF3
    019C BD8D      OUT	0x2D,R24
(0232)  TCNT1L = 0xCB;
    019D EC8B      LDI	R24,0xCB
    019E BD8C      OUT	0x2C,R24
(0233)  TCCR1B = 0x04; //start Timer
    019F E084      LDI	R24,4
    01A0 BD8E      OUT	0x2E,R24
    01A1 9508      RET
_main:
  key_val              --> R22
    01A2 9722      SBIW	R28,2
(0234) }
(0235) 
(0236) //******************************************
(0237) void main(void)				
(0238) {
(0239)  	 uchar key_val;	
(0240) 	 init_devices();
    01A3 D1B3      RCALL	_init_devices
(0241)     delay_ms(400);			
    01A4 E900      LDI	R16,0x90
    01A5 E011      LDI	R17,1
    01A6 D1BA      RCALL	_delay_ms
(0242) 	InitLcd();		
    01A7 DEFF      RCALL	_InitLcd
(0243) 	LcdWriteCommand(0x01,1); 
    01A8 E021      LDI	R18,1
    01A9 E001      LDI	R16,1
    01AA DF1E      RCALL	_LcdWriteCommand
(0244) 	LcdWriteCommand(0x0c,1); 
    01AB E021      LDI	R18,1
    01AC E00C      LDI	R16,0xC
    01AD DF1B      RCALL	_LcdWriteCommand
(0245) 	ePutstr(0,0,str0);  
    01AE E584      LDI	R24,0x54
    01AF E090      LDI	R25,0
    01B0 8399      STD	Y+1,R25
    01B1 8388      STD	Y+0,R24
    01B2 2722      CLR	R18
    01B3 2700      CLR	R16
    01B4 DEA7      RCALL	_ePutstr
(0246) 	delay_ms(10);
    01B5 E00A      LDI	R16,0xA
    01B6 E010      LDI	R17,0
    01B7 D1A9      RCALL	_delay_ms
(0247) 	ePutstr(0,1,str1);  
    01B8 E685      LDI	R24,0x65
    01B9 E090      LDI	R25,0
    01BA 8399      STD	Y+1,R25
    01BB 8388      STD	Y+0,R24
    01BC E021      LDI	R18,1
    01BD 2700      CLR	R16
    01BE DE9D      RCALL	_ePutstr
(0248) 	delay_ms(10);
    01BF E00A      LDI	R16,0xA
    01C0 E010      LDI	R17,0
    01C1 D19F      RCALL	_delay_ms
    01C2 C142      RJMP	0x0305
(0249) 	/********************************************/
(0250) 		while(1)             
(0251) 		{
(0252) 		   DisplayOneChar(6,0,(time1.hour/10)+0x30);
    01C3 E01A      LDI	R17,0xA
    01C4 91000064  LDS	R16,time1
    01C6 940E037A  CALL	div8u
    01C8 2F80      MOV	R24,R16
    01C9 5D80      SUBI	R24,0xD0
    01CA 8388      STD	Y+0,R24
    01CB 2722      CLR	R18
    01CC E006      LDI	R16,6
    01CD DECD      RCALL	_DisplayOneChar
(0253) 		   delay_ms(10);
    01CE E00A      LDI	R16,0xA
    01CF E010      LDI	R17,0
    01D0 D190      RCALL	_delay_ms
(0254) 		   DisplayOneChar(7,0,(time1.hour%10)+0x30);
    01D1 E01A      LDI	R17,0xA
    01D2 91000064  LDS	R16,time1
    01D4 940E0378  CALL	mod8u
    01D6 2F80      MOV	R24,R16
    01D7 5D80      SUBI	R24,0xD0
    01D8 8388      STD	Y+0,R24
    01D9 2722      CLR	R18
    01DA E007      LDI	R16,7
    01DB DEBF      RCALL	_DisplayOneChar
(0255) 		   delay_ms(10);
    01DC E00A      LDI	R16,0xA
    01DD E010      LDI	R17,0
    01DE D182      RCALL	_delay_ms
(0256) 		   DisplayOneChar(9,0,(time1.min/10)+0x30);
    01DF E01A      LDI	R17,0xA
    01E0 91000065  LDS	R16,time1+1
    01E2 940E037A  CALL	div8u
    01E4 2F80      MOV	R24,R16
    01E5 5D80      SUBI	R24,0xD0
    01E6 8388      STD	Y+0,R24
    01E7 2722      CLR	R18
    01E8 E009      LDI	R16,0x9
    01E9 DEB1      RCALL	_DisplayOneChar
(0257) 		   delay_ms(10);
    01EA E00A      LDI	R16,0xA
    01EB E010      LDI	R17,0
    01EC D174      RCALL	_delay_ms
(0258) 		   DisplayOneChar(10,0,(time1.min%10)+0x30);
    01ED E01A      LDI	R17,0xA
    01EE 91000065  LDS	R16,time1+1
    01F0 940E0378  CALL	mod8u
    01F2 2F80      MOV	R24,R16
    01F3 5D80      SUBI	R24,0xD0
    01F4 8388      STD	Y+0,R24
    01F5 2722      CLR	R18
    01F6 E00A      LDI	R16,0xA
    01F7 DEA3      RCALL	_DisplayOneChar
(0259) 		   delay_ms(10);
    01F8 E00A      LDI	R16,0xA
    01F9 E010      LDI	R17,0
    01FA D166      RCALL	_delay_ms
(0260) 		   DisplayOneChar(12,0,(time1.sec/10)+0x30);
    01FB E01A      LDI	R17,0xA
    01FC 91000066  LDS	R16,time1+2
    01FE 940E037A  CALL	div8u
    0200 2F80      MOV	R24,R16
    0201 5D80      SUBI	R24,0xD0
    0202 8388      STD	Y+0,R24
    0203 2722      CLR	R18
    0204 E00C      LDI	R16,0xC
    0205 DE95      RCALL	_DisplayOneChar
(0261) 		   delay_ms(10);
    0206 E00A      LDI	R16,0xA
    0207 E010      LDI	R17,0
    0208 D158      RCALL	_delay_ms
(0262) 		   DisplayOneChar(13,0,(time1.sec%10)+0x30);
    0209 E01A      LDI	R17,0xA
    020A 91000066  LDS	R16,time1+2
    020C 940E0378  CALL	mod8u
    020E 2F80      MOV	R24,R16
    020F 5D80      SUBI	R24,0xD0
    0210 8388      STD	Y+0,R24
    0211 2722      CLR	R18
    0212 E00D      LDI	R16,0xD
    0213 DE87      RCALL	_DisplayOneChar
(0263) 		   delay_ms(10);
    0214 E00A      LDI	R16,0xA
    0215 E010      LDI	R17,0
    0216 D14A      RCALL	_delay_ms
(0264) 		   
(0265) 	   	   DisplayOneChar(7,1,(time2.hour/10)+0x30);
    0217 E01A      LDI	R17,0xA
    0218 91000060  LDS	R16,time2
    021A 940E037A  CALL	div8u
    021C 2F80      MOV	R24,R16
    021D 5D80      SUBI	R24,0xD0
    021E 8388      STD	Y+0,R24
    021F E021      LDI	R18,1
    0220 E007      LDI	R16,7
    0221 DE79      RCALL	_DisplayOneChar
(0266) 		   delay_ms(10);
    0222 E00A      LDI	R16,0xA
    0223 E010      LDI	R17,0
    0224 D13C      RCALL	_delay_ms
(0267) 		   DisplayOneChar(8,1,(time2.hour%10)+0x30);
    0225 E01A      LDI	R17,0xA
    0226 91000060  LDS	R16,time2
    0228 940E0378  CALL	mod8u
    022A 2F80      MOV	R24,R16
    022B 5D80      SUBI	R24,0xD0
    022C 8388      STD	Y+0,R24
    022D E021      LDI	R18,1
    022E E008      LDI	R16,0x8
    022F DE6B      RCALL	_DisplayOneChar
(0268) 		   delay_ms(10);
    0230 E00A      LDI	R16,0xA
    0231 E010      LDI	R17,0
    0232 D12E      RCALL	_delay_ms
(0269) 		   DisplayOneChar(10,1,(time2.min/10)+0x30);
    0233 E01A      LDI	R17,0xA
    0234 91000061  LDS	R16,time2+1
    0236 940E037A  CALL	div8u
    0238 2F80      MOV	R24,R16
    0239 5D80      SUBI	R24,0xD0
    023A 8388      STD	Y+0,R24
    023B E021      LDI	R18,1
    023C E00A      LDI	R16,0xA
    023D DE5D      RCALL	_DisplayOneChar
(0270) 		   delay_ms(10);
    023E E00A      LDI	R16,0xA
    023F E010      LDI	R17,0
    0240 D120      RCALL	_delay_ms
(0271)     	   DisplayOneChar(11,1,(time2.min%10)+0x30);
    0241 E01A      LDI	R17,0xA
    0242 91000061  LDS	R16,time2+1
    0244 940E0378  CALL	mod8u
    0246 2F80      MOV	R24,R16
    0247 5D80      SUBI	R24,0xD0
    0248 8388      STD	Y+0,R24
    0249 E021      LDI	R18,1
    024A E00B      LDI	R16,0xB
    024B DE4F      RCALL	_DisplayOneChar
(0272) 		   delay_ms(10);
    024C E00A      LDI	R16,0xA
    024D E010      LDI	R17,0
    024E D112      RCALL	_delay_ms
(0273) 		   key_val=scan_key();	
    024F DEBC      RCALL	_scan_key
    0250 2F60      MOV	R22,R16
(0274) 		   switch(key_val)		
    0251 2F46      MOV	R20,R22
    0252 2755      CLR	R21
    0253 3D4F      CPI	R20,0xDF
    0254 E0E0      LDI	R30,0
    0255 075E      CPC	R21,R30

⌨️ 快捷键说明

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