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

📄 ds18b20.lis

📁 AVR16源代码 ICC编译器
💻 LIS
📖 第 1 页 / 共 3 页
字号:
                        .module DS18B20.C
                        .area text(rom, con, rel)
 0000                   .dbfile D:\MY_COMPUTER\d\avr16\atmegal16\DS18B20.C
 0000                   .dbfunc e crccheck _crccheck fc
 0000           ;              j -> R20
 0000           ;              r -> R14
 0000           ;           cbit -> y+0
 0000           ;           bit0 -> R8
 0000           ;           byte -> R10
 0000           ;              i -> R12
 0000           ;           temp -> R22
 0000           ;            len -> R6
 0000           ;              p -> R4,R5
                        .even
 0000           _crccheck::
 0000 0E940000          xcall push_gset5
 0004 622E              mov R6,R18
 0006 2801              movw R4,R16
 0008 2197              sbiw R28,1
 000A                   .dbline -1
 000A                   .dbline 24
 000A           ; /********************************************************************
 000A           ;                       ATmega16L开发板18B20测试程序
 000A           ;                       晶振频率:      4MHz
 000A           ;                       编译:          ICCAVR 6.31
 000A           ;                       编写:          QINDAOTANG
 000A           ; ********************************************************************/
 000A           ; 
 000A           ; #include <iom16v.h>
 000A           ; #include <macros.h>
 000A           ; #include "DS18B20.H"
 000A           ; //硬件连接与PD6
 000A           ; #define      DQ       1<<6      
 000A           ; #define      true     0
 000A           ; #define      false     1
 000A           ; float temperature;
 000A           ; /*===================================================================
 000A           ; //    函数功能:      DS18B20数据校验函数
 000A           ; //    形参:          void
 000A           ; //    返回:          unsigned char   校验结果
 000A           ; //    编写:          2004/8/25
 000A           ; //    备注:          CRC公式为:CRC = X^8 + X^5 + X^4 + 1
 000A           ; ===================================================================*/
 000A           ; unsigned char crccheck(unsigned char *p,unsigned char len)
 000A           ; {
 000A                   .dbline 26
 000A           ;       unsigned char bit0,cbit,r,temp,i,j,byte;
 000A           ;       temp = 0;
 000A 6627              clr R22
 000C                   .dbline 27
 000C           ;       for(j = 0; j < len; j++)
 000C 4427              clr R20
 000E 20C0              xjmp L5
 0010           L2:
 0010                   .dbline 28
 0010           ;       {
 0010                   .dbline 29
 0010           ;               byte = p[j];
 0010 E42F              mov R30,R20
 0012 FF27              clr R31
 0014 E40D              add R30,R4
 0016 F51D              adc R31,R5
 0018 A080              ldd R10,z+0
 001A                   .dbline 30
 001A           ;               for(i = 0; i < 8; i++)
 001A CC24              clr R12
 001C 15C0              xjmp L9
 001E           L6:
 001E                   .dbline 31
 001E           ;               {
 001E                   .dbline 32
 001E           ;                       cbit = temp & 0x01;
 001E 862F              mov R24,R22
 0020 8170              andi R24,1
 0022 8883              std y+0,R24
 0024                   .dbline 33
 0024           ;                       bit0 = byte&0x01;
 0024 8A2D              mov R24,R10
 0026 8170              andi R24,1
 0028 882E              mov R8,R24
 002A                   .dbline 34
 002A           ;                       temp >>=   1;
 002A 6695              lsr R22
 002C                   .dbline 35
 002C           ;                       r = cbit ^ bit0;
 002C E880              ldd R14,y+0
 002E E826              eor R14,R24
 0030                   .dbline 36
 0030           ;                       if(r == 1)
 0030 8E2D              mov R24,R14
 0032 8130              cpi R24,1
 0034 39F4              brne L10
 0036                   .dbline 37
 0036           ;                               temp ^= 0x8c;
 0036 8CE8              ldi R24,140
 0038 90E0              ldi R25,0
 003A 262E              mov R2,R22
 003C 3324              clr R3
 003E 2826              eor R2,R24
 0040 3926              eor R3,R25
 0042 622D              mov R22,R2
 0044           L10:
 0044                   .dbline 38
 0044 A694              lsr R10
 0046                   .dbline 39
 0046           L7:
 0046                   .dbline 30
 0046 C394              inc R12
 0048           L9:
 0048                   .dbline 30
 0048 8C2D              mov R24,R12
 004A 8830              cpi R24,8
 004C 40F3              brlo L6
 004E                   .dbline 40
 004E           L3:
 004E                   .dbline 27
 004E 4395              inc R20
 0050           L5:
 0050                   .dbline 27
 0050 4615              cp R20,R6
 0052 F0F2              brlo L2
 0054                   .dbline 41
 0054           ;                       byte >>= 1;
 0054           ;               }
 0054           ;       }
 0054           ;       return  temp;   
 0054 062F              mov R16,R22
 0056                   .dbline -2
 0056           L1:
 0056 2196              adiw R28,1
 0058 0E940000          xcall pop_gset5
 005C                   .dbline 0 ; func end
 005C 0895              ret
 005E                   .dbsym r j 20 c
 005E                   .dbsym r r 14 c
 005E                   .dbsym l cbit 0 c
 005E                   .dbsym r bit0 8 c
 005E                   .dbsym r byte 10 c
 005E                   .dbsym r i 12 c
 005E                   .dbsym r temp 22 c
 005E                   .dbsym r len 6 c
 005E                   .dbsym r p 4 pc
 005E                   .dbend
 005E                   .dbfunc e delay_us _delay_us fV
 005E           ;           time -> R16,R17
                        .even
 005E           _delay_us::
 005E                   .dbline -1
 005E                   .dbline 50
 005E           ; }
 005E           ; /*===================================================================
 005E           ; //    函数功能:      us延时函数
 005E           ; //    形参:          void
 005E           ; //    返回:          void
 005E           ; //    编写:          2004/8/25
 005E           ; ===================================================================*/
 005E           ; void  delay_us(unsigned int time)
 005E           ; {     
 005E           L13:
 005E                   .dbline 52
 005E           ;       do
 005E           ;       {
 005E                   .dbline 53
 005E           ;               time--;
 005E 0150              subi R16,1
 0060 1040              sbci R17,0
 0062                   .dbline 54
 0062           ;       }       
 0062           L14:
 0062                   .dbline 55
 0062           ;       while (time>1);
 0062 81E0              ldi R24,1
 0064 90E0              ldi R25,0
 0066 8017              cp R24,R16
 0068 9107              cpc R25,R17
 006A C8F3              brlo L13
 006C                   .dbline -2
 006C                   .dbline 56
 006C           ; }
 006C           L12:
 006C                   .dbline 0 ; func end
 006C 0895              ret
 006E                   .dbsym r time 16 i
 006E                   .dbend
 006E                   .dbfunc e ds1820_ack _ds1820_ack fc
 006E           ;            ack -> R20
                        .even
 006E           _ds1820_ack::
 006E 0E940000          xcall push_gset1
 0072                   .dbline -1
 0072                   .dbline 65
 0072           ; 
 0072           ; /*===================================================================
 0072           ; //    函数功能:      判断总线应答
 0072           ; //    形参:          void
 0072           ; //    返回:          unsigned char   true为应答
 0072           ; //    编写:          2004/8/25
 0072           ; ===================================================================*/
 0072           ; unsigned char ds1820_ack(void)
 0072           ; {
 0072                   .dbline 67
 0072           ;       unsigned char ack;
 0072           ;       DDRD |= DQ;
 0072 8E9A              sbi 0x11,6
 0074                   .dbline 68
 0074           ;       PORTD &= ~DQ;
 0074 82B3              in R24,0x12
 0076 8078              andi R24,128
 0078 82BB              out 0x12,R24
 007A                   .dbline 69
 007A           ;       delay_us(300);          //480US以上                                     //      reset
 007A 0CE2              ldi R16,300
 007C 11E0              ldi R17,1
 007E EFDF              xcall _delay_us
 0080                   .dbline 70
 0080           ;       PORTD |= DQ;
 0080 969A              sbi 0x12,6
 0082                   .dbline 71
 0082           ;       DDRD &= ~DQ;
 0082 81B3              in R24,0x11
 0084 8078              andi R24,128
 0086 81BB              out 0x11,R24
 0088                   .dbline 72
 0088           ;       delay_us(25);
 0088 09E1              ldi R16,25
 008A 10E0              ldi R17,0
 008C E8DF              xcall _delay_us
 008E                   .dbline 73
 008E           ;       ack = DQ & PIND;
 008E 40B3              in R20,0x10
 0090 4074              andi R20,64
 0092                   .dbline 74
 0092           ;       delay_us(300);                                                  //      host receive
 0092 0CE2              ldi R16,300
 0094 11E0              ldi R17,1
 0096 E3DF              xcall _delay_us
 0098                   .dbline 75
 0098           ;       if(ack)
 0098 4423              tst R20
 009A 11F0              breq L17
 009C                   .dbline 76
 009C           ;               return false;
 009C 01E0              ldi R16,1
 009E 01C0              xjmp L16
 00A0           L17:
 00A0                   .dbline 78
 00A0           ;       else
 00A0           ;               return true;
 00A0 0027              clr R16
 00A2                   .dbline -2
 00A2           L16:
 00A2 0E940000          xcall pop_gset1
 00A6                   .dbline 0 ; func end
 00A6 0895              ret
 00A8                   .dbsym r ack 20 c
 00A8                   .dbend
 00A8                   .dbfunc e read_byte _read_byte fc
 00A8           ;          value -> R20
 00A8           ;              i -> R22
                        .even
 00A8           _read_byte::
 00A8 0E940000          xcall push_gset2
 00AC                   .dbline -1
 00AC                   .dbline 88
 00AC           ; }
 00AC           ; 
 00AC           ; /*===================================================================
 00AC           ; //    函数功能:      从 1-wire 总线上读取一个字节
 00AC           ; //    形参:          void
 00AC           ; //    返回:          unsigned char   读到的值
 00AC           ; //    编写:          2004/8/25
 00AC           ; ===================================================================*/
 00AC           ; unsigned char read_byte(void)
 00AC           ; {
 00AC                   .dbline 90
 00AC           ;       unsigned char   i;
 00AC           ;       unsigned char   value = 0;
 00AC 4427              clr R20
 00AE                   .dbline 91
 00AE           ;       for(i = 8; i > 0; i--)
 00AE 68E0              ldi R22,8

⌨️ 快捷键说明

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