📄 delay.lis
字号:
.module delay.c
.area text(rom, con, rel)
0000 .dbfile D:\hexok项目\AVRNET项目\AVRNET光盘\AVRuIP\delay.c
0000 .dbfunc e delay_ms _delay_ms fV
0000 ; delay_count -> R10,R11
0000 ; delay_cnt -> R10,R11
0000 ; delay_cnt_buffer -> R12,R13
0000 ; ms -> R16
.even
0000 _delay_ms::
0000 0E940000 xcall push_gset4x
0004 .dbline -1
0004 .dbline 5
0004 ; #include "delay.h"
0004 ;
0004 ;
0004 ; void delay_ms(unsigned char ms)
0004 ; {
0004 .dbline 6
0004 ; unsigned short delay_count = F_CPU / 4000;
0004 .dbline 20
0004 ; #ifdef __GNUC__
0004 ; unsigned short cnt;
0004 ; asm volatile ("\n"
0004 ; "L_dl1%=:\n\t"
0004 ; "mov %A0, %A2\n\t"
0004 ; "mov %B0, %B2\n"
0004 ; "L_dl2%=:\n\t"
0004 ; "sbiw %A0, 1\n\t"
0004 ; "brne L_dl2%=\n\t"
0004 ; "dec %1\n\t" "brne L_dl1%=\n\t":"=&w" (cnt)
0004 ; :"r"(ms), "r"((unsigned short) (delay_count))
0004 ; );
0004 ; #else
0004 ; unsigned short delay_cnt = F_CPU/6000;
0004 80ED ldi R24,2000
0006 97E0 ldi R25,7
0008 5C01 movw R10,R24
000A 09C0 xjmp L3
000C L2:
000C .dbline 24
000C ; //unsigned short delay_cnt = 2400; //*KU* for 14.745600 MHz Clock
000C ; unsigned short delay_cnt_buffer;
000C ;
000C ; while (ms--) {
000C .dbline 25
000C ; delay_cnt_buffer = delay_cnt;
000C 6501 movw R12,R10
000E L5:
000E .dbline 26
000E L6:
000E .dbline 26
000E 1601 movw R2,R12
0010 C101 movw R24,R2
0012 0197 sbiw R24,1
0014 6C01 movw R12,R24
0016 2220 tst R2
0018 D1F7 brne L5
001A 3320 tst R3
001C C1F7 brne L5
001E X0:
001E .dbline 27
001E L3:
001E .dbline 24
001E 202E mov R2,R16
0020 3324 clr R3
0022 0150 subi R16,1
0024 2220 tst R2
0026 91F7 brne L2
0028 .dbline -2
0028 L1:
0028 0E940000 xcall pop_gset4x
002C .dbline 0 ; func end
002C 0895 ret
002E .dbsym r delay_count 10 s
002E .dbsym r delay_cnt 10 s
002E .dbsym r delay_cnt_buffer 12 s
002E .dbsym r ms 16 c
002E .dbend
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -