📄 111.lis
字号:
.module _111.c
.area text(rom, con, rel)
0000 .dbfile ..\..\..\..\PROTEU~2\5.avr\19.温度测量ds18b20\2.精确延时函数\111.c
0000 .dbfile D:\教程及心得\Proteus\PROTEU~2\5.avr\19.温度测量ds18b20\2.精确延时函数\111.c
0000 .dbfunc e delay0ms5us _delay0ms5us fV
.even
0000 _delay0ms5us::
0000 .dbline -1
0000 .dbline 10
0000 ; //ICC-AVR application builder : 2008/11/17 22:33:32
0000 ; // Target : M8
0000 ; // Crystal: 8.0000Mhz
0000 ;
0000 ; #include <iom8v.h>
0000 ; #include <macros.h>
0000 ; #include "mydelay.h"
0000 ; #define uchar unsigned char
0000 ; void delay0ms5us(void)
0000 ; {
0000 .dbline 14
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 15
0002 ; asm("CLZ");//1t
0002 9894 CLZ
0004 .dbline 16
0004 ; asm("LOOP1:DEC R18");//1t
0004 2A95 LOOP1:DEC R18
0006 .dbline 17
0006 ; asm("BRNE LOOP1");//1t或2t//标志位Z是0就转移
0006 F1F7 BRNE LOOP1
0008 .dbline 18
0008 ; asm("NOP");//1t
0008 0000 NOP
000A .dbline 19
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 port_init _port_init fV
.even
000E _port_init::
000E .dbline -1
000E .dbline 27
000E ; // SEI;
000E ; /*us级精确延时 24543us以内,可用nop补足余数*/
000E ; //===精确延时 4.125us,晶振8MHz ===//
000E ; //===调用函数及返回花费0.875us==//
000E ; }
000E ;
000E ; void port_init(void)
000E ; {
000E .dbline 28
000E ; PORTB = 0x00;
000E 2224 clr R2
0010 28BA out 0x18,R2
0012 .dbline 29
0012 ; DDRB = 0x00;
0012 27BA out 0x17,R2
0014 .dbline 30
0014 ; PORTC = 0x00; //m103 output only
0014 25BA out 0x15,R2
0016 .dbline 31
0016 ; DDRC = 0xff;
0016 8FEF ldi R24,255
0018 84BB out 0x14,R24
001A .dbline 32
001A ; PORTD = 0x00;
001A 22BA out 0x12,R2
001C .dbline 33
001C ; DDRD = 0x00;
001C 21BA out 0x11,R2
001E .dbline -2
001E L2:
001E .dbline 0 ; func end
001E 0895 ret
0020 .dbend
0020 .dbfunc e init_devices _init_devices fV
.even
0020 _init_devices::
0020 .dbline -1
0020 .dbline 38
0020 ; }
0020 ;
0020 ; //call this routine to initialize all peripherals
0020 ; void init_devices(void)
0020 ; {
0020 .dbline 40
0020 ; //stop errant interrupts until set up
0020 ; CLI(); //disable all interrupts
0020 F894 cli
0022 .dbline 41
0022 ; port_init();
0022 F5DF rcall _port_init
0024 .dbline 43
0024 ;
0024 ; MCUCR = 0x00;
0024 2224 clr R2
0026 25BE out 0x35,R2
0028 .dbline 44
0028 ; GICR = 0x00;
0028 2BBE out 0x3b,R2
002A .dbline 45
002A ; TIMSK = 0x00; //timer interrupt sources
002A 29BE out 0x39,R2
002C .dbline 46
002C ; SEI(); //re-enable interrupts
002C 7894 sei
002E .dbline -2
002E L3:
002E .dbline 0 ; func end
002E 0895 ret
0030 .dbend
0030 .dbfunc e main _main fV
.even
0030 _main::
0030 .dbline -1
0030 .dbline 51
0030 ; //all peripherals are now initialized
0030 ; }
0030 ;
0030 ; void main(void)
0030 ; {
0030 .dbline 52
0030 ; init_devices();
0030 F7DF rcall _init_devices
0032 .dbline 53
0032 ; PORTC=0x00;
0032 2224 clr R2
0034 25BA out 0x15,R2
0036 .dbline 54
0036 ; delay0ms900us();
0036 00D0 rcall _delay0ms900us
0038 .dbline 55
0038 ; PORTC=0xff;
0038 8FEF ldi R24,255
003A 85BB out 0x15,R24
003C .dbline -2
003C L4:
003C .dbline 0 ; func end
003C 0895 ret
003E .dbend
003E ; }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -