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

📄 avr_gy-29.lst

📁 GY-27资料源码 ADXL345 HMC5883L
💻 LST
📖 第 1 页 / 共 4 页
字号:
     224 931A      ST	R17,-Y
     225 930A      ST	R16,-Y
     226 0181      MOVW	R16,R2
     227 0192      MOVW	R18,R4
     228 940E 04D2 CALL	fpmule2
     22A 8309      STD	Y+1,R16
     22B 831A      STD	Y+2,R17
     22C 832B      STD	Y+3,R18
     22D 833C      STD	Y+4,R19
(0053)     conversion(temp);          //转换出显示需要的数据
     22E 8109      LDD	R16,Y+1
     22F 811A      LDD	R17,Y+2
     230 812B      LDD	R18,Y+3
     231 813C      LDD	R19,Y+4
     232 940E 03AE CALL	fpint
     234 DF99      RCALL	_conversion
(0054) 	LCD_write_char(0,0,'X');   //第0行,第0列 显示X
     235 E588      LDI	R24,0x58
     236 8388      STD	Y+0,R24
     237 2722      CLR	R18
     238 2700      CLR	R16
     239 DF88      RCALL	_LCD_write_char
(0055)     LCD_write_char(1,0,':'); 
     23A E38A      LDI	R24,0x3A
     23B 8388      STD	Y+0,R24
     23C 2722      CLR	R18
     23D E001      LDI	R16,1
     23E DF83      RCALL	_LCD_write_char
(0056)     LCD_write_char(3,0,display[0]); 
     23F 9020 0200 LDS	R2,display
     241 8228      STD	Y+0,R2
     242 2722      CLR	R18
     243 E003      LDI	R16,3
     244 DF7D      RCALL	_LCD_write_char
(0057) 	LCD_write_char(4,0,'.'); 
     245 E28E      LDI	R24,0x2E
     246 8388      STD	Y+0,R24
     247 2722      CLR	R18
     248 E004      LDI	R16,4
     249 DF78      RCALL	_LCD_write_char
(0058)     LCD_write_char(5,0,display[1]); 
     24A 9020 0201 LDS	R2,display+1
     24C 8228      STD	Y+0,R2
     24D 2722      CLR	R18
     24E E005      LDI	R16,5
     24F DF72      RCALL	_LCD_write_char
(0059)     LCD_write_char(6,0,display[2]); 
     250 9020 0202 LDS	R2,display+2
     252 8228      STD	Y+0,R2
     253 2722      CLR	R18
     254 E006      LDI	R16,6
     255 DF6C      RCALL	_LCD_write_char
(0060) 	LCD_write_char(7,0,'g'); 
     256 E687      LDI	R24,0x67
     257 8388      STD	Y+0,R24
     258 2722      CLR	R18
     259 E007      LDI	R16,7
     25A DF67      RCALL	_LCD_write_char
     25B 9625      ADIW	R28,5
     25C 9159      LD	R21,Y+
     25D 9149      LD	R20,Y+
     25E 9508      RET
_display_y:
  temp                 --> Y,+1
  y                    --> R20
     25F 934A      ST	R20,-Y
     260 935A      ST	R21,-Y
     261 9725      SBIW	R28,5
(0061) 
(0062) }
(0063) //*******************************
(0064) //显示y
(0065) void display_y(void)
(0066) {   float temp;
(0067)     int y;
(0068)      y=I2C_Read(0x35);
     262 E305      LDI	R16,0x35
     263 E010      LDI	R17,0
     264 DE94      RCALL	_I2C_Read
     265 2F40      MOV	R20,R16
     266 2755      CLR	R21
(0069) 	 y=(y<<8)+I2C_Read(0x34);
     267 E304      LDI	R16,0x34
     268 E010      LDI	R17,0
     269 DE8F      RCALL	_I2C_Read
     26A 2F54      MOV	R21,R20
     26B 2F40      MOV	R20,R16
(0070) 	 
(0071) 	if(y<0){
     26C 3040      CPI	R20,0
     26D E0E0      LDI	R30,0
     26E 075E      CPC	R21,R30
     26F F454      BGE	0x027A
(0072) 	 y=-y;
     270 9540      COM	R20
     271 9550      COM	R21
     272 5F4F      SUBI	R20,0xFF
     273 4F5F      SBCI	R21,0xFF
(0073)      LCD_write_char(2,1,'-');       //显示负符号位
     274 E28D      LDI	R24,0x2D
     275 8388      STD	Y+0,R24
     276 E021      LDI	R18,1
     277 E002      LDI	R16,2
     278 DF49      RCALL	_LCD_write_char
(0074) 	}
     279 C005      RJMP	0x027F
(0075) 	else 
(0076) 	LCD_write_char(2,1,' ');        //显示空格
     27A E280      LDI	R24,0x20
     27B 8388      STD	Y+0,R24
     27C E021      LDI	R18,1
     27D E002      LDI	R16,2
     27E DF43      RCALL	_LCD_write_char
(0077)     temp=(float)y*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
     27F EE04      LDI	R16,0xE4
     280 E010      LDI	R17,0
     281 940E 036B CALL	elpm32
     283 0118      MOVW	R2,R16
     284 0129      MOVW	R4,R18
     285 018A      MOVW	R16,R20
     286 940E 03DC CALL	int2fp
     288 933A      ST	R19,-Y
     289 932A      ST	R18,-Y
     28A 931A      ST	R17,-Y
     28B 930A      ST	R16,-Y
     28C 0181      MOVW	R16,R2
     28D 0192      MOVW	R18,R4
     28E 940E 04D2 CALL	fpmule2
     290 8309      STD	Y+1,R16
     291 831A      STD	Y+2,R17
     292 832B      STD	Y+3,R18
     293 833C      STD	Y+4,R19
(0078)     conversion(temp);          //转换出显示需要的数据
     294 8109      LDD	R16,Y+1
     295 811A      LDD	R17,Y+2
     296 812B      LDD	R18,Y+3
     297 813C      LDD	R19,Y+4
     298 940E 03AE CALL	fpint
     29A DF33      RCALL	_conversion
(0079) 	LCD_write_char(0,1,'y');   //第0行,第0列 显示X
     29B E789      LDI	R24,0x79
     29C 8388      STD	Y+0,R24
     29D E021      LDI	R18,1
     29E 2700      CLR	R16
     29F DF22      RCALL	_LCD_write_char
(0080)     LCD_write_char(1,1,':'); 
     2A0 E38A      LDI	R24,0x3A
     2A1 8388      STD	Y+0,R24
     2A2 E021      LDI	R18,1
     2A3 E001      LDI	R16,1
     2A4 DF1D      RCALL	_LCD_write_char
(0081)     LCD_write_char(3,1,display[0]); 
     2A5 9020 0200 LDS	R2,display
     2A7 8228      STD	Y+0,R2
     2A8 E021      LDI	R18,1
     2A9 E003      LDI	R16,3
     2AA DF17      RCALL	_LCD_write_char
(0082) 	LCD_write_char(4,1,'.'); 
     2AB E28E      LDI	R24,0x2E
     2AC 8388      STD	Y+0,R24
     2AD E021      LDI	R18,1
     2AE E004      LDI	R16,4
     2AF DF12      RCALL	_LCD_write_char
(0083)     LCD_write_char(5,1,display[1]); 
     2B0 9020 0201 LDS	R2,display+1
     2B2 8228      STD	Y+0,R2
     2B3 E021      LDI	R18,1
     2B4 E005      LDI	R16,5
     2B5 DF0C      RCALL	_LCD_write_char
(0084)     LCD_write_char(6,1,display[2]); 
     2B6 9020 0202 LDS	R2,display+2
     2B8 8228      STD	Y+0,R2
     2B9 E021      LDI	R18,1
     2BA E006      LDI	R16,6
     2BB DF06      RCALL	_LCD_write_char
(0085) 	LCD_write_char(7,1,'g'); 
     2BC E687      LDI	R24,0x67
     2BD 8388      STD	Y+0,R24
     2BE E021      LDI	R18,1
     2BF E007      LDI	R16,7
     2C0 DF01      RCALL	_LCD_write_char
     2C1 9625      ADIW	R28,5
     2C2 9159      LD	R21,Y+
     2C3 9149      LD	R20,Y+
     2C4 9508      RET
_display_z:
  temp                 --> Y,+1
  z                    --> R20
     2C5 934A      ST	R20,-Y
     2C6 935A      ST	R21,-Y
     2C7 9725      SBIW	R28,5
(0086) }
(0087) 
(0088) //*******************************
(0089) //显示z
(0090) void display_z(void)
(0091) {   float temp;
(0092)     int z;
(0093) 
(0094)      z=I2C_Read(0x37);
     2C8 E307      LDI	R16,0x37
     2C9 E010      LDI	R17,0
     2CA DE2E      RCALL	_I2C_Read
     2CB 2F40      MOV	R20,R16
     2CC 2755      CLR	R21
(0095) 	 z=(z<<8)+I2C_Read(0x36);
     2CD E306      LDI	R16,0x36
     2CE E010      LDI	R17,0
     2CF DE29      RCALL	_I2C_Read
     2D0 2F54      MOV	R21,R20
     2D1 2F40      MOV	R20,R16
(0096) 	 
(0097) 	if(z<0){
     2D2 3040      CPI	R20,0
     2D3 E0E0      LDI	R30,0
     2D4 075E      CPC	R21,R30
     2D5 F454      BGE	0x02E0
(0098) 	 z=-z;
     2D6 9540      COM	R20
     2D7 9550      COM	R21
     2D8 5F4F      SUBI	R20,0xFF
     2D9 4F5F      SBCI	R21,0xFF
(0099)      LCD_write_char(10,1,'-');       //显示负符号位
     2DA E28D      LDI	R24,0x2D
     2DB 8388      STD	Y+0,R24
     2DC E021      LDI	R18,1
     2DD E00A      LDI	R16,0xA
     2DE DEE3      RCALL	_LCD_write_char
(0100) 	}
     2DF C005      RJMP	0x02E5
(0101) 	else 
(0102) 	LCD_write_char(10,1,' ');        //显示空格
     2E0 E280      LDI	R24,0x20
     2E1 8388      STD	Y+0,R24
     2E2 E021      LDI	R18,1
     2E3 E00A      LDI	R16,0xA
     2E4 DEDD      RCALL	_LCD_write_char
(0103)     temp=(float)z*3.9;  //计算数据和显示,查考ADXL345快速入门第4页
     2E5 EE04      LDI	R16,0xE4
     2E6 E010      LDI	R17,0
     2E7 940E 036B CALL	elpm32
     2E9 0118      MOVW	R2,R16
     2EA 0129      MOVW	R4,R18
     2EB 018A      MOVW	R16,R20
     2EC 940E 03DC CALL	int2fp
     2EE 933A      ST	R19,-Y
     2EF 932A      ST	R18,-Y
     2F0 931A      ST	R17,-Y
     2F1 930A      ST	R16,-Y
     2F2 0181      MOVW	R16,R2
     2F3 0192      MOVW	R18,R4
     2F4 940E 04D2 CALL	fpmule2
     2F6 8309      STD	Y+1,R16
     2F7 831A      STD	Y+2,R17
     2F8 832B      STD	Y+3,R18
     2F9 833C      STD	Y+4,R19
(0104)     conversion(temp);          //转换出显示需要的数据
     2FA 8109      LDD	R16,Y+1
     2FB 811A      LDD	R17,Y+2
     2FC 812B      LDD	R18,Y+3
     2FD 813C      LDD	R19,Y+4
     2FE 940E 03AE CALL	fpint
     300 DECD      RCALL	_conversion
(0105) 	LCD_write_char(10,0,'z');   //第0行,第0列 显示X
     301 E78A      LDI	R24,0x7A
     302 8388      STD	Y+0,R24
     303 2722      CLR	R18
     304 E00A      LDI	R16,0xA
     305 DEBC      RCALL	_LCD_write_char
(0106)     LCD_write_char(11,0,':'); 
     306 E38A      LDI	R24,0x3A
     307 8388      STD	Y+0,R24
     308 2722      CLR	R18
     309 E00B      LDI	R16,0xB
     30A DEB7      RCALL	_LCD_write_char
(0107)     LCD_write_char(11,1,display[0]); 
     30B 9020 0200 LDS	R2,display
     30D 8228      STD	Y+0,R2
     30E E021      LDI	R18,1
     30F E00B      LDI	R16,0xB
     310 DEB1      RCALL	_LCD_write_char
(0108) 	LCD_write_char(12,1,'.'); 
     311 E28E      LDI	R24,0x2E
     312 8388      STD	Y+0,R24
     313 E021      LDI	R18,1
     314 E00C      LDI	R16,0xC
     315 DEAC      RCALL	_LCD_write_char
(0109)     LCD_write_char(13,1,display[1]); 
     316 9020 0201 LDS	R2,display+1
     318 8228      STD	Y+0,R2
     319 E021      LDI	R18,1
     31A E00D      LDI	R16,0xD
     31B DEA6      RCALL	_LCD_write_char
(0110)     LCD_write_char(14,1,display[2]); 
     31C 9020 0202 LDS	R2,display+2
     31E 8228      STD	Y+0,R2
     31F E021      LDI	R18,1
     320 E00E      LDI	R16,0xE
     321 DEA0      RCALL	_LCD_write_char
(0111) 	LCD_write_char(15,1,'g'); 
     322 E687      LDI	R24,0x67
     323 8388      STD	Y+0,R24
     324 E021      LDI	R18,1
     325 E00F      LDI	R16,0xF
     326 DE9B      RCALL	_LCD_write_char
     327 9625      ADIW	R28,5
     328 9159      LD	R21,Y+
     329 9149      LD	R20,Y+
     32A 9508      RET
(0112) 
(0113) }
(0114) 
(0115) //***********************************************
(0116) void ADXL345_init(void)             //adxl345初始化
(0117) {
(0118) 	 I2C_Write(0x31,0x0B);   //测量范围,正负16g,13位模式
_ADXL345_init:
     32B E02B      LDI	R18,0xB
     32C E301      LDI	R16,0x31
     32D DD97      RCALL	_I2C_Write
(0119) 	 I2C_Write(0x2C,0x08);   //速率设定为12.5 参考pdf13页
     32E E028      LDI	R18,0x8
     32F E20C      LDI	R16,0x2C
     330 DD94      RCALL	_I2C_Write
(0120) 	 I2C_Write(0x2D,0x08);   //选择电源模式   参考pdf24页
     331 E028      LDI	R18,0x8
     332 E20D      LDI	R16,0x2D
     333 DD91      RCALL	_I2C_Write
(0121) 	 I2C_Write(0x2E,0x80);   //使能 DATA_READY 中断
     334 E820      LDI	R18,0x80
     335 E20E      LDI	R16,0x2E
     336 DD8E      RCALL	_I2C_Write
(0122) 	 I2C_Write(0x1E,0x00);   //X 偏移量 根据测试传感器的状态写入pdf29页
     337 2722      CLR	R18
     338 E10E      LDI	R16,0x1E
     339 DD8B      RCALL	_I2C_Write
(0123) 	 I2C_Write(0x1F,0x00);   //Y 偏移量 根据测试传感器的状态写入pdf29页
     33A 2722      CLR	R18
     33B E10F      LDI	R16,0x1F
     33C DD88      RCALL	_I2C_Write
(0124) 	 I2C_Write(0x20,0x05);   //Z 偏移量 根据测试传感器的状态写入pdf29页
     33D E025      LDI	R18,5
     33E E200      LDI	R16,0x20
     33F DD85      RCALL	_I2C_Write
     340 9508      RET
(0125) }
(0126) 
(0127) /*******************************
(0128) 主程序
(0129) *******************************/
(0130) void main(void)
(0131) {	
(0132) 	unsigned char i;
(0133) 		
(0134) 	 delay_nms(20);          //lcd上电延时
_main:
  i                    --> Y,+1
     341 E104      LDI	R16,0x14
     342 E010      LDI	R17,0
     343 DD73      RCALL	_delay_nms
(0135) 	 LCD_init();             //lcd初始化
     344 DE02      RCALL	_LCD_init
(0136) 	 ADXL345_init(); 
     345 DFE5      RCALL	_ADXL345_init
     346 C006      RJMP	0x034D
(0137)      
(0138) 	while(1){               //循环  
(0139) 	
(0140) 	display_x();      //显示x
     347 DEB1      RCALL	_display_x
(0141) 	display_y();      //显示y
     348 DF16      RCALL	_display_y
(0142) 	display_z();      //显示z
     349 DF7B      RCALL	_display_z
(0143) 
(0144) 	delay_nms(100); 
FILE: <library>
     34A E604      LDI	R16,0x64
     34B E010      LDI	R17,0
     34C DD6A      RCALL	_delay_nms
     34D CFF9      RJMP	0x0347
     34E 9508      RET
mod16u:
     34F 9468      BSET	6
     350 C001      RJMP	xdiv16u
div16u:
     351 94E8      BCLR	6
xdiv16u:
     352 92EA      ST	R14,-Y
     353 92FA      ST	R15,-Y
     354 938A      ST	R24,-Y
     355 24EE      CLR	R14
     356 24FF      CLR	R15
     357 E180      LDI	R24,0x10
     358 0F00      LSL	R16
     359 1F11      ROL	R17
     35A 1CEE      ROL	R14
     35B 1CFF      ROL	R15
     35C 16E2      CP	R14,R18

⌨️ 快捷键说明

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