⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ds18b20.lis

📁 F:程序DS18B20.rar索读取温度
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module DS18B20.C
                        .area text(rom, con, rel)
 0000                   .dbfile F:\try\DS18B20\DS18B20.C
 0000                   .dbfunc e init_1820 _init_1820 fV
                        .even
 0000           _init_1820::
 0000                   .dbline -1
 0000                   .dbline 19
 0000           ; /************************************************************************* 
 0000           ; ds18b20头文件    
 0000           ; M16  内部8M         
 0000           ; *************************************************************************/ 
 0000           ; #include <iom16v.h>
 0000           ; #include <macros.h>
 0000           ; #include "DS18B20.h"
 0000           ; 
 0000           ; #define CLR_DIR_1WIRE DDRC&=~BIT(2)   
 0000           ;   //只要修改这里的参数就可以了!呵呵! 
 0000           ; #define SET_DIR_1WIRE DDRC|=BIT(2)     
 0000           ;  //里面什么都不用该! 
 0000           ; #define CLR_OP_1WIRE PORTC&=~BIT(2) 
 0000           ; #define SET_OP_1WIRE PORTC|=BIT(2)       
 0000           ; #define CHECK_IP_1WIRE (PINC & 0x04)   
 0000           ;  //检测 
 0000           ; unsigned char wmh,wml; 
 0000           ; void init_1820(void)  
 0000           ; {  
 0000                   .dbline 20
 0000           ;     SET_DIR_1WIRE;                //设置PC2 为输出 
 0000 A29A              sbi 0x14,2
 0002                   .dbline 21
 0002           ;     SET_OP_1WIRE;   
 0002 AA9A              sbi 0x15,2
 0004                   .dbline 22
 0004           ;     CLR_OP_1WIRE;  
 0004 AA98              cbi 0x15,2
 0006                   .dbline 23
 0006           ;     delay_nus(500);    //480us以上  
 0006 04EF              ldi R16,500
 0008 11E0              ldi R17,1
 000A 6AD0              xcall _delay_nus
 000C                   .dbline 24
 000C           ;     SET_OP_1WIRE;  
 000C AA9A              sbi 0x15,2
 000E                   .dbline 25
 000E           ;     CLR_DIR_1WIRE;  
 000E A298              cbi 0x14,2
 0010                   .dbline 26
 0010           ;     delay_nus(25);     //15~60us  
 0010 09E1              ldi R16,25
 0012 10E0              ldi R17,0
 0014 65D0              xcall _delay_nus
 0016           L2:
 0016                   .dbline 27
 0016           ;     while(CHECK_IP_1WIRE);  
 0016           L3:
 0016                   .dbline 27
 0016 9A99              sbic 0x13,2
 0018 FECF              rjmp L2
 001A           X0:
 001A                   .dbline 28
 001A           ;     SET_DIR_1WIRE;  
 001A A29A              sbi 0x14,2
 001C                   .dbline 29
 001C           ;     SET_OP_1WIRE;  
 001C AA9A              sbi 0x15,2
 001E                   .dbline 30
 001E           ;     delay_nus(180);   //60~240us  
 001E 04EB              ldi R16,180
 0020 10E0              ldi R17,0
 0022 5ED0              xcall _delay_nus
 0024                   .dbline -2
 0024           L1:
 0024                   .dbline 0 ; func end
 0024 0895              ret
 0026                   .dbend
 0026                   .dbfunc e write_1820 _write_1820 fV
 0026           ;              m -> R20
 0026           ;              x -> R10
                        .even
 0026           _write_1820::
 0026 AA92              st -y,R10
 0028 4A93              st -y,R20
 002A A02E              mov R10,R16
 002C                   .dbline -1
 002C                   .dbline 33
 002C           ; }  
 002C           ; void write_1820(unsigned char x)  
 002C           ; {     
 002C                   .dbline 35
 002C           ;      unsigned char m;  
 002C           ;     for(m=0;m<8;m++)  
 002C 4427              clr R20
 002E 10C0              xjmp L9
 0030           L6:
 0030                   .dbline 36
 0030           ;     {  
 0030                   .dbline 37
 0030           ;        CLR_OP_1WIRE;  
 0030 AA98              cbi 0x15,2
 0032                   .dbline 38
 0032           ;        if(x&(1<<m))    //写数据了,先写低位的! 
 0032 01E0              ldi R16,1
 0034 142F              mov R17,R20
 0036 0E940000          xcall lsl8
 003A 2A2C              mov R2,R10
 003C 2022              and R2,R16
 003E 11F0              breq L10
 0040           X1:
 0040                   .dbline 39
 0040           ;        SET_OP_1WIRE;  
 0040 AA9A              sbi 0x15,2
 0042 01C0              xjmp L11
 0044           L10:
 0044                   .dbline 41
 0044           ;        else  
 0044           ;        {CLR_OP_1WIRE;}  
 0044                   .dbline 41
 0044 AA98              cbi 0x15,2
 0046                   .dbline 41
 0046           L11:
 0046                   .dbline 42
 0046           ;        delay_nus(40);   //15~60us  
 0046 08E2              ldi R16,40
 0048 10E0              ldi R17,0
 004A 4AD0              xcall _delay_nus
 004C                   .dbline 43
 004C           ;        SET_OP_1WIRE;  
 004C AA9A              sbi 0x15,2
 004E                   .dbline 44
 004E           ;     }  
 004E           L7:
 004E                   .dbline 35
 004E 4395              inc R20
 0050           L9:
 0050                   .dbline 35
 0050 4830              cpi R20,8
 0052 70F3              brlo L6
 0054           X2:
 0054                   .dbline 45
 0054           ;      SET_OP_1WIRE;  
 0054 AA9A              sbi 0x15,2
 0056                   .dbline -2
 0056           L5:
 0056                   .dbline 0 ; func end
 0056 4991              ld R20,y+
 0058 A990              ld R10,y+
 005A 0895              ret
 005C                   .dbsym r m 20 c
 005C                   .dbsym r x 10 c
 005C                   .dbend
 005C                   .dbfunc e read_1820 _read_1820 fc
 005C           ;           temp -> R10
 005C           ;              k -> R22
 005C           ;              n -> R20
                        .even
 005C           _read_1820::
 005C 0E940000          xcall push_xgsetF00C
 0060                   .dbline -1
 0060                   .dbline 48
 0060           ; }  
 0060           ; unsigned char read_1820(void)  
 0060           ; {      
 0060                   .dbline 50
 0060           ;     unsigned char temp,k,n;  
 0060           ;     temp=0;  
 0060 AA24              clr R10
 0062                   .dbline 51
 0062           ;     for(n=0;n<8;n++)  
 0062 4427              clr R20
 0064 18C0              xjmp L16
 0066           L13:
 0066                   .dbline 52
 0066           ;        {  
 0066                   .dbline 53
 0066           ;       CLR_OP_1WIRE;  
 0066 AA98              cbi 0x15,2
 0068                   .dbline 54
 0068           ;       SET_OP_1WIRE;  
 0068 AA9A              sbi 0x15,2
 006A                   .dbline 55
 006A           ;       CLR_DIR_1WIRE;  
 006A A298              cbi 0x14,2
 006C                   .dbline 56
 006C           ;       k=(CHECK_IP_1WIRE);    //读数据,从低位开始  
 006C 63B3              in R22,0x13
 006E 6470              andi R22,4
 0070                   .dbline 57
 0070           ;       if(k)  
 0070 31F0              breq L17
 0072           X3:
 0072                   .dbline 58
 0072           ;       temp|=(1<<n);  
 0072 01E0              ldi R16,1
 0074 142F              mov R17,R20
 0076 0E940000          xcall lsl8
 007A A02A              or R10,R16
 007C 07C0              xjmp L18
 007E           L17:
 007E                   .dbline 60
 007E           ;       else  
 007E           ;       temp&=~(1<<n);  
 007E 01E0              ldi R16,1
 0080 142F              mov R17,R20
 0082 0E940000          xcall lsl8
 0086 202E              mov R2,R16
 0088 2094              com R2
 008A A220              and R10,R2
 008C           L18:
 008C                   .dbline 61
 008C           ;       delay_nus(80); //60~120us      
 008C 00E5              ldi R16,80
 008E 10E0              ldi R17,0
 0090 27D0              xcall _delay_nus
 0092                   .dbline 62
 0092           ;       SET_DIR_1WIRE;  
 0092 A29A              sbi 0x14,2
 0094                   .dbline 63
 0094           ;    }  
 0094           L14:
 0094                   .dbline 51
 0094 4395              inc R20
 0096           L16:
 0096                   .dbline 51
 0096 4830              cpi R20,8
 0098 30F3              brlo L13
 009A           X4:
 009A                   .dbline 64
 009A           ;    return (temp);  
 009A 0A2D              mov R16,R10
 009C                   .dbline -2
 009C           L12:
 009C                   .dbline 0 ; func end
 009C 0C940000          xjmp pop_xgsetF00C
 00A0                   .dbsym r temp 10 c
 00A0                   .dbsym r k 22 c
 00A0                   .dbsym r n 20 c

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -