📄 avr_gy-29.lst
字号:
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 + -