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