📄 twi.lst
字号:
(0002) #include<macros.h>
(0003)
(0004) void put(unsigned int i)
(0005) {
(0006) char d[8]={0};
00C5 E286 LDI R24,0x26
00C6 E090 LDI R25,0
00C7 01FE MOVW R30,R28
00C8 E008 LDI R16,0x8
00C9 E010 LDI R17,0
00CA 93FA ST R31,-Y
00CB 93EA ST R30,-Y
00CC 939A ST R25,-Y
00CD 938A ST R24,-Y
00CE D09F RCALL asgncblk
(0007) Int_to_Char(i,d);
00CF 019E MOVW R18,R28
00D0 018A MOVW R16,R20
00D1 D005 RCALL _Int_to_Char
(0008) puts(d);
00D2 018E MOVW R16,R28
00D3 D039 RCALL _puts
(0009) }
00D4 9628 ADIW R28,0x8
00D5 D081 RCALL pop_gset1
00D6 9508 RET
_Int_to_Char:
p --> R20
i --> R22
00D7 D093 RCALL push_gset2
00D8 01A9 MOVW R20,R18
00D9 01B8 MOVW R22,R16
(0010) void Int_to_Char(unsigned int i,char *p)
(0011) {p[0]=i/1000+48;
00DA EE28 LDI R18,0xE8
00DB E033 LDI R19,3
00DC 018B MOVW R16,R22
00DD D05A RCALL div16u
00DE 01C8 MOVW R24,R16
00DF 96C0 ADIW R24,0x30
00E0 01FA MOVW R30,R20
00E1 8380 STD Z+0,R24
(0012) p[1]=(i/100)%10+48;
00E2 E624 LDI R18,0x64
00E3 E030 LDI R19,0
00E4 018B MOVW R16,R22
00E5 D052 RCALL div16u
00E6 E02A LDI R18,0xA
00E7 E030 LDI R19,0
00E8 D04D RCALL mod16u
00E9 01C8 MOVW R24,R16
00EA 96C0 ADIW R24,0x30
00EB 01FA MOVW R30,R20
00EC 8381 STD Z+1,R24
(0013) p[2]=(i%100)/10+48;
00ED E624 LDI R18,0x64
00EE E030 LDI R19,0
00EF 018B MOVW R16,R22
00F0 D045 RCALL mod16u
00F1 E02A LDI R18,0xA
00F2 E030 LDI R19,0
00F3 D044 RCALL div16u
00F4 01C8 MOVW R24,R16
00F5 96C0 ADIW R24,0x30
00F6 01FA MOVW R30,R20
00F7 8382 STD Z+2,R24
(0014) p[3]=(i%100)%10+48;
00F8 E624 LDI R18,0x64
00F9 E030 LDI R19,0
00FA 018B MOVW R16,R22
00FB D03A RCALL mod16u
00FC E02A LDI R18,0xA
00FD E030 LDI R19,0
00FE D037 RCALL mod16u
00FF 01C8 MOVW R24,R16
0100 96C0 ADIW R24,0x30
0101 01FA MOVW R30,R20
0102 8383 STD Z+3,R24
(0015) }
0103 D04E RCALL pop_gset2
0104 9508 RET
(0016) /* 字符输出函数 */
(0017) void putchar(char c)
(0018) {
(0019) while (!(UCSRA&(1<<UDRE)));
_putchar:
c --> R16
0105 9B5D SBIS 0x0B,5
0106 CFFE RJMP _putchar
(0020) UDR=c;
0107 B90C OUT 0x0C,R16
(0021) }
0108 9508 RET
(0022) /* 字符输入函数 */
(0023) unsigned char getchar(void)
(0024) {
(0025) while(!(UCSRA& (1<<RXC)));
_getchar:
0109 9B5F SBIS 0x0B,7
010A CFFE RJMP _getchar
(0026)
(0027) return UDR;
010B B10C IN R16,0x0C
010C 9508 RET
_puts:
s --> R20
010D D046 RCALL push_gset1
010E 01A8 MOVW R20,R16
(0028) }
(0029) /* 字符串输出函数 */
(0030) void puts(char * s)
(0031) {
010F C005 RJMP 0x0115
(0032) while (*s)
(0033) {
(0034) putchar(*s);
0110 01FA MOVW R30,R20
0111 8100 LDD R16,Z+0
0112 DFF2 RCALL _putchar
(0035) s++;
0113 5F4F SUBI R20,0xFF
0114 4F5F SBCI R21,0xFF
0115 01FA MOVW R30,R20
0116 8020 LDD R2,Z+0
0117 2022 TST R2
0118 F7B9 BNE 0x0110
(0036) }
(0037) putchar(0x0a);//回车换行
0119 E00A LDI R16,0xA
011A DFEA RCALL _putchar
(0038) putchar(0x0d);
011B E00D LDI R16,0xD
011C DFE8 RCALL _putchar
(0039)
(0040) }
011D D039 RCALL pop_gset1
011E 9508 RET
_putstr:
s --> R20
011F D034 RCALL push_gset1
0120 01A8 MOVW R20,R16
(0041) /* 不含回车换行的字符串输出函数 */
(0042) void putstr(char * s)
(0043) {
0121 C005 RJMP 0x0127
(0044) while (*s)
(0045) {
(0046) putchar(*s);
0122 01FA MOVW R30,R20
0123 8100 LDD R16,Z+0
0124 DFE0 RCALL _putchar
(0047) s++;
0125 5F4F SUBI R20,0xFF
0126 4F5F SBCI R21,0xFF
0127 01FA MOVW R30,R20
0128 8020 LDD R2,Z+0
0129 2022 TST R2
012A F7B9 BNE 0x0122
(0048) }
(0049) }
012B D02B RCALL pop_gset1
012C 9508 RET
(0050) /* UART初始化 */
(0051) void uart_init(void)
(0052) {
(0053)
(0054) UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);;//允许发送和接收
_uart_init:
012D E988 LDI R24,0x98
012E B98A OUT 0x0A,R24
(0055) UBRRL=47; // 4M 25 8M 51 7.3728M 47
012F E28F LDI R24,0x2F
0130 B989 OUT 0x09,R24
(0056) UBRRH=0; // 9600;
0131 2422 CLR R2
0132 BC20 OUT 0x20,R2
(0057) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
0133 E886 LDI R24,0x86
0134 BD80 OUT 0x20,R24
(0058) }
FILE: <library>
0135 9508 RET
mod16u:
0136 9468 BSET 6
0137 C001 RJMP xdiv16u
div16u:
0138 94E8 BCLR 6
xdiv16u:
0139 92EA ST R14,-Y
013A 92FA ST R15,-Y
013B 938A ST R24,-Y
013C 24EE CLR R14
013D 24FF CLR R15
013E E180 LDI R24,0x10
013F 0F00 LSL R16
0140 1F11 ROL R17
0141 1CEE ROL R14
0142 1CFF ROL R15
0143 16E2 CP R14,R18
0144 06F3 CPC R15,R19
0145 F018 BCS 0x0149
0146 1AE2 SUB R14,R18
0147 0AF3 SBC R15,R19
0148 9503 INC R16
0149 958A DEC R24
014A F7A1 BNE 0x013F
014B F416 BRTC 0x014E
014C 2D0E MOV R16,R14
014D 2D1F MOV R17,R15
014E 9189 LD R24,Y+
014F 90F9 LD R15,Y+
0150 90E9 LD R14,Y+
0151 9508 RET
pop_gset2:
0152 E0E2 LDI R30,2
0153 C004 RJMP pop
push_gset1:
0154 935A ST R21,-Y
0155 934A ST R20,-Y
0156 9508 RET
pop_gset1:
0157 E0E1 LDI R30,1
pop:
0158 9149 LD R20,Y+
0159 9159 LD R21,Y+
015A FDE0 SBRC R30,0
015B 9508 RET
015C 9169 LD R22,Y+
015D 9179 LD R23,Y+
015E FDE1 SBRC R30,1
015F 9508 RET
0160 90A9 LD R10,Y+
0161 90B9 LD R11,Y+
0162 FDE2 SBRC R30,2
0163 9508 RET
0164 90C9 LD R12,Y+
0165 90D9 LD R13,Y+
0166 FDE3 SBRC R30,3
0167 9508 RET
0168 90E9 LD R14,Y+
0169 90F9 LD R15,Y+
016A 9508 RET
push_gset2:
016B 937A ST R23,-Y
016C 936A ST R22,-Y
016D CFE6 RJMP push_gset1
asgncblk:
016E 93AA ST R26,-Y
016F 93BA ST R27,-Y
0170 93EA ST R30,-Y
0171 93FA ST R31,-Y
0172 920A ST R0,-Y
0173 81AF LDD R26,Y+7
0174 85B8 LDD R27,Y+8
0175 81ED LDD R30,Y+5
0176 81FE LDD R31,Y+6
0177 3000 CPI R16,0
0178 0701 CPC R16,R17
0179 F031 BEQ 0x0180
017A 95C8 LPM
017B 920D ST R0,X+
017C 9631 ADIW R30,1
017D 5001 SUBI R16,1
017E 4010 SBCI R17,0
017F CFF7 RJMP 0x0177
0180 9009 LD R0,Y+
0181 91F9 LD R31,Y+
0182 91E9 LD R30,Y+
0183 91B9 LD R27,Y+
0184 91A9 LD R26,Y+
0185 9624 ADIW R28,4
0186 9508 RET
<created procedures>:
0187 BF86 OUT 0x36,R24
0188 B626 IN R2,0x36
0189 FE27 SBRS R2,7
018A CFFD RJMP 0x0188
018B 9508 RET
018C E081 LDI R24,1
018D E090 LDI R25,0
018E 1784 CP R24,R20
018F 0795 CPC R25,R21
0190 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -