📄 mydelay.lis
字号:
.module mydelay.c
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\PROTEU~2\5.avr\19.温度测量ds18b20\3.开搞ds18b20\mydelay.c
0000 .dbfile D:\教程及心得\Proteus\PROTEU~2\5.avr\19.温度测量ds18b20\3.开搞ds18b20\mydelay.c
0000 .dbfunc e delay0ms5us _delay0ms5us fV
.even
0000 _delay0ms5us::
0000 .dbline -1
0000 .dbline 3
0000 ; #include "mydelay.h"
0000 ; void delay0ms5us(void)
0000 ; {
0000 .dbline 7
0000 ; /*精确延时0ms 5us ,晶振8MHz*/
0000 ; /*us级精确延时 766us/晶振以内 延时=1+n*3 */
0000 ; // CLI;//屏蔽中断吗?
0000 ; asm("LDI R18,10");//1t ,寄存器R15~R30
0000 2AE0 LDI R18,10
0002 .dbline 8
0002 ; asm("CLZ");//1t
0002 9894 CLZ
0004 .dbline 9
0004 ; asm("LOOP1:DEC R18");//1t
0004 2A95 LOOP1:DEC R18
0006 .dbline 10
0006 ; asm("BRNE LOOP1");//1t或2t//标志位Z是0就转移
0006 F1F7 BRNE LOOP1
0008 .dbline 11
0008 ; asm("NOP");//1t
0008 0000 NOP
000A .dbline 12
000A ; asm("NOP");//1t
000A 0000 NOP
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
000E .dbfunc e delay0ms15us _delay0ms15us fV
.even
000E _delay0ms15us::
000E .dbline -1
000E .dbline 19
000E ; // SEI;
000E ; /*us级精确延时 24543us以内,用nop补足了余数*/
000E ; //===精确延时 4.125us,晶振8MHz ===//
000E ; //===调用函数及返回花费0.875us==//
000E ; }
000E ; void delay0ms15us(void)
000E ; {
000E .dbline 23
000E ; /*精确延时0ms 15us ,晶振8MHz*/
000E ; /*us级精确延时 766us/晶振以内 延时=1+n*3 */
000E ; // CLI;//屏蔽中断吗?
000E ; asm("LDI R18,37");//1t ,寄存器R15~R30
000E 25E2 LDI R18,37
0010 .dbline 24
0010 ; asm("CLZ");//1t
0010 9894 CLZ
0012 .dbline 25
0012 ; asm("LOOP111:DEC R18");//1t
0012 2A95 LOOP111:DEC R18
0014 .dbline 26
0014 ; asm("BRNE LOOP111");//1t或2t//标志位Z是0就转移
0014 F1F7 BRNE LOOP111
0016 .dbline 27
0016 ; asm("NOP");//1t
0016 0000 NOP
0018 .dbline -2
0018 L2:
0018 .dbline 0 ; func end
0018 0895 ret
001A .dbend
001A .dbfunc e delay0ms60us _delay0ms60us fV
.even
001A _delay0ms60us::
001A .dbline -1
001A .dbline 34
001A ; // SEI;
001A ; /*us级精确延时 24543us以内,用nop补足了余数*/
001A ; //===精确延时 14.125us,晶振8MHz ===//
001A ; //===调用函数及返回花费0.875us==//
001A ; }
001A ; void delay0ms60us(void)
001A ; {
001A .dbline 38
001A ; /*精确延时0ms 60us ,晶振8MHz*/
001A ; /*us级精确延时 766us/晶振以内 延时=1+n*3 */
001A ; // CLI;//屏蔽中断吗?
001A ; asm("LDI R18,157");//1t ,寄存器R15~R30
001A 2DE9 LDI R18,157
001C .dbline 39
001C ; asm("CLZ");//1t
001C 9894 CLZ
001E .dbline 40
001E ; asm("LOOP11:DEC R18");//1t
001E 2A95 LOOP11:DEC R18
0020 .dbline 41
0020 ; asm("BRNE LOOP11");//1t或2t//标志位Z是0就转移
0020 F1F7 BRNE LOOP11
0022 .dbline 42
0022 ; asm("NOP");//1t
0022 0000 NOP
0024 .dbline -2
0024 L3:
0024 .dbline 0 ; func end
0024 0895 ret
0026 .dbend
0026 .dbfunc e delay0ms500us _delay0ms500us fV
.even
0026 _delay0ms500us::
0026 .dbline -1
0026 .dbline 49
0026 ; // SEI;
0026 ; /*us级精确延时 24543us以内,用nop补足了余数*/
0026 ; //===精确延时 59.125us,晶振8MHz ===//
0026 ; //===调用函数及返回花费0.875us==//
0026 ; }
0026 ; void delay0ms500us(void)
0026 ; {
0026 .dbline 53
0026 ; /*精确延时0ms 500us ,晶振8MHz*/
0026 ; /*us级 196348us/晶振即196ms/晶振以内 延时=n*(m*3+5)*/
0026 ; // CLI;//屏蔽中断吗?
0026 ; asm("LDI R18,6");//外圈循环n
0026 26E0 LDI R18,6
0028 .dbline 54
0028 ; asm("LOOP32:LDI R19,220");//内圈循环m
0028 3CED LOOP32:LDI R19,220
002A .dbline 55
002A ; asm("CLZ");//1t
002A 9894 CLZ
002C .dbline 56
002C ; asm("LOOP22:DEC R19");//1t
002C 3A95 LOOP22:DEC R19
002E .dbline 57
002E ; asm("BRNE LOOP22");
002E F1F7 BRNE LOOP22
0030 .dbline 58
0030 ; asm("CLZ");//1t
0030 9894 CLZ
0032 .dbline 59
0032 ; asm("DEC R18");//1t
0032 2A95 DEC R18
0034 .dbline 60
0034 ; asm("BRNE LOOP32");
0034 C9F7 BRNE LOOP32
0036 .dbline 61
0036 ; asm("NOP");//1t
0036 0000 NOP
0038 .dbline 62
0038 ; asm("NOP");//1t
0038 0000 NOP
003A .dbline 63
003A ; asm("NOP");//1t
003A 0000 NOP
003C .dbline -2
003C L4:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
003E ; // SEI;
003E ; /*us级精确延时 24543us以内,用nop补足了余数*/
003E ; //===精确延时 499.125us,晶振8MHz ===//
003E ; //===调用函数及返回花费0.875us==//
003E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -