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

📄 main.lst

📁 单片机中的中断处理模块
💻 LST
📖 第 1 页 / 共 5 页
字号:
    0156 E02A      LDI	R18,0xA
    0157 E030      LDI	R19,0
    0158 940E08C2  CALL	div16u
    015A 2F40      MOV	R20,R16
(0115)   display_one(5,temp);
    015B 2F24      MOV	R18,R20
    015C E005      LDI	R16,5
    015D DF94      RCALL	_display_one
(0116)   delay_ms(6);
    015E E006      LDI	R16,6
    015F E010      LDI	R17,0
    0160 DF78      RCALL	_delay_ms
(0117)   led_contrl_port |= (1<<5);
    0161 9A95      SBI	0x12,5
(0118)  }
    0162 C00A      RJMP	0x016D
(0119)  else
(0120)  {
(0121)   if(mode==1)
    0163 2D8A      MOV	R24,R10
    0164 3081      CPI	R24,1
    0165 F439      BNE	0x016D
(0122)   {
(0123)   display_one(5,0);
    0166 2722      CLR	R18
    0167 E005      LDI	R16,5
    0168 DF89      RCALL	_display_one
(0124)   delay_ms(6);
    0169 E006      LDI	R16,6
    016A E010      LDI	R17,0
    016B DF6D      RCALL	_delay_ms
(0125)   led_contrl_port |= (1<<5);
    016C 9A95      SBI	0x12,5
(0126)   }
(0127)  }
(0128)  //个位
(0129)   temp=data%10;
    016D E02A      LDI	R18,0xA
    016E E030      LDI	R19,0
    016F 018B      MOVW	R16,R22
    0170 940E08C0  CALL	mod16u
    0172 2F40      MOV	R20,R16
(0130)   display_one(4,temp);
    0173 2F24      MOV	R18,R20
    0174 E004      LDI	R16,4
    0175 DF7C      RCALL	_display_one
(0131)   delay_ms(6);
    0176 E006      LDI	R16,6
    0177 E010      LDI	R17,0
    0178 DF60      RCALL	_delay_ms
(0132)   led_contrl_port |= (1<<4);
    0179 9A94      SBI	0x12,4
    017A 940E08DF  CALL	pop_gset3
    017C 9508      RET
_display_float:
  temp2                --> R22
  temp                 --> R20
  data                 --> Y+22
    017D 940E08BB  CALL	push_arg4
    017F 940E08E6  CALL	push_gset3
    0181 9760      SBIW	R28,0x10
(0133) }
(0134) 
(0135) /***********************
(0136) ** 显示四位浮点数 本函数占用 mega16 的空间 19%
(0137) ** 输入:要显示的四位数
(0138) ** 说明:可以小于四位数,自动补零
(0139) ************************/
(0140) 
(0141) void display_float(float data)
(0142) {
(0143)  UNS8 temp;
(0144)  UNS16 temp2; //用于把浮点数变为整形
(0145)  // 人为保证data的值,可以不要错误处理。
(0146)  if (data>=1000)
    0182 01FE      MOVW	R30,R28
    0183 8826      LDD	R2,Z+22
    0184 8837      LDD	R3,Z+23
    0185 8C40      LDD	R4,Z+24
    0186 8C51      LDD	R5,Z+25
    0187 925A      ST	R5,-Y
    0188 924A      ST	R4,-Y
    0189 923A      ST	R3,-Y
    018A 922A      ST	R2,-Y
    018B EC00      LDI	R16,0xC0
    018C E010      LDI	R17,0
    018D 940E090A  CALL	lpm32
    018F 933A      ST	R19,-Y
    0190 932A      ST	R18,-Y
    0191 931A      ST	R17,-Y
    0192 930A      ST	R16,-Y
    0193 940E0A54  CALL	cmp32f
    0195 F00C      BLT	0x0197
(0147)  {
(0148)   led_error();
    0196 D71E      RCALL	_led_error
(0149)  }
(0150)  if (data<=0)
    0197 EB0C      LDI	R16,0xBC
    0198 E010      LDI	R17,0
    0199 940E090A  CALL	lpm32
    019B 933A      ST	R19,-Y
    019C 932A      ST	R18,-Y
    019D 931A      ST	R17,-Y
    019E 930A      ST	R16,-Y
    019F 01FE      MOVW	R30,R28
    01A0 8C22      LDD	R2,Z+26
    01A1 8C33      LDD	R3,Z+27
    01A2 8C44      LDD	R4,Z+28
    01A3 8C55      LDD	R5,Z+29
    01A4 925A      ST	R5,-Y
    01A5 924A      ST	R4,-Y
    01A6 923A      ST	R3,-Y
    01A7 922A      ST	R2,-Y
    01A8 940E0A54  CALL	cmp32f
    01AA F00C      BLT	0x01AC
(0151)  {
(0152)   led_error();
    01AB D709      RCALL	_led_error
(0153)  }
(0154)  //
(0155)  if(data<1)       //比如 0.123
    01AC 01FE      MOVW	R30,R28
    01AD 8826      LDD	R2,Z+22
    01AE 8837      LDD	R3,Z+23
    01AF 8C40      LDD	R4,Z+24
    01B0 8C51      LDD	R5,Z+25
    01B1 925A      ST	R5,-Y
    01B2 924A      ST	R4,-Y
    01B3 923A      ST	R3,-Y
    01B4 922A      ST	R2,-Y
    01B5 EB08      LDI	R16,0xB8
    01B6 E010      LDI	R17,0
    01B7 940E090A  CALL	lpm32
    01B9 933A      ST	R19,-Y
    01BA 932A      ST	R18,-Y
    01BB 931A      ST	R17,-Y
    01BC 930A      ST	R16,-Y
    01BD 940E0A54  CALL	cmp32f
    01BF F00C      BLT	0x01C1
    01C0 C117      RJMP	0x02D8
(0156)  {
(0157)   display_one(7,0);   //显示0.
    01C1 2722      CLR	R18
    01C2 E007      LDI	R16,7
    01C3 DF2E      RCALL	_display_one
(0158)   led_port &= 0x7F; //点亮对应小数点
    01C4 B38B      IN	R24,0x1B
    01C5 778F      ANDI	R24,0x7F
    01C6 BB8B      OUT	0x1B,R24
(0159)   delay_ms(6);
    01C7 E006      LDI	R16,6
    01C8 E010      LDI	R17,0
    01C9 DF0F      RCALL	_delay_ms
(0160)   led_contrl_port |= (1<<7);
    01CA 9A97      SBI	0x12,7
(0161)   
(0162)   temp=(data*10);   // 0.123*10 = 1
    01CB EB04      LDI	R16,0xB4
    01CC E010      LDI	R17,0
    01CD 940E090A  CALL	lpm32
    01CF 933A      ST	R19,-Y
    01D0 932A      ST	R18,-Y
    01D1 931A      ST	R17,-Y
    01D2 930A      ST	R16,-Y
    01D3 01FE      MOVW	R30,R28
    01D4 8C22      LDD	R2,Z+26
    01D5 8C33      LDD	R3,Z+27
    01D6 8C44      LDD	R4,Z+28
    01D7 8C55      LDD	R5,Z+29
    01D8 925A      ST	R5,-Y
    01D9 924A      ST	R4,-Y
    01DA 923A      ST	R3,-Y
    01DB 922A      ST	R2,-Y
    01DC 940E0A88  CALL	empy32f
    01DE 01FE      MOVW	R30,R28
    01DF 8300      STD	Z+0,R16
    01E0 8311      STD	Z+1,R17
    01E1 8322      STD	Z+2,R18
    01E2 8333      STD	Z+3,R19
    01E3 01FE      MOVW	R30,R28
    01E4 8020      LDD	R2,Z+0
    01E5 8031      LDD	R3,Z+1
    01E6 8042      LDD	R4,Z+2
    01E7 8053      LDD	R5,Z+3
    01E8 925A      ST	R5,-Y
    01E9 924A      ST	R4,-Y
    01EA 923A      ST	R3,-Y
    01EB 922A      ST	R2,-Y
    01EC EB00      LDI	R16,0xB0
    01ED E010      LDI	R17,0
    01EE 940E090A  CALL	lpm32
    01F0 933A      ST	R19,-Y
    01F1 932A      ST	R18,-Y
    01F2 931A      ST	R17,-Y
    01F3 930A      ST	R16,-Y
    01F4 940E0A54  CALL	cmp32f
    01F6 F0CC      BLT	0x0210
    01F7 01FE      MOVW	R30,R28
    01F8 8020      LDD	R2,Z+0
    01F9 8031      LDD	R3,Z+1
    01FA 8042      LDD	R4,Z+2
    01FB 8053      LDD	R5,Z+3
    01FC 925A      ST	R5,-Y
    01FD 924A      ST	R4,-Y
    01FE 923A      ST	R3,-Y
    01FF 922A      ST	R2,-Y
    0200 EB00      LDI	R16,0xB0
    0201 E010      LDI	R17,0
    0202 940E090A  CALL	lpm32
    0204 933A      ST	R19,-Y
    0205 932A      ST	R18,-Y
    0206 931A      ST	R17,-Y
    0207 930A      ST	R16,-Y
    0208 940E09A1  CALL	sub32f
    020A 940E0924  CALL	fp2int
    020C 01A8      MOVW	R20,R16
    020D 5040      SUBI	R20,0
    020E 4850      SBCI	R21,0x80
    020F C008      RJMP	0x0218
    0210 01FE      MOVW	R30,R28
    0211 8100      LDD	R16,Z+0
    0212 8111      LDD	R17,Z+1
    0213 8122      LDD	R18,Z+2
    0214 8133      LDD	R19,Z+3
    0215 940E0924  CALL	fp2int
    0217 01A8      MOVW	R20,R16
(0163)   display_one(6,temp);
    0218 2F24      MOV	R18,R20
    0219 E006      LDI	R16,6
    021A DED7      RCALL	_display_one
(0164)   delay_ms(6);
    021B E006      LDI	R16,6
    021C E010      LDI	R17,0
    021D DEBB      RCALL	_delay_ms
(0165)   led_contrl_port |= (1<<6);
    021E 9A96      SBI	0x12,6
(0166)   
(0167)   temp2=(data*100);
    021F EA0C      LDI	R16,0xAC
    0220 E010      LDI	R17,0
    0221 940E090A  CALL	lpm32
    0223 933A      ST	R19,-Y
    0224 932A      ST	R18,-Y
    0225 931A      ST	R17,-Y
    0226 930A      ST	R16,-Y
    0227 01FE      MOVW	R30,R28
    0228 8C22      LDD	R2,Z+26
    0229 8C33      LDD	R3,Z+27
    022A 8C44      LDD	R4,Z+28
    022B 8C55      LDD	R5,Z+29
    022C 925A      ST	R5,-Y
    022D 924A      ST	R4,-Y
    022E 923A      ST	R3,-Y
    022F 922A      ST	R2,-Y
    0230 940E0A88  CALL	empy32f
    0232 01FE      MOVW	R30,R28
    0233 8304      STD	Z+4,R16
    0234 8315      STD	Z+5,R17
    0235 8326      STD	Z+6,R18
    0236 8337      STD	Z+7,R19
    0237 01FE      MOVW	R30,R28
    0238 8024      LDD	R2,Z+4
    0239 8035      LDD	R3,Z+5
    023A 8046      LDD	R4,Z+6
    023B 8057      LDD	R5,Z+7
    023C 925A      ST	R5,-Y
    023D 924A      ST	R4,-Y
    023E 923A      ST	R3,-Y
    023F 922A      ST	R2,-Y
    0240 EB00      LDI	R16,0xB0
    0241 E010      LDI	R17,0
    0242 940E090A  CALL	lpm32
    0244 933A      ST	R19,-Y
    0245 932A      ST	R18,-Y
    0246 931A      ST	R17,-Y
    0247 930A      ST	R16,-Y
    0248 940E0A54  CALL	cmp32f
    024A F0D4      BLT	0x0265
    024B 01FE      MOVW	R30,R28
    024C 8024      LDD	R2,Z+4
    024D 8035      LDD	R3,Z+5
    024E 8046      LDD	R4,Z+6
    024F 8057      LDD	R5,Z+7
    0250 925A      ST	R5,-Y
    0251 924A      ST	R4,-Y
    0252 923A      ST	R3,-Y
    0253 922A      ST	R2,-Y
    0254 EB00      LDI	R16,0xB0
    0255 E010      LDI	R17,0
    0256 940E090A  CALL	lpm32
    0258 933A      ST	R19,-Y
    0259 932A      ST	R18,-Y
    025A 931A      ST	R17,-Y
    025B 930A      ST	R16,-Y
    025C 940E09A1  CALL	sub32f
    025E 940E0924  CALL	fp2int
    0260 01C8      MOVW	R24,R16
    0261 5080      SUBI	R24,0
    0262 4890      SBCI	R25,0x80
    0263 015C      MOVW	R10,R24
    0264 C008      RJMP	0x026D
    0265 01FE      MOVW	R30,R28
    0266 8104      LDD	R16,Z+4
    0267 8115      LDD	R17,Z+5
    0268 8126      LDD	R18,Z+6
    0269 8137      LDD	R19,Z+7
    026A 940E0924  CALL	fp2int
    026C 0158      MOVW	R10,R16
    026D 01B5      MOVW	R22,R10
(0168)   temp=temp2%10; // 0.123*100%10 = 2
    026E E02A      LDI	R18,0xA
    026F E030      LDI	R19,0
    0270 018B      MOVW	R16,R22
    0271 940E08C0  CALL	mod16u
    0273 2F40      MOV	R20,R16
(0169)   display_one(5,temp);
    0274 2F24      MOV	R18,R20
    0275 E005      LDI	R16,5
    0276 DE7B      RCALL	_display_one
(0170)   delay_ms(6);
    0277 E006      LDI	R16,6
    0278 E010      LDI	R17,0
    0279 DE5F      RCALL	_delay_ms
(0171)   led_contrl_port |= (1<<5);
    027A 9A95      SBI	0x12,5
(0172)   
(0173)   temp2=(data*1000);
    027B EC00      LDI	R16,0xC0
    027C E010      LDI	R17,0
    027D 940E090A  CALL	lpm32
    027F 933A      ST	R19,-Y
    0280 932A      ST	R18,-Y
    0281 931A      ST	R17,-Y
    0282 930A      ST	R16,-Y
    0283 01FE      MOVW	R30,R28
    0284 8C22      LDD	R2,Z+26
    0285 8C33      LDD	R3,Z+27
    0286 8C44      LDD	R4,Z+28
    0287 8C55      LDD	R5,Z+29
    0288 925A      ST	R5,-Y
    0289 924A      ST	R4,-Y
    028A 923A      ST	R3,-Y
    028B 922A      ST	R2,-Y
    028C 940E0A88  CALL	empy32f
    028E 01FE      MOVW	R30,R28
    028F 8700      STD	Z+8,R16
    0290 8711      STD	Z+9,R17
    0291 8722      STD	Z+10,R18
    0292 8733      STD	Z+11,R19
    0293 01FE      MOVW	R30,R28
    0294 8420      LDD	R2,Z+8
    0295 8431      LDD	R3,Z+9
    0296 8442      LDD	R4,Z+10
    0297 8453      LDD	R5,Z+11
    0298 925A      ST	R5,-Y
    0299 924A      ST	R4,-Y
    029A 923A      ST	R3,-Y
    029B 922A      ST	R2,-Y
    029C EB00      LDI	R16,0xB0
    029D E010      LDI	R17,0
    029E 940E090A  CALL	lpm32
    02A0 933A      ST	R19,-Y
    02A1 932A      ST	R18,-Y
    02A2 931A      ST	R17,-Y
    02A3 930A      ST	R16,-Y
    02A4 940E0A54  CALL	cmp32f
    02A6 F0D4      BLT	0x02C1
    02A7 01FE      MOVW	R30,R28
    02A8 8420      LDD	R2,Z+8
    02A9 8431      LDD	R3,Z+9
    02AA 8442      LDD	R4,Z+10
    02AB 8453      LDD	R5,Z+11
    02AC 925A      ST	R5,-Y
    02AD 924A      ST	R4,-Y
    02AE 923A      ST	R3,-Y
    02AF 922A      ST	R2,-Y
    02B0 EB00      LDI	R16,0xB0
    02B1 E010      LDI	R17,0
    02B2 940E090A  CALL	lpm32
    02B4 933A      ST	R19,-Y
    02B5 932A      ST	R18,-Y
    02B6 931A      ST	R17,-Y
    02B7 930A      ST	R16,-Y
    02B8 940E09A1  CALL	sub32f
    02BA 940E0924  CALL	fp2int
    02BC 01C8      MOVW	R24,R16
    02BD 5080      SUBI	R24,0
    02BE 4890      SBCI	R25,0x80
    02BF 015C      MOVW	R10,R24
    02C0 C008      RJMP	0x02C9
    02C1 01FE      MOVW	R30,R28
    02C2 8500      LDD	R16,Z+8
    02C3 8511      LDD	R17,Z+9
    02C4 8522      LDD	R18,Z+10
    02C5 8533      LDD	R19,Z+11
    02C6 940E0924  CALL	fp2int
    02C8 0158      MOVW	R10,R16
    02C9 01B5      MOVW	R22,R10
(0174)   temp=temp2%10; // 0.123*100%10 = 3
    02CA E02A      LDI	R18,0xA
    02CB E030      LDI	R19,0
    02CC 018B      MOVW	R16,R22
    02CD 940E08C0  CALL	mod16u
    02CF 2F40      MOV	R20,R16
(0175)   display_one(4,temp);
    02D0 2F24      MOV	R18,R20
    02D1 E004      LDI	R16,4
    02D2 DE1F      RCALL	_display_one
(0176)   delay_ms(6);
    02D3 E006      LDI	R16,6
    02D4 E010      LDI	R17,0
    02D5 DE03      RCALL	_delay_ms
(0177)   led_contrl_port |= (1<<4);
    02D6 9A94      SBI	0x12,4
(0178)  }
    02D7 C436      RJMP	0x070E
(0179)  else if(data<10)  //比如1.234
    02D8 01FE      MOVW	R30,R28
    02D9 8826      LDD	R2,Z+22
    02DA 8837      LDD	R3,Z+23
    02DB 8C40      LDD	R4,Z+24
    02DC 8C51      LDD	R5,Z+25

⌨️ 快捷键说明

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