📄 111.lst
字号:
__start:
__text_start:
13 E5CF LDI R28,0x5F
14 E0D4 LDI R29,4
15 BFCD OUT 0x3D,R28
16 BFDE OUT 0x3E,R29
17 51CE SUBI R28,0x1E
18 40D0 SBCI R29,0
19 EA0A LDI R16,0xAA
1A 8308 STD Y+0,R16
1B 2400 CLR R0
1C E6E0 LDI R30,0x60
1D E0F0 LDI R31,0
1E E010 LDI R17,0
1F 36E0 CPI R30,0x60
20 07F1 CPC R31,R17
21 F011 BEQ 0x0024
22 9201 ST R0,Z+
23 CFFB RJMP 0x001F
24 8300 STD Z+0,R16
25 E2E6 LDI R30,0x26
26 E0F0 LDI R31,0
27 E6A0 LDI R26,0x60
28 E0B0 LDI R27,0
29 E010 LDI R17,0
2A E000 LDI R16,0
2B BF0B OUT 0x3B,R16
2C 32E6 CPI R30,0x26
2D 07F1 CPC R31,R17
2E F021 BEQ 0x0033
2F 95C8 LPM
30 9631 ADIW R30,1
31 920D ST R0,X+
32 CFF9 RJMP 0x002C
33 D019 RCALL _main
_exit:
34 CFFF RJMP _exit
FILE: D:\教程及心得\Proteus\PROTEU~2\5.avr\19.温度测量ds18b20\2.精确延时函数\111.c
(0001) //ICC-AVR application builder : 2008/11/17 22:33:32
(0002) // Target : M8
(0003) // Crystal: 8.0000Mhz
(0004)
(0005) #include <iom8v.h>
(0006) #include <macros.h>
(0007) #include "mydelay.h"
(0008) #define uchar unsigned char
(0009) void delay0ms5us(void)
(0010) {
(0011) /*精确延时0ms 5us ,晶振8MHz*/
(0012) /*us级精确延时 766us/晶振以内 延时=1+n*3 */
(0013) // CLI;//屏蔽中断
(0014) asm("LDI R18,10");//1t ,寄存器R15~R30
_delay0ms5us:
35 E02A LDI R18,0xA
(0015) asm("CLZ");//1t
36 9498 BCLR 1
(0016) asm("LOOP1:DEC R18");//1t
37 952A DEC R18
(0017) asm("BRNE LOOP1");//1t或2t//标志位Z是0就转移
38 F7F1 BNE 0x0037
(0018) asm("NOP");//1t
39 0000 NOP
(0019) asm("NOP");//1t
3A 0000 NOP
3B 9508 RET
(0020) // SEI;
(0021) /*us级精确延时 24543us以内,可用nop补足余数*/
(0022) //===精确延时 4.125us,晶振8MHz ===//
(0023) //===调用函数及返回花费0.875us==//
(0024) }
(0025)
(0026) void port_init(void)
(0027) {
(0028) PORTB = 0x00;
_port_init:
3C 2422 CLR R2
3D BA28 OUT 0x18,R2
(0029) DDRB = 0x00;
3E BA27 OUT 0x17,R2
(0030) PORTC = 0x00; //m103 output only
3F BA25 OUT 0x15,R2
(0031) DDRC = 0xff;
40 EF8F LDI R24,0xFF
41 BB84 OUT 0x14,R24
(0032) PORTD = 0x00;
42 BA22 OUT 0x12,R2
(0033) DDRD = 0x00;
43 BA21 OUT 0x11,R2
44 9508 RET
(0034) }
(0035)
(0036) //call this routine to initialize all peripherals
(0037) void init_devices(void)
(0038) {
(0039) //stop errant interrupts until set up
(0040) CLI(); //disable all interrupts
_init_devices:
45 94F8 BCLR 7
(0041) port_init();
46 DFF5 RCALL _port_init
(0042)
(0043) MCUCR = 0x00;
47 2422 CLR R2
48 BE25 OUT 0x35,R2
(0044) GICR = 0x00;
49 BE2B OUT 0x3B,R2
(0045) TIMSK = 0x00; //timer interrupt sources
4A BE29 OUT 0x39,R2
(0046) SEI(); //re-enable interrupts
4B 9478 BSET 7
4C 9508 RET
(0047) //all peripherals are now initialized
(0048) }
(0049)
(0050) void main(void)
(0051) {
(0052) init_devices();
_main:
4D DFF7 RCALL _init_devices
(0053) PORTC=0x00;
4E 2422 CLR R2
4F BA25 OUT 0x15,R2
(0054) delay0ms900us();
50 D003 RCALL _delay0ms900us
(0055) PORTC=0xff;
51 EF8F LDI R24,0xFF
52 BB85 OUT 0x15,R24
53 9508 RET
FILE: D:\教程及心得\Proteus\PROTEU~2\5.avr\19.温度测量ds18b20\2.精确延时函数\mydelay.c
(0001) #include "mydelay.h"
(0002) void delay0ms900us(void)
(0003) {
(0004) /*精确延时0ms 900us ,晶振1MHz*/
(0005) /*us级 196348us/晶振即196ms/晶振以内 延时=n*(m*3+5)*/
(0006) // CLI;//屏蔽中断吗?
(0007) asm("LDI R18,2");//外圈循环n
_delay0ms900us:
54 E022 LDI R18,2
(0008) asm("LOOP3:LDI R19,147");//内圈循环m
55 E933 LDI R19,0x93
(0009) asm("CLZ");//1t
56 9498 BCLR 1
(0010) asm("LOOP2:DEC R19");//1t
57 953A DEC R19
(0011) asm("BRNE LOOP2");
58 F7F1 BNE 0x0057
(0012) asm("CLZ");//1t
59 9498 BCLR 1
(0013) asm("DEC R18");//1t
5A 952A DEC R18
(0014) asm("BRNE LOOP3");
5B F7C9 BNE 0x0055
(0015) asm("NOP");//1t
FILE: <library>
5C 0000 NOP
5D 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -