📄 usart1.lis
字号:
01AC ; putchar1(temp1+'0');
01AC 062F mov R16,R22
01AE 005D subi R16,208 ; addi 48
01B0 8EDF xcall _putchar1
01B2 04C0 xjmp L35
01B4 L34:
01B4 ; else
01B4 ; putchar1(temp1-10+'A');
01B4 062F mov R16,R22
01B6 0A50 subi R16,10
01B8 0F5B subi R16,191 ; addi 65
01BA 89DF xcall _putchar1
01BC L35:
01BC ;
01BC ; if(temp2<10)
01BC 4A30 cpi R20,10
01BE 20F4 brsh L36
01C0 ; putchar1(temp2+'0');
01C0 042F mov R16,R20
01C2 005D subi R16,208 ; addi 48
01C4 84DF xcall _putchar1
01C6 04C0 xjmp L37
01C8 L36:
01C8 ; else
01C8 ; putchar1(temp2-10+'A');
01C8 042F mov R16,R20
01CA 0A50 subi R16,10
01CC 0F5B subi R16,191 ; addi 65
01CE 7FDF xcall _putchar1
01D0 L37:
01D0 L33:
01D0 0E940000 xcall pop_gset2
01D4 .dbline 0 ; func end
01D4 0895 ret
01D6 ; buffer -> y+4
01D6 ; temp32U -> y+0
01D6 ; temp8S -> R10
01D6 ; Dec -> y+21
.even
01D6 _PUT_INT32U_DecTOString::
01D6 0E940000 xcall push_arg4
01DA 0E940000 xcall push_gset3
01DE 2F97 sbiw R28,15
01E0 ; }
01E0 ;
01E0 ; //格式转换函数,十进制数据转换为字符串 eg:输入001234,串口输出1234(去掉无效0)
01E0 ; void PUT_INT32U_DecTOString(INT32U Dec)
01E0 ; {
01E0 ; INT8S temp8S ;
01E0 ; INT32U temp32U ;
01E0 ; INT8U buffer[11];
01E0 ;
01E0 ; temp32U=Dec ;
01E0 FE01 movw R30,R28
01E2 2588 ldd R2,z+21
01E4 3688 ldd R3,z+22
01E6 4788 ldd R4,z+23
01E8 508C ldd R5,z+24
01EA FE01 movw R30,R28
01EC 2082 std z+0,R2
01EE 3182 std z+1,R3
01F0 4282 std z+2,R4
01F2 5382 std z+3,R5
01F4 ; for(temp8S=10;temp8S>=0;temp8S--)
01F4 8AE0 ldi R24,10
01F6 A82E mov R10,R24
01F8 3BC0 xjmp L42
01FA L39:
01FA 4AE0 ldi R20,10
01FC 50E0 ldi R21,0
01FE 60E0 ldi R22,0
0200 70E0 ldi R23,0
0202 FE01 movw R30,R28
0204 2080 ldd R2,z+0
0206 3180 ldd R3,z+1
0208 4280 ldd R4,z+2
020A 5380 ldd R5,z+3
020C 7A93 st -y,R23
020E 6A93 st -y,R22
0210 5A93 st -y,R21
0212 4A93 st -y,R20
0214 8101 movw R16,R2
0216 9201 movw R18,R4
0218 0E940000 xcall mod32u
021C 1801 movw R2,R16
021E 2901 movw R4,R18
0220 40E3 ldi R20,48
0222 50E0 ldi R21,0
0224 60E0 ldi R22,0
0226 70E0 ldi R23,0
0228 240E add R2,R20
022A 351E adc R3,R21
022C 461E adc R4,R22
022E 571E adc R5,R23
0230 CE01 movw R24,R28
0232 0496 adiw R24,4
0234 EA2D mov R30,R10
0236 FF27 clr R31
0238 E7FD sbrc R30,7
023A F095 com R31
023C E80F add R30,R24
023E F91F adc R31,R25
0240 2082 std z+0,R2
0242 4AE0 ldi R20,10
0244 50E0 ldi R21,0
0246 60E0 ldi R22,0
0248 70E0 ldi R23,0
024A FE01 movw R30,R28
024C 2080 ldd R2,z+0
024E 3180 ldd R3,z+1
0250 4280 ldd R4,z+2
0252 5380 ldd R5,z+3
0254 7A93 st -y,R23
0256 6A93 st -y,R22
0258 5A93 st -y,R21
025A 4A93 st -y,R20
025C 8101 movw R16,R2
025E 9201 movw R18,R4
0260 0E940000 xcall div32u
0264 FE01 movw R30,R28
0266 0083 std z+0,R16
0268 1183 std z+1,R17
026A 2283 std z+2,R18
026C 3383 std z+3,R19
026E L40:
026E AA94 dec R10
0270 L42:
0270 8A2D mov R24,R10
0272 8030 cpi R24,0
0274 0CF0 brlt X0
0276 C1CF xjmp L39
0278 X0:
0278 ; {
0278 ; buffer[temp8S]=temp32U%10+'0' ;
0278 ; temp32U=temp32U/10 ;
0278 ; }
0278 ; buffer[11]='\0' ;
0278 2224 clr R2
027A 2F86 std y+15,R2
027C ;
027C ; if(buffer[0]=='0')
027C 8C81 ldd R24,y+4
027E 8033 cpi R24,48
0280 09F0 breq X1
0282 50C0 xjmp L44
0284 X1:
0284 ; {
0284 ; if(buffer[1]=='0')
0284 8D81 ldd R24,y+5
0286 8033 cpi R24,48
0288 09F0 breq X2
028A 47C0 xjmp L46
028C X2:
028C ; {
028C ; if(buffer[2]=='0')
028C 8E81 ldd R24,y+6
028E 8033 cpi R24,48
0290 09F0 breq X3
0292 3EC0 xjmp L49
0294 X3:
0294 ; {
0294 ; if(buffer[3]=='0')
0294 8F81 ldd R24,y+7
0296 8033 cpi R24,48
0298 09F0 breq X4
029A 35C0 xjmp L52
029C X4:
029C ; {
029C ; if(buffer[4]=='0')
029C 8885 ldd R24,y+8
029E 8033 cpi R24,48
02A0 69F5 brne L55
02A2 ; {
02A2 ; if(buffer[5]=='0')
02A2 8985 ldd R24,y+9
02A4 8033 cpi R24,48
02A6 29F5 brne L58
02A8 ; {
02A8 ; if(buffer[6]=='0')
02A8 8A85 ldd R24,y+10
02AA 8033 cpi R24,48
02AC E9F4 brne L61
02AE ; {
02AE ; if(buffer[7]=='0')
02AE 8B85 ldd R24,y+11
02B0 8033 cpi R24,48
02B2 A9F4 brne L64
02B4 ; {
02B4 ; if(buffer[8]=='0')
02B4 8C85 ldd R24,y+12
02B6 8033 cpi R24,48
02B8 69F4 brne L67
02BA ; {
02BA ; if(buffer[9]=='0')
02BA 8D85 ldd R24,y+13
02BC 8033 cpi R24,48
02BE 29F4 brne L70
02C0 ; Uart1_SendString(&buffer[10]);
02C0 8E01 movw R16,R28
02C2 025F subi R16,242 ; offset = 14
02C4 1F4F sbci R17,255
02C6 59DF xcall _Uart1_SendString
02C8 31C0 xjmp L45
02CA L70:
02CA ; else Uart1_SendString(&buffer[9]);
02CA 8E01 movw R16,R28
02CC 035F subi R16,243 ; offset = 13
02CE 1F4F sbci R17,255
02D0 54DF xcall _Uart1_SendString
02D2 ; }
02D2 2CC0 xjmp L45
02D4 L67:
02D4 ; else Uart1_SendString(&buffer[8]);
02D4 8E01 movw R16,R28
02D6 045F subi R16,244 ; offset = 12
02D8 1F4F sbci R17,255
02DA 4FDF xcall _Uart1_SendString
02DC ; }
02DC 27C0 xjmp L45
02DE L64:
02DE ; else Uart1_SendString(&buffer[7]);
02DE 8E01 movw R16,R28
02E0 055F subi R16,245 ; offset = 11
02E2 1F4F sbci R17,255
02E4 4ADF xcall _Uart1_SendString
02E6 ; }
02E6 22C0 xjmp L45
02E8 L61:
02E8 ; else Uart1_SendString(&buffer[6]);
02E8 8E01 movw R16,R28
02EA 065F subi R16,246 ; offset = 10
02EC 1F4F sbci R17,255
02EE 45DF xcall _Uart1_SendString
02F0 ; }
02F0 1DC0 xjmp L45
02F2 L58:
02F2 ; else Uart1_SendString(&buffer[5]);
02F2 8E01 movw R16,R28
02F4 075F subi R16,247 ; offset = 9
02F6 1F4F sbci R17,255
02F8 40DF xcall _Uart1_SendString
02FA ; }
02FA 18C0 xjmp L45
02FC L55:
02FC ; else Uart1_SendString(&buffer[4]);
02FC 8E01 movw R16,R28
02FE 085F subi R16,248 ; offset = 8
0300 1F4F sbci R17,255
0302 3BDF xcall _Uart1_SendString
0304 ; }
0304 13C0 xjmp L45
0306 L52:
0306 ; else Uart1_SendString(&buffer[3]);
0306 8E01 movw R16,R28
0308 095F subi R16,249 ; offset = 7
030A 1F4F sbci R17,255
030C 36DF xcall _Uart1_SendString
030E ; }
030E 0EC0 xjmp L45
0310 L49:
0310 ; else Uart1_SendString(&buffer[2]);
0310 8E01 movw R16,R28
0312 0A5F subi R16,250 ; offset = 6
0314 1F4F sbci R17,255
0316 31DF xcall _Uart1_SendString
0318 ; }
0318 09C0 xjmp L45
031A L46:
031A ; else Uart1_SendString(&buffer[1]);
031A 8E01 movw R16,R28
031C 0B5F subi R16,251 ; offset = 5
031E 1F4F sbci R17,255
0320 2CDF xcall _Uart1_SendString
0322 ; }
0322 04C0 xjmp L45
0324 L44:
0324 ; else Uart1_SendString(&buffer[0]);
0324 8E01 movw R16,R28
0326 0C5F subi R16,252 ; offset = 4
0328 1F4F sbci R17,255
032A 27DF xcall _Uart1_SendString
032C L45:
032C L38:
032C 2F96 adiw R28,15
032E 0E940000 xcall pop_gset3
0332 2496 adiw R28,4
0334 .dbline 0 ; func end
0334 0895 ret
0336 ; temp32U -> y+0
0336 ; num -> R10
0336 ; temp8U -> R12
.even
0336 _StringTODec::
0336 0E940000 xcall push_gset5
033A 2497 sbiw R28,4
033C ; }
033C ;
033C ; //串口输入字符,转换成十进制,即"123456"--123456
033C ; INT32U StringTODec(void)
033C ; {
033C ; INT8U num,temp8U ;
033C ; INT32U temp32U ;
033C ;
033C ; temp8U=0x00 ;
033C CC24 clr R12
033E ; num=0x00 ;
033E AA24 clr R10
0340 5BC1 xjmp L85
0342 L84:
0342 ; //如果不是回车键
0342 ; while(temp8U!=0x0D)
0342 ; {
0342 ; temp8U=getchar1();
0342 EDDE xcall _getchar1
0344 C02E mov R12,R16
0346 ;
0346 ; if(temp8U>='0'&&temp8U<='9')
0346 0033 cpi R16,48
0348 08F4 brsh X6
034A 56C1 xjmp L87
034C X6:
034C 89E3 ldi R24,57
034E 8017 cp R24,R16
0350 08F4 brsh X7
0352 52C1 xjmp L87
0354 X7:
0354 ; {
0354 ; putchar1(temp8U);
0354 BCDE xcall _putchar1
0356 ; num++;
0356 A394 inc R10
0358 ; switch(num)
0358 EA2C mov R14,R10
035A FF24 clr R15
035C C701 movw R24,R14
035E 8130 cpi R24,1
0360 E0E0 ldi R30,0
0362 9E07 cpc R25,R30
0364 21F1 breq L92
0366 8230 cpi R24,2
0368 E0E0 ldi R30,0
036A 9E07 cpc R25,R30
036C 09F4 brne X8
036E 2FC0 xjmp L93
0370 X8:
0370 8330 cpi R24,3
0372 E0E0 ldi R30,0
0374 9E07 cpc R25,R30
0376 09F4 brne X9
0378 51C0 xjmp L94
037A X9:
037A 8430 cpi R24,4
037C E0E0 ldi R30,0
037E 9E07 cpc R25,R30
0380 09F4 brne X10
0382 73C0 xjmp L95
0384 X10:
0384 8530 cpi R24,5
0386 E0E0 ldi R30,0
0388 9E07 cpc R25,R30
038A 09F4 brne X11
038C 95C0 xjmp L96
038E X11:
038E 8630 cpi R24,6
0390 E0E0 ldi R30,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -