📄 main.lst
字号:
0274 939A ST R25,-Y
0275 938A ST R24,-Y
0276 940E039E CALL asgncblk
(0219) *p=card,card_read[20],*pp=card_read;
0278 01BE MOVW R22,R28
0279 5E67 SUBI R22,0xE7
027A 4F7F SBCI R23,0xFF
027B 01AE MOVW R20,R28
027C 5F4B SUBI R20,0xFB
027D 4F5F SBCI R21,0xFF
(0220) //*p = card;
(0221) // pp = card_read;
(0222) usart_init();
027E 940E0324 CALL _usart_init
(0223) //写入数据,器件型号model,器件地址DevAddr,开始地址addr,数据*P_data,数据长度num
(0224) AT24CxxWrite(0x0100,0,20,p,12);
0280 E08C LDI R24,0xC
0281 838C STD Y+4,R24
0282 837B STD Y+3,R23
0283 836A STD Y+2,R22
0284 E184 LDI R24,0x14
0285 E090 LDI R25,0
0286 8399 STD Y+1,R25
0287 8388 STD Y+0,R24
0288 2722 CLR R18
0289 E000 LDI R16,0
028A E011 LDI R17,1
028B DE59 RCALL _AT24CxxWrite
(0225) Delay(e2ptime);
028C E104 LDI R16,0x14
028D DFD7 RCALL _Delay
(0226) AT24CxxRead(0x0100,0,20,pp,12);
028E E08C LDI R24,0xC
028F 838C STD Y+4,R24
0290 835B STD Y+3,R21
0291 834A STD Y+2,R20
0292 E184 LDI R24,0x14
0293 E090 LDI R25,0
0294 8399 STD Y+1,R25
0295 8388 STD Y+0,R24
0296 2722 CLR R18
0297 E000 LDI R16,0
0298 E011 LDI R17,1
0299 DF6C RCALL _AT24CxxRead
(0227) for(i=0;i<12;i++)
029A 2744 CLR R20
029B C009 RJMP 0x02A5
(0228) {
(0229) UDR = card_read[i];
029C 01CE MOVW R24,R28
029D 9605 ADIW R24,5
029E 2FE4 MOV R30,R20
029F 27FF CLR R31
02A0 0FE8 ADD R30,R24
02A1 1FF9 ADC R31,R25
02A2 8020 LDD R2,Z+0
02A3 B82C OUT 0x0C,R2
02A4 9543 INC R20
02A5 304C CPI R20,0xC
02A6 F3A8 BCS 0x029C
(0230) }
(0231)
(0232) }
02A7 96AD ADIW R28,0x2D
02A8 9508 RET
_put:
d --> Y+0
i --> R20
02A9 940E0364 CALL push_gset1
02AB 01A8 MOVW R20,R16
02AC 9728 SBIW R28,0x8
FILE: E:\atmega16子函数\AT24C256\usart.c
(0001) #include <iom16v.h>
(0002) #include<macros.h>
(0003)
(0004) void put(unsigned int i)
(0005) {
(0006) char d[8]={0};
02AD E688 LDI R24,0x68
02AE E090 LDI R25,0
02AF 01FE MOVW R30,R28
02B0 E008 LDI R16,0x8
02B1 E010 LDI R17,0
02B2 93FA ST R31,-Y
02B3 93EA ST R30,-Y
02B4 939A ST R25,-Y
02B5 938A ST R24,-Y
02B6 940E039E CALL asgncblk
(0007) Int_to_Char(i,d);
02B8 019E MOVW R18,R28
02B9 018A MOVW R16,R20
02BA D006 RCALL _Int_to_Char
(0008) puts(d);
02BB 018E MOVW R16,R28
02BC D043 RCALL _puts
(0009) }
02BD 9628 ADIW R28,0x8
02BE 940E0367 CALL pop_gset1
02C0 9508 RET
_Int_to_Char:
p --> R20
i --> R22
02C1 940E037B CALL push_gset2
02C3 01A9 MOVW R20,R18
02C4 01B8 MOVW R22,R16
(0010) void Int_to_Char(unsigned int i,char *p)
(0011) {p[0]=i/1000+48;
02C5 EE28 LDI R18,0xE8
02C6 E033 LDI R19,3
02C7 018B MOVW R16,R22
02C8 940E0334 CALL div16u
02CA 01C8 MOVW R24,R16
02CB 96C0 ADIW R24,0x30
02CC 01FA MOVW R30,R20
02CD 8380 STD Z+0,R24
(0012) p[1]=(i/100)%10+48;
02CE E624 LDI R18,0x64
02CF E030 LDI R19,0
02D0 018B MOVW R16,R22
02D1 940E0334 CALL div16u
02D3 E02A LDI R18,0xA
02D4 E030 LDI R19,0
02D5 940E0332 CALL mod16u
02D7 01C8 MOVW R24,R16
02D8 96C0 ADIW R24,0x30
02D9 01FA MOVW R30,R20
02DA 8381 STD Z+1,R24
(0013) p[2]=(i%100)/10+48;
02DB E624 LDI R18,0x64
02DC E030 LDI R19,0
02DD 018B MOVW R16,R22
02DE 940E0332 CALL mod16u
02E0 E02A LDI R18,0xA
02E1 E030 LDI R19,0
02E2 940E0334 CALL div16u
02E4 01C8 MOVW R24,R16
02E5 96C0 ADIW R24,0x30
02E6 01FA MOVW R30,R20
02E7 8382 STD Z+2,R24
(0014) p[3]=(i%100)%10+48;
02E8 E624 LDI R18,0x64
02E9 E030 LDI R19,0
02EA 018B MOVW R16,R22
02EB 940E0332 CALL mod16u
02ED E02A LDI R18,0xA
02EE E030 LDI R19,0
02EF 940E0332 CALL mod16u
02F1 01C8 MOVW R24,R16
02F2 96C0 ADIW R24,0x30
02F3 01FA MOVW R30,R20
02F4 8383 STD Z+3,R24
(0015) }
02F5 940E035E CALL pop_gset2
02F7 9508 RET
(0016) /* 字符输出函数 */
(0017) void putchar(char c)
(0018) {
(0019) while (!(UCSRA&(1<<UDRE)));
_putchar:
c --> R16
02F8 9B5D SBIS 0x0B,5
02F9 CFFE RJMP _putchar
(0020) UDR=c;
02FA B90C OUT 0x0C,R16
(0021) }
02FB 9508 RET
(0022) /* 字符输入函数 */
(0023) unsigned char getchar(void)
(0024) {
(0025) while(!(UCSRA& (1<<RXC)));
_getchar:
02FC 9B5F SBIS 0x0B,7
02FD CFFE RJMP _getchar
(0026)
(0027) return UDR;
02FE B10C IN R16,0x0C
02FF 9508 RET
_puts:
s --> R20
0300 940E0364 CALL push_gset1
0302 01A8 MOVW R20,R16
(0028) }
(0029) /* 字符串输出函数 */
(0030) void puts(char * s)
(0031) {
0303 C005 RJMP 0x0309
(0032) while (*s)
(0033) {
(0034) putchar(*s);
0304 01FA MOVW R30,R20
0305 8100 LDD R16,Z+0
0306 DFF1 RCALL _putchar
(0035) s++;
0307 5F4F SUBI R20,0xFF
0308 4F5F SBCI R21,0xFF
0309 01FA MOVW R30,R20
030A 8020 LDD R2,Z+0
030B 2022 TST R2
030C F7B9 BNE 0x0304
(0036) }
(0037) putchar(0x0a);//回车换行
030D E00A LDI R16,0xA
030E DFE9 RCALL _putchar
(0038) putchar(0x0d);
030F E00D LDI R16,0xD
0310 DFE7 RCALL _putchar
(0039)
(0040) }
0311 940E0367 CALL pop_gset1
0313 9508 RET
_putstr:
s --> R20
0314 940E0364 CALL push_gset1
0316 01A8 MOVW R20,R16
(0041) /* 不含回车换行的字符串输出函数 */
(0042) void putstr(char * s)
(0043) {
0317 C005 RJMP 0x031D
(0044) while (*s)
(0045) {
(0046) putchar(*s);
0318 01FA MOVW R30,R20
0319 8100 LDD R16,Z+0
031A DFDD RCALL _putchar
(0047) s++;
031B 5F4F SUBI R20,0xFF
031C 4F5F SBCI R21,0xFF
031D 01FA MOVW R30,R20
031E 8020 LDD R2,Z+0
031F 2022 TST R2
0320 F7B9 BNE 0x0318
(0048) }
(0049) }
0321 940E0367 CALL pop_gset1
0323 9508 RET
(0050) /* UART初始化 */
(0051) void usart_init(void)
(0052) {
(0053)
(0054) UCSRB=(1<<RXEN)|(1<<TXEN)|(1<<RXCIE);;//允许发送和接收
_usart_init:
0324 E988 LDI R24,0x98
0325 B98A OUT 0x0A,R24
(0055) UBRRL=47; // 4M 25 8M 51 7.3728M 47
0326 E28F LDI R24,0x2F
0327 B989 OUT 0x09,R24
(0056) UBRRH=0; // 9600;
0328 2422 CLR R2
0329 BC20 OUT 0x20,R2
(0057) UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
032A E886 LDI R24,0x86
032B BD80 OUT 0x20,R24
(0058) }
FILE: <library>
032C 9508 RET
push_arg4:
032D 933A ST R19,-Y
032E 932A ST R18,-Y
push_arg2:
032F 931A ST R17,-Y
0330 930A ST R16,-Y
0331 9508 RET
mod16u:
0332 9468 BSET 6
0333 C001 RJMP xdiv16u
div16u:
0334 94E8 BCLR 6
xdiv16u:
0335 92EA ST R14,-Y
0336 92FA ST R15,-Y
0337 938A ST R24,-Y
0338 24EE CLR R14
0339 24FF CLR R15
033A E180 LDI R24,0x10
033B 0F00 LSL R16
033C 1F11 ROL R17
033D 1CEE ROL R14
033E 1CFF ROL R15
033F 16E2 CP R14,R18
0340 06F3 CPC R15,R19
0341 F018 BCS 0x0345
0342 1AE2 SUB R14,R18
0343 0AF3 SBC R15,R19
0344 9503 INC R16
0345 958A DEC R24
0346 F7A1 BNE 0x033B
0347 F416 BRTC 0x034A
0348 2D0E MOV R16,R14
0349 2D1F MOV R17,R15
034A 9189 LD R24,Y+
034B 90F9 LD R15,Y+
034C 90E9 LD R14,Y+
034D 9508 RET
empy16s:
034E 920A ST R0,-Y
034F 921A ST R1,-Y
0350 938A ST R24,-Y
0351 939A ST R25,-Y
0352 9F02 MUL R16,R18
0353 01C0 MOVW R24,R0
0354 9F12 MUL R17,R18
0355 0D90 ADD R25,R0
0356 9F03 MUL R16,R19
0357 0D90 ADD R25,R0
0358 018C MOVW R16,R24
0359 9199 LD R25,Y+
035A 9189 LD R24,Y+
035B 9019 LD R1,Y+
035C 9009 LD R0,Y+
035D 9508 RET
pop_gset2:
035E E0E2 LDI R30,2
035F 940C0368 JMP pop
pop_gset5:
0361 27EE CLR R30
0362 940C0368 JMP pop
push_gset1:
0364 935A ST R21,-Y
0365 934A ST R20,-Y
0366 9508 RET
pop_gset1:
0367 E0E1 LDI R30,1
pop:
0368 9149 LD R20,Y+
0369 9159 LD R21,Y+
036A FDE0 SBRC R30,0
036B 9508 RET
036C 9169 LD R22,Y+
036D 9179 LD R23,Y+
036E FDE1 SBRC R30,1
036F 9508 RET
0370 90A9 LD R10,Y+
0371 90B9 LD R11,Y+
0372 FDE2 SBRC R30,2
0373 9508 RET
0374 90C9 LD R12,Y+
0375 90D9 LD R13,Y+
0376 FDE3 SBRC R30,3
0377 9508 RET
0378 90E9 LD R14,Y+
0379 90F9 LD R15,Y+
037A 9508 RET
push_gset2:
037B 937A ST R23,-Y
037C 936A ST R22,-Y
037D 940C0364 JMP push_gset1
push_gset3:
037F 92BA ST R11,-Y
0380 92AA ST R10,-Y
0381 940C037B JMP push_gset2
push_gset4:
0383 92DA ST R13,-Y
0384 92CA ST R12,-Y
0385 940C037F JMP push_gset3
push_gset5:
0387 92FA ST R15,-Y
0388 92EA ST R14,-Y
0389 940C0383 JMP push_gset4
lsl32:
038B 920F PUSH R0
038C 9009 LD R0,Y+
038D 2000 TST R0
038E F031 BEQ 0x0395
038F 0F00 LSL R16
0390 1F11 ROL R17
0391 1F22 ROL R18
0392 1F33 ROL R19
0393 940A DEC R0
0394 CFF8 RJMP 0x038D
0395 900F POP R0
0396 9508 RET
lsr16:
0397 2322 TST R18
0398 F021 BEQ 0x039D
0399 9516 LSR R17
039A 9507 ROR R16
039B 952A DEC R18
039C CFFA RJMP lsr16
039D 9508 RET
asgncblk:
039E 93AA ST R26,-Y
039F 93BA ST R27,-Y
03A0 93EA ST R30,-Y
03A1 93FA ST R31,-Y
03A2 920A ST R0,-Y
03A3 81AF LDD R26,Y+7
03A4 85B8 LDD R27,Y+8
03A5 81ED LDD R30,Y+5
03A6 81FE LDD R31,Y+6
03A7 3000 CPI R16,0
03A8 0701 CPC R16,R17
03A9 F031 BEQ 0x03B0
03AA 95C8 LPM
03AB 920D ST R0,X+
03AC 9631 ADIW R30,1
03AD 5001 SUBI R16,1
03AE 4010 SBCI R17,0
03AF CFF7 RJMP 0x03A7
03B0 9009 LD R0,Y+
03B1 91F9 LD R31,Y+
03B2 91E9 LD R30,Y+
03B3 91B9 LD R27,Y+
03B4 91A9 LD R26,Y+
03B5 9624 ADIW R28,4
03B6 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -