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

📄 ds18b20.lis

📁 非常经典的基于AVR m16的DS18B20 C 程序 !1
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                        .module ds18b20.c
                        .area text(rom, con, rel)
 0000                   .dbfile E:\DS18B20\ds18b20.c
 0000                   .dbfunc e rst_DS18B20 _rst_DS18B20 fc
 0000           ;        errTime -> R20
                        .even
 0000           _rst_DS18B20::
 0000 0E940000          xcall push_gset1
 0004                   .dbline -1
 0004                   .dbline 22
 0004           ; /****************************************
 0004           ; ** 文 件 名: DS18B20.c                                   **
 0004           ; ** 日    期: 2007年04月08日                      **
 0004           ; ** 描    述: DS18B20函数                         **
 0004           ; ** 作    者:tonghe                                      **
 0004           ; ** 版  本: V1.0                                          **
 0004           ; ** 主控芯片:M16                                         **
 0004           ; ** 晶振频率:7.3728MHZ, 波特率9600       **
 0004           ; ****************************************/
 0004           ; #include <iom16v.h>
 0004           ; #include <macros.h>
 0004           ; #include <E:\DS18B20\define.h>
 0004           ; #include <E:\DS18B20\function.h>
 0004           ; 
 0004           ; /****************************************
 0004           ; * 函数名称: uchar rst_DS18B20(void)           *
 0004           ; * 函数功能:DS18B20初始化                             *
 0004           ; * 入    口:无                                                        *
 0004           ; * 返    回:0x00为失败,0xFF为成功            *
 0004           ; ****************************************/
 0004           ; uchar rst_DS18B20(void)
 0004           ;    {
 0004                   .dbline 23
 0004           ;       uchar errTime=0;
 0004 4427              clr R20
 0006                   .dbline 24
 0006           ;       RLS_DS18B20;            //释放总线
 0006 8C98              cbi 0x11,4
 0008                   .dbline 25
 0008           ;       _NOP();
 0008 0000              nop
 000A                   .dbline 26
 000A           ;       HLD_DS18B20;            //Maga16控制总线
 000A 8C9A              sbi 0x11,4
 000C                   .dbline 27
 000C           ;       CLR_DS18B20;            //强制拉低
 000C 9498              cbi 0x12,4
 000E                   .dbline 28
 000E           ;       delay_us(255);          //209.42us
 000E 0FEF              ldi R16,255
 0010 0E940000          xcall _delay_us
 0014                   .dbline 29
 0014           ;       delay_us(255);          //209.42us
 0014 0FEF              ldi R16,255
 0016 0E940000          xcall _delay_us
 001A                   .dbline 30
 001A           ;       delay_us(255);          //83.28us
 001A 0FEF              ldi R16,255
 001C 0E940000          xcall _delay_us
 0020                   .dbline 32
 0020           ;       //以上的三个延时大于480us
 0020           ;       RLS_DS18B20;            //释放总线,总线自动上拉
 0020 8C98              cbi 0x11,4
 0022                   .dbline 33
 0022           ;       _NOP();                 
 0022 0000              nop
 0024 09C0              xjmp L3
 0026           L2:
 0026                   .dbline 35
 0026           ;       while(STU_DS18B20)      
 0026           ;               {
 0026                   .dbline 36
 0026           ;               delay_us(4);            //5.15us
 0026 04E0              ldi R16,4
 0028 0E940000          xcall _delay_us
 002C                   .dbline 37
 002C           ;               errTime++;
 002C 4395              inc R20
 002E                   .dbline 38
 002E           ;               if(errTime>20)
 002E 84E1              ldi R24,20
 0030 8417              cp R24,R20
 0032 10F4              brsh L5
 0034                   .dbline 39
 0034           ;               return(0x00);           //如果等大于5.15us*20就返回0x00,报告复位失败(实际上只要等待15-60us)
 0034 0027              clr R16
 0036 10C0              xjmp L1
 0038           L5:
 0038                   .dbline 40
 0038           L3:
 0038                   .dbline 34
 0038 8499              sbic 0x10,4
 003A F5CF              rjmp L2
 003C                   .dbline 41
 003C           ;               }
 003C           ;       errTime=0;
 003C 4427              clr R20
 003E 09C0              xjmp L8
 0040           L7:
 0040                   .dbline 43
 0040           ;       while(!(STU_DS18B20))   
 0040           ;           {
 0040                   .dbline 44
 0040           ;               delay_us(4);            //5.15us
 0040 04E0              ldi R16,4
 0042 0E940000          xcall _delay_us
 0046                   .dbline 45
 0046           ;               errTime++;
 0046 4395              inc R20
 0048                   .dbline 46
 0048           ;               if(errTime>50)
 0048 82E3              ldi R24,50
 004A 8417              cp R24,R20
 004C 10F4              brsh L10
 004E                   .dbline 47
 004E           ;               return(0x00);           //如果等大于5.15us*50就返回0x00,报告复位失败(实际上只要等待60-240us)
 004E 0027              clr R16
 0050 03C0              xjmp L1
 0052           L10:
 0052                   .dbline 48
 0052           L8:
 0052                   .dbline 42
 0052 849B              sbis 0x10,4
 0054 F5CF              rjmp L7
 0056                   .dbline 49
 0056           ;               }
 0056           ;       return(0xff);
 0056 0FEF              ldi R16,255
 0058                   .dbline -2
 0058           L1:
 0058 0E940000          xcall pop_gset1
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r errTime 20 c
 005E                   .dbend
 005E                   .dbfunc e read_DS18B20 _read_DS18B20 fc
 005E           ;         retVal -> R20
 005E           ;              i -> R22
                        .even
 005E           _read_DS18B20::
 005E 0E940000          xcall push_gset2
 0062                   .dbline -1
 0062                   .dbline 59
 0062           ;       }
 0062           ; 
 0062           ; /****************************************
 0062           ; * 函数名称: uchar read_DS18B20(void)  *
 0062           ; * 函数功能:读DS18B20一个字节                 *
 0062           ; * 入    口:无                                                        *
 0062           ; * 返    回:读出的数据字节                            *
 0062           ; ****************************************/
 0062           ; uchar read_DS18B20(void)
 0062           ;     {
 0062                   .dbline 61
 0062           ;       uchar i;
 0062           ;       uchar retVal=0;
 0062 4427              clr R20
 0064                   .dbline 62
 0064           ;       RLS_DS18B20;            //释放总线
 0064 8C98              cbi 0x11,4
 0066                   .dbline 63
 0066           ;       for(i=8;i>0;i--)
 0066 68E0              ldi R22,8
 0068 18C0              xjmp L16
 006A           L13:
 006A                   .dbline 64
 006A           ;           {
 006A                   .dbline 65
 006A           ;               retVal>>=1;
 006A 4695              lsr R20
 006C                   .dbline 66
 006C           ;           HLD_DS18B20;        //Maga16控制总线
 006C 8C9A              sbi 0x11,4
 006E                   .dbline 67
 006E           ;               CLR_DS18B20;    //强制拉低
 006E 9498              cbi 0x12,4
 0070                   .dbline 68
 0070           ;               delay_us(5);            //延时大于1us   
 0070 05E0              ldi R16,5
 0072 0E940000          xcall _delay_us
 0076                   .dbline 69
 0076           ;               RLS_DS18B20;            //释放总线,DS18B20会将总线强制拉低
 0076 8C98              cbi 0x11,4
 0078                   .dbline 70
 0078           ;               delay_us(2);    
 0078 02E0              ldi R16,2
 007A 0E940000          xcall _delay_us
 007E                   .dbline 71
 007E           ;               if(STU_DS18B20)
 007E 849B              sbis 0x10,4
 0080 01C0              rjmp L17
 0082                   .dbline 72
 0082           ;               retVal|=0x80;
 0082 4068              ori R20,128
 0084           L17:
 0084                   .dbline 73
 0084 00E1              ldi R16,16
 0086 0E940000          xcall _delay_us
 008A                   .dbline 74
 008A 00E1              ldi R16,16
 008C 0E940000          xcall _delay_us
 0090                   .dbline 75

⌨️ 快捷键说明

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