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

📄 18b20.lst

📁 一个关于AVR单片机的例程
💻 LST
📖 第 1 页 / 共 4 页
字号:
    02A1 E624      LDI	R18,0x64
    02A2 E030      LDI	R19,0
    02A3 940E02FB  CALL	div16u
    02A5 2F40      MOV	R20,R16
(0069)   display_one(2,temp);
    02A6 2F24      MOV	R18,R20
    02A7 E002      LDI	R16,2
    02A8 DFB2      RCALL	_display_one
(0070)   delay_ms(6);
    02A9 E006      LDI	R16,6
    02AA E010      LDI	R17,0
    02AB 940E00A6  CALL	_delay_ms
(0071)   led_contrl_port &=~ (1<<2);
    02AD 98C2      CBI	0x18,2
(0072)  }
    02AE C00B      RJMP	0x02BA
(0073)  else
(0074)  {
(0075)   if(mode==1)
    02AF 2D8A      MOV	R24,R10
    02B0 3081      CPI	R24,1
    02B1 F441      BNE	0x02BA
(0076)   {
(0077)   display_one(2,0);
    02B2 2722      CLR	R18
    02B3 E002      LDI	R16,2
    02B4 DFA6      RCALL	_display_one
(0078)   delay_ms(6);
    02B5 E006      LDI	R16,6
    02B6 E010      LDI	R17,0
    02B7 940E00A6  CALL	_delay_ms
(0079)   led_contrl_port &=~ (1<<2);
    02B9 98C2      CBI	0x18,2
(0080)   }
(0081)  }
(0082)  //十位
(0083)  if(data>10)
    02BA E08A      LDI	R24,0xA
    02BB E090      LDI	R25,0
    02BC 1786      CP	R24,R22
    02BD 0797      CPC	R25,R23
    02BE F498      BCC	0x02D2
(0084)  {
(0085)   temp=(data%100)/10;
    02BF E624      LDI	R18,0x64
    02C0 E030      LDI	R19,0
    02C1 018B      MOVW	R16,R22
    02C2 940E02F9  CALL	mod16u
    02C4 E02A      LDI	R18,0xA
    02C5 E030      LDI	R19,0
    02C6 940E02FB  CALL	div16u
    02C8 2F40      MOV	R20,R16
(0086)   display_one(1,temp);
    02C9 2F24      MOV	R18,R20
    02CA E001      LDI	R16,1
    02CB DF8F      RCALL	_display_one
(0087)   delay_ms(6);
    02CC E006      LDI	R16,6
    02CD E010      LDI	R17,0
    02CE 940E00A6  CALL	_delay_ms
(0088)   led_contrl_port &=~ (1<<1);
    02D0 98C1      CBI	0x18,1
(0089)  }
    02D1 C00B      RJMP	0x02DD
(0090)  else
(0091)  {
(0092)   if(mode==1)
    02D2 2D8A      MOV	R24,R10
    02D3 3081      CPI	R24,1
    02D4 F441      BNE	0x02DD
(0093)   {
(0094)   display_one(1,0);
    02D5 2722      CLR	R18
    02D6 E001      LDI	R16,1
    02D7 DF83      RCALL	_display_one
(0095)   delay_ms(6);
    02D8 E006      LDI	R16,6
    02D9 E010      LDI	R17,0
    02DA 940E00A6  CALL	_delay_ms
(0096)   led_contrl_port &=~ (1<<1);
    02DC 98C1      CBI	0x18,1
(0097)   }
(0098)  }
(0099)  //个位
(0100)   temp=data%10;
    02DD E02A      LDI	R18,0xA
    02DE E030      LDI	R19,0
    02DF 018B      MOVW	R16,R22
    02E0 940E02F9  CALL	mod16u
    02E2 2F40      MOV	R20,R16
(0101)   display_one(0,temp);
    02E3 2F24      MOV	R18,R20
    02E4 2700      CLR	R16
    02E5 DF75      RCALL	_display_one
(0102)   delay_ms(6);
    02E6 E006      LDI	R16,6
    02E7 E010      LDI	R17,0
    02E8 940E00A6  CALL	_delay_ms
(0103)   led_contrl_port &=~ (1<<0);
    02EA 98C0      CBI	0x18,0
    02EB 940E0340  CALL	pop_gset3
    02ED 9508      RET
(0104) }
(0105) 
(0106) /***********************
(0107) ** 显示四位浮点数
(0108) ** 输入:要显示的四位数
(0109) ** 说明:可以小于四位数,自动补零
(0110)    没有调通
(0111) ************************/
(0112) /*
(0113) void display_float(float data)
(0114) {
(0115)  uint8 temp;
(0116)  // 人为保证data的值,可以不要错误处理。
(0117)  if (data>1000)
(0118)  {
(0119)   led_error();
(0120)   break;
(0121)  }
(0122)  if (data<0)
(0123)  {
(0124)   led_error();
(0125)   break;
(0126)  }
(0127)  //
(0128)  if(data<1)       //比如 0.123
(0129)  {
(0130)   display_one(3,0);   //显示0.
(0131)   led_port |= 0x07; //点亮对应小数点
(0132)   delay_ms(6);
(0133)   led_contrl_port &=~ (1<<3);
(0134)   
(0135)   temp=(data*10);   // 0.123*10 = 1
(0136)   display_one(2,temp);
(0137)   delay_ms(6);
(0138)   led_contrl_port &=~ (1<<2);
(0139)   
(0140)   temp=(data*100)%10; // 0.123*100%10 = 2
(0141)   display_one(1,temp);
(0142)   delay_ms(6);
(0143)   led_contrl_port &=~ (1<<1);
(0144)   
(0145)   temp=(data*1000)%10; // 0.123*100%10 = 3
(0146)   display_one(0,temp);
(0147)   delay_ms(6);
(0148)   led_contrl_port &=~ (1<<0);
(0149)  }
(0150)  else if(data<10)  //比如1.234
(0151)  {
(0152)   temp=(data/1);   // 1.234/1 = 1
(0153)   display_one(3,temp);
(0154)   led_port |= 0x07; //点亮对应小数点
(0155)   delay_ms(6);
(0156)   led_contrl_port &=~ (1<<3);
(0157)   //第一位小数
(0158)   temp=(data*10)%10; // 1.234*10%10 = 2
(0159)   display_one(2,temp);
(0160)   delay_ms(6);
(0161)   led_contrl_port &=~ (1<<2);
(0162)   //第二位小数
(0163)   temp=(data*100)%10; // 1.234*100%10 = 3
(0164)   display_one(1,temp);
(0165)   delay_ms(6);
(0166)   led_contrl_port &=~ (1<<1);
(0167)   //第三位小数
(0168)   temp=(data*1000)%10; // 1.234*1000%10 = 4
(0169)   display_one(0,temp);
(0170)   delay_ms(6);
(0171)   led_contrl_port &=~ (1<<0);
(0172)  }
(0173)  else if(data<100)   // 例如12.34
(0174)  {
(0175)   temp=(data/10);   // 12.34/10=1
(0176)   display_one(3,temp);
(0177)   delay_ms(6);
(0178)   led_contrl_port &=~ (1<<3);
(0179)   
(0180)   temp=(data%10);   // 12.34%10=2
(0181)   display_one(2,temp);
(0182)   led_port |= 0x07; //点亮对应小数点
(0183)   delay_ms(6);
(0184)   led_contrl_port &=~ (1<<2);
(0185)   
(0186)   temp=(data*10)%10; // 12.34*10%10=3
(0187)   display_one(1,temp);
(0188)   delay_ms(6);
(0189)   led_contrl_port &=~ (1<<1);
(0190)    
(0191)   temp=(data*100)%10;// 12.34*100%10=4
(0192)   display_one(0,temp);
(0193)   delay_ms(6);
(0194)   led_contrl_port &=~ (1<<0);
(0195)  }
(0196)  else if(data<1000)  //比如123.4
(0197)  {
(0198)   temp=(data/100);// 123.4/100=1
(0199)   display_one(3,temp);
(0200)   delay_ms(6);
(0201)   led_contrl_port &=~ (1<<3);
(0202)   
(0203)   temp=(data%100)/10;// 123.4%100/10=2
(0204)   display_one(2,temp);
(0205)   delay_ms(6);
(0206)   led_contrl_port &=~ (1<<2);
(0207)   
(0208)   temp=(data%10);// 123.4%10=3
(0209)   display_one(1,temp);
(0210)   delay_ms(6);
(0211)   led_contrl_port &=~ (1<<1);
(0212)   
(0213)   temp=(data*10)%10;// 123.4*10%10=4
(0214)   display_one(0,temp);
(0215)   delay_ms(6);
(0216)   led_contrl_port &=~ (1<<0);
(0217)  }
(0218)  else led_error();
(0219) }
(0220) */
(0221) /***********************************************
(0222) ** 异常处理,led全亮 8。8。8。8。
(0223) ***********************************************/
(0224) void led_error(void)
(0225) {
(0226)  // 以下两句将会使LED全亮,如果立即更改状态,将看不出来效果
(0227)   led_port = 0xFF;
_led_error:
    02EE EF8F      LDI	R24,0xFF
    02EF BB8B      OUT	0x1B,R24
(0228)   led_contrl_port |= (1<<led_a)|(1<<led_b)|(1<<led_c)|(1<<led_d);
FILE: <library>
    02F0 B388      IN	R24,0x18
    02F1 608F      ORI	R24,0xF
    02F2 BB88      OUT	0x18,R24
    02F3 9508      RET
push_arg4:
    02F4 933A      ST	R19,-Y
    02F5 932A      ST	R18,-Y
push_arg2:
    02F6 931A      ST	R17,-Y
    02F7 930A      ST	R16,-Y
    02F8 9508      RET
mod16u:
    02F9 9468      BSET	6
    02FA C001      RJMP	xdiv16u
div16u:
    02FB 94E8      BCLR	6
xdiv16u:
    02FC 92EA      ST	R14,-Y
    02FD 92FA      ST	R15,-Y
    02FE 938A      ST	R24,-Y
    02FF 24EE      CLR	R14
    0300 24FF      CLR	R15
    0301 E180      LDI	R24,0x10
    0302 0F00      LSL	R16
    0303 1F11      ROL	R17
    0304 1CEE      ROL	R14
    0305 1CFF      ROL	R15
    0306 16E2      CP	R14,R18
    0307 06F3      CPC	R15,R19
    0308 F018      BCS	0x030C
    0309 1AE2      SUB	R14,R18
    030A 0AF3      SBC	R15,R19
    030B 9503      INC	R16
    030C 958A      DEC	R24
    030D F7A1      BNE	0x0302
    030E F416      BRTC	0x0311
    030F 2D0E      MOV	R16,R14
    0310 2D1F      MOV	R17,R15
    0311 9189      LD	R24,Y+
    0312 90F9      LD	R15,Y+
    0313 90E9      LD	R14,Y+
    0314 9508      RET
mod8u:
    0315 9468      BSET	6
    0316 C001      RJMP	xdiv8u
div8u:
    0317 94E8      BCLR	6
xdiv8u:
    0318 932A      ST	R18,-Y
    0319 92FA      ST	R15,-Y
    031A 92EA      ST	R14,-Y
    031B 24FF      CLR	R15
    031C 24EE      CLR	R14
    031D E120      LDI	R18,0x10
    031E 0F00      LSL	R16
    031F 1CFF      ROL	R15
    0320 1CEE      ROL	R14
    0321 16E1      CP	R14,R17
    0322 F010      BCS	0x0325
    0323 1AE1      SUB	R14,R17
    0324 9503      INC	R16
    0325 952A      DEC	R18
    0326 F7B9      BNE	0x031E
    0327 F40E      BRTC	0x0329
    0328 2D0E      MOV	R16,R14
    0329 90E9      LD	R14,Y+
    032A 90F9      LD	R15,Y+
    032B 9129      LD	R18,Y+
    032C 9508      RET
empy16s:
    032D 920A      ST	R0,-Y
    032E 921A      ST	R1,-Y
    032F 938A      ST	R24,-Y
    0330 939A      ST	R25,-Y
    0331 9F02      MUL	R16,R18
    0332 01C0      MOVW	R24,R0
    0333 9F12      MUL	R17,R18
    0334 0D90      ADD	R25,R0
    0335 9F03      MUL	R16,R19
    0336 0D90      ADD	R25,R0
    0337 018C      MOVW	R16,R24
    0338 9199      LD	R25,Y+
    0339 9189      LD	R24,Y+
    033A 9019      LD	R1,Y+
    033B 9009      LD	R0,Y+
    033C 9508      RET
pop_gset2:
    033D E0E2      LDI	R30,2
    033E 940C0352  JMP	pop
pop_gset3:
    0340 E0E4      LDI	R30,4
    0341 940C0352  JMP	pop
pop_gset5:
    0343 27EE      CLR	R30
    0344 940C0352  JMP	pop
push_gset5:
    0346 92FA      ST	R15,-Y
    0347 92EA      ST	R14,-Y
push_gset4:
    0348 92DA      ST	R13,-Y
    0349 92CA      ST	R12,-Y
push_gset3:
    034A 92BA      ST	R11,-Y
    034B 92AA      ST	R10,-Y
push_gset2:
    034C 937A      ST	R23,-Y
    034D 936A      ST	R22,-Y
push_gset1:
    034E 935A      ST	R21,-Y
    034F 934A      ST	R20,-Y
    0350 9508      RET
pop_gset1:
    0351 E0E1      LDI	R30,1
pop:
    0352 9149      LD	R20,Y+
    0353 9159      LD	R21,Y+
    0354 FDE0      SBRC	R30,0
    0355 9508      RET
    0356 9169      LD	R22,Y+
    0357 9179      LD	R23,Y+
    0358 FDE1      SBRC	R30,1
    0359 9508      RET
    035A 90A9      LD	R10,Y+
    035B 90B9      LD	R11,Y+
    035C FDE2      SBRC	R30,2
    035D 9508      RET
    035E 90C9      LD	R12,Y+
    035F 90D9      LD	R13,Y+
    0360 FDE3      SBRC	R30,3
    0361 9508      RET
    0362 90E9      LD	R14,Y+
    0363 90F9      LD	R15,Y+
    0364 9508      RET
neg32:
    0365 9500      COM	R16
    0366 9510      COM	R17
    0367 9520      COM	R18
    0368 9530      COM	R19
    0369 5F0F      SUBI	R16,0xFF
    036A 4F1F      SBCI	R17,0xFF
    036B 4F2F      SBCI	R18,0xFF
    036C 4F3F      SBCI	R19,0xFF
    036D 9508      RET
lpm32:
    036E 93EA      ST	R30,-Y
    036F 93FA      ST	R31,-Y
    0370 920A      ST	R0,-Y
    0371 2FE0      MOV	R30,R16
    0372 2FF1      MOV	R31,R17
    0373 95C8      LPM
    0374 2D00      MOV	R16,R0
    0375 9631      ADIW	R30,1
    0376 95C8      LPM
    0377 2D10      MOV	R17,R0
    0378 9631      ADIW	R30,1
    0379 95C8      LPM
    037A 2D20      MOV	R18,R0
    037B 9631      ADIW	R30,1
    037C 95C8      LPM
    037D 2D30      MOV	R19,R0
    037E 9009      LD	R0,Y+
    037F 91F9      LD	R31,Y+
    0380 91E9      LD	R30,Y+
    0381 9508      RET
lsl8:
    0382 2311      TST	R17
    0383 F019      BEQ	0x0387
    0384 0F00      LSL	R16
    0385 951A      DEC	R17
    0386 CFFB      RJMP	lsl8
    0387 9508      RET
fp2int:
    0388 940E0509  CALL	savfacc1
    038A D014      RCALL	FTOI
    038B 2F02      MOV	R16,R18
    038C 2F13      MOV	R17,R19
    038D FD87      SBRC	R24,7
    038E C002      RJMP	nojump1
    038F 940C050C  JMP	restorefacc1
nojump1:
    0391 9510      COM	R17
    0392 9501      NEG	R16
    0393 4F1F      SBCI	R17,0xFF
    0394 940C050C  JMP	restorefacc1
fp2long:
    0396 940E0509  CALL	savfacc1
    0398 D008      RCALL	FTOL
    0399 FF87      SBRS	R24,7
    039A C002      RJMP	nojump2
    039B 940E0365  CALL	neg32
nojump2:
    039D 940C050C  JMP	restorefacc1
FTOI:
    039F E0BE      LDI	R27,0xE
    03A0 C001      RJMP	0x03A2
FTOL:
    03A1 E1BE      LDI	R27,0x1E
    03A2 940E050F  CALL	unpackfacc1
    03A4 F069      BEQ	0x03B2
    03A5 1BB3      SUB	R27,R19
    03A6 F009      BEQ	0x03A8
    03A7 F472      BPL	0x03B6
    03A8 2388      TST	R24
    03A9 F022      BMI	0x03AE
    03AA E010      LDI	R17,0
    03AB E70C      LDI	R16,0x7C

⌨️ 快捷键说明

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