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

📄 18b20.lis

📁 一个不错的DS1820的程序
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module _18b20.c
                        .area text(rom, con, rel)
 0000                   .dbfile F:\单片机资料\AVR单片机\制作ds18b20\18B20\18b20.c
 0000                   .dbfunc e init_1820 _init_1820 fV
                        .even
 0000           _init_1820::
 0000                   .dbline -1
 0000                   .dbline 12
 0000           ; /**************************************
 0000           ; ** Filename: 18b20.c
 0000           ; ** Describe: 18b20 温度传感器
 0000           ; ** Author : 古欣 www.avrvi.com
 0000           ; ** Time  :   2007-2-15
 0000           ; **************************************/
 0000           ; 
 0000           ; #include "config.h"
 0000           ; 
 0000           ; unsigned char wmh,wml,flag,count; //flag温度为负标志,count为实际温度
 0000           ; void init_1820(void)  
 0000           ; {  
 0000                   .dbline 13
 0000           ;     SET_DIR_1WIRE;      //设置PC2 为输出 
 0000 BC9A              sbi 0x17,4
 0002                   .dbline 14
 0002           ;     SET_OP_1WIRE;   
 0002 C49A              sbi 0x18,4
 0004                   .dbline 15
 0004           ;     CLR_OP_1WIRE;  
 0004 C498              cbi 0x18,4
 0006                   .dbline 16
 0006           ;     delay_us(480);    //480us以上  
 0006 00EE              ldi R16,480
 0008 11E0              ldi R17,1
 000A 0E940000          xcall _delay_us
 000E                   .dbline 17
 000E           ;     SET_OP_1WIRE;  
 000E C49A              sbi 0x18,4
 0010                   .dbline 18
 0010           ;     CLR_DIR_1WIRE;  
 0010 BC98              cbi 0x17,4
 0012                   .dbline 19
 0012           ;     delay_us(20);     //15~60us  
 0012 04E1              ldi R16,20
 0014 10E0              ldi R17,0
 0016 0E940000          xcall _delay_us
 001A           L2:
 001A                   .dbline 20
 001A           ;     while(CHECK_IP_1WIRE);  
 001A           L3:
 001A                   .dbline 20
 001A B499              sbic 0x16,4
 001C FECF              rjmp L2
 001E           X0:
 001E                   .dbline 21
 001E           ;     SET_DIR_1WIRE;  
 001E BC9A              sbi 0x17,4
 0020                   .dbline 22
 0020           ;     SET_OP_1WIRE;  
 0020 C49A              sbi 0x18,4
 0022                   .dbline 23
 0022           ;     delay_us(140);   //60~240us  
 0022 0CE8              ldi R16,140
 0024 10E0              ldi R17,0
 0026                   .dbline -2
 0026           L1:
 0026                   .dbline 0 ; func end
 0026 0C940000          xjmp _delay_us
 002A                   .dbend
 002A                   .dbfunc e write_1820 _write_1820 fV
 002A           ;              m -> R20
 002A           ;              x -> R10
                        .even
 002A           _write_1820::
 002A AA92              st -y,R10
 002C 4A93              st -y,R20
 002E A02E              mov R10,R16
 0030                   .dbline -1
 0030                   .dbline 26
 0030           ; }  
 0030           ; void write_1820(unsigned char x)  
 0030           ; {     
 0030                   .dbline 28
 0030           ;      unsigned char m;  
 0030           ;     for(m=0;m<8;m++)  
 0030 4427              clr R20
 0032 11C0              xjmp L9
 0034           L6:
 0034                   .dbline 29
 0034           ;     {  
 0034                   .dbline 30
 0034           ;        CLR_OP_1WIRE;  
 0034 C498              cbi 0x18,4
 0036                   .dbline 31
 0036           ;        if(x&(1<<m))    //写数据了,先写低位的! 
 0036 01E0              ldi R16,1
 0038 142F              mov R17,R20
 003A 0E940000          xcall lsl8
 003E 2A2C              mov R2,R10
 0040 2022              and R2,R16
 0042 11F0              breq L10
 0044           X1:
 0044                   .dbline 32
 0044           ;        SET_OP_1WIRE;  
 0044 C49A              sbi 0x18,4
 0046 01C0              xjmp L11
 0048           L10:
 0048                   .dbline 34
 0048           ;        else  
 0048           ;        {CLR_OP_1WIRE;}  
 0048                   .dbline 34
 0048 C498              cbi 0x18,4
 004A                   .dbline 34
 004A           L11:
 004A                   .dbline 35
 004A           ;        delay_us(40);   //15~60us  
 004A 08E2              ldi R16,40
 004C 10E0              ldi R17,0
 004E 0E940000          xcall _delay_us
 0052                   .dbline 36
 0052           ;        SET_OP_1WIRE;  
 0052 C49A              sbi 0x18,4
 0054                   .dbline 37
 0054           ;     }  
 0054           L7:
 0054                   .dbline 28
 0054 4395              inc R20
 0056           L9:
 0056                   .dbline 28
 0056 4830              cpi R20,8
 0058 68F3              brlo L6
 005A           X2:
 005A                   .dbline 38
 005A           ;      SET_OP_1WIRE;  
 005A C49A              sbi 0x18,4
 005C                   .dbline -2
 005C           L5:
 005C                   .dbline 0 ; func end
 005C 4991              ld R20,y+
 005E A990              ld R10,y+
 0060 0895              ret
 0062                   .dbsym r m 20 c
 0062                   .dbsym r x 10 c
 0062                   .dbend
 0062                   .dbfunc e read_1820 _read_1820 fc
 0062           ;           temp -> R10
 0062           ;              k -> R22
 0062           ;              n -> R20
                        .even
 0062           _read_1820::
 0062 0E940000          xcall push_xgsetF00C
 0066                   .dbline -1
 0066                   .dbline 41
 0066           ; }  
 0066           ; unsigned char read_1820(void)  
 0066           ; {      
 0066                   .dbline 43
 0066           ;     unsigned char temp,k,n;  
 0066           ;     temp=0;  
 0066 AA24              clr R10
 0068                   .dbline 44
 0068           ;     for(n=0;n<8;n++)  
 0068 4427              clr R20
 006A 19C0              xjmp L16
 006C           L13:
 006C                   .dbline 45
 006C           ;     {
 006C                   .dbline 46
 006C           ;       CLR_OP_1WIRE;  
 006C C498              cbi 0x18,4
 006E                   .dbline 47
 006E           ;       SET_OP_1WIRE;  
 006E C49A              sbi 0x18,4
 0070                   .dbline 48
 0070           ;       CLR_DIR_1WIRE;  
 0070 BC98              cbi 0x17,4
 0072                   .dbline 49
 0072           ;       k=(CHECK_IP_1WIRE);    //读数据,从低位开始  
 0072 66B3              in R22,0x16
 0074 6071              andi R22,16
 0076                   .dbline 50
 0076           ;       if(k)  
 0076 31F0              breq L17
 0078           X3:
 0078                   .dbline 51
 0078           ;       temp|=(1<<n);  
 0078 01E0              ldi R16,1
 007A 142F              mov R17,R20
 007C 0E940000          xcall lsl8
 0080 A02A              or R10,R16
 0082 07C0              xjmp L18
 0084           L17:
 0084                   .dbline 53
 0084           ;       else  
 0084           ;       temp&=~(1<<n);  
 0084 01E0              ldi R16,1
 0086 142F              mov R17,R20
 0088 0E940000          xcall lsl8
 008C 202E              mov R2,R16
 008E 2094              com R2
 0090 A220              and R10,R2
 0092           L18:
 0092                   .dbline 54
 0092           ;       delay_us(50); //60~120us      
 0092 02E3              ldi R16,50
 0094 10E0              ldi R17,0
 0096 0E940000          xcall _delay_us
 009A                   .dbline 55
 009A           ;       SET_DIR_1WIRE;  
 009A BC9A              sbi 0x17,4
 009C                   .dbline 56
 009C           ;     }  
 009C           L14:
 009C                   .dbline 44
 009C 4395              inc R20
 009E           L16:
 009E                   .dbline 44
 009E 4830              cpi R20,8
 00A0 28F3              brlo L13
 00A2           X4:
 00A2                   .dbline 57
 00A2           ;    return (temp);  

⌨️ 快捷键说明

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